barebox picotcp integration (2015.06.14)

Antony Pavlov antonynpavlov at gmail.com
Tue Jun 23 23:11:47 PDT 2015


On Mon, 22 Jun 2015 08:00:22 +0200
Sascha Hauer <s.hauer at pengutronix.de> wrote:

> On Sat, Jun 20, 2015 at 02:09:12PM +0300, Antony Pavlov wrote:
> > On Wed, 17 Jun 2015 11:28:57 +0200
> > Sascha Hauer <s.hauer at pengutronix.de> wrote:
> > 
> > > On Mon, Jun 15, 2015 at 01:13:43AM +0300, Antony Pavlov wrote:
> > > > Hi!
> > > > 
> > > > I have just published latest picotcp-enabled barebox.
> > > > Please see my 20150614.picotcp branch in my github barebox repo
> > > > (https://github.com/frantony/barebox/tree/20150614.picotcp).
> > > > 
> > ...
> > > 
> > > Why are you using the picotcp tftp implementation? picotcp surely
> > > supports sending/receiving udp packets, right? Wouldn't it be a good
> > > first step to replace the barebox udp API with the one picotcp provides?
> > > I mean I would expect that you replace only the network stack, not the
> > > network stack including the applications. If at some point we decide
> > > that the tftp implementation in picotcp is better than the one in
> > > barebox that would be the time to switch it.
> > > 
> > 
> > I have reworked tftp support: now barebox tftp implementation is used on top
> > of picotcp udp/ip stack and works 2 times slower than original u-boot stack-based
> > implementation (I have tested it with sandbox arch).
> 
> Do you have an idea why this is slower? I had a quick look into it and
> found nothing obvious.
> 

I have added nfs-over-picotcp support, please see https://github.com/frantony/barebox/tree/20150624.picotcp

I use very simple benchmarks.
I have sandbox barebox (192.168.1.2) and nfs- and tftp- servers on the same host (192.168.1.1).
I copy 16MiB (16777216 bytes) file from server to sandbox barebox over network several times.
I use time command inside sandox barebox for computing transfer time.

barebox at barebox sandbox:/ eth0.ipaddr=192.168.1.2
barebox at barebox sandbox:/ mount -t tftp 192.168.1.1 /mnt
...
barebox at barebox sandbox:/ time cp /mnt/16M .
time: 546ms

Here is typical transfer time values:

+--------+--------------+--------------+
|        |   U-boot     |   picotcp    |
|        |    stack     |    stack     |
+--------+--------------+--------------+
|        |              |              |
|  tftp  |    546ms     |    859ms     |
|        |              |              |
+--------+--------------+--------------+
|        |              |              |
|  nfs   |   1037ms     |   1393ms     |
|        |              |              |
+--------+--------------+--------------+

There are some rather simple possibilities to slighly improve picotcp-barebox performance:

  * drop extra memory copy;
  * drop extra pico_tick() calls (is_timeout() calls poller_call(), so there is no need
                                  to call poller_call() explicitly in nfs/tftp code);
  * there is an issue with sustained tftp small file copy. E.g.

         barebox at barebox sandbox:/ ifconfig eth 192.168.1.2 255.255.255.0
         Assigned ipv4 192.168.1.2 to device eth
         barebox at barebox sandbox:/ mount -t tftp 192.168.1.1 /mnt
         barebox at barebox sandbox:/ while true; do time cp /mnt/1M . ; done
         ...
         Warning: I have 122 timers
         Warning: I have 121 timers
         time: 48ms
         Warning: I have 122 timers
         Warning: I have 121 timers
         time: 53ms
         Warning: I have 122 timers
         Warning: I have 121 timers
         time: 54ms

Just now picotcp-enabled barebox uses

   * ping from picotcp;
   * dhcp from picotcp;
   * no DNS support.

Sascha! Do you think I should use barebox' own dhcp and ping realisation or keep one from picotcp?
Should I use DNS from barebox (over picotcp) or picotcp DNS realization?

--
Best regards,
  Antony Pavlov



More information about the barebox mailing list