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