Here is version 4.9.33. The main update for this version is a re-write of the IBM EMAC driver. The standard upstream driver was not performing very well, had a few bugs that caused hangs/data corruption under stress and was missing key HW functionalities supported by the APM81281 CPU and the Broadcom 54610 NIC. Consequently, at the standard MTU of 1500 bytes, netcat (nc) was only able to transfer 43MB/s over TCP. Jumbo packet support was broken as well.
In the new driver there is support for TAH (only TSO support still missing), Jumbo packets up to 9000 bytes, full MAL support, full MDIO and OCM support, Interrupt Coalescing, SYSFS (meaning you can modify EMAC parameters via /sys/class/net/eth0/, Mask Carrier Extension signals, Powerdown mode, WOL (wake on LAN) support, Broadcom NIC 54610 tuning etc. This kernel has sustained a 48 hour torture test with Jumbo packets disabled. One of the challenges is to validate all the combinations of options and MTU’s, I simply don’t have the time…
The most optimal MTU size is 4080 bytes, due to the MAL hardware, but performance for 9000 bytes is within 5%.
At MTU 4080, netcat transmits now at 122MB/s for TCP, the theoretical limit for 1GE. AT MTU=1500 this is around 95MB/s or more than twice the performance of the original driver. That is with all of the above features enabled, some of which offer power saving and reduced CPU usage at the expense of extra code in critical paths (=performance loss)…
With standard Debian Jessie SAMBA, a 1GB file read from Windows 10 Anniversary release is around 96MB/s, while writes are around 84GB/s. With some changes to the SAMBA code, I was able to get 101MB/s writes (clearly now limited by the SATA driver) and 118MB/s reads. However, a full torture test of this SAMBA build will takes weeks on our simple MBL’s and without this test, the risk for data corruption, memory leaks and/or loss is simply too high. Hence I am not planning to make this Samba modification available.
Next on the plan, if I get a few free hours late in the evening , is some more performance tuning of the SATA driver (110MB/s write and 175MB/s read is the goal, or I need to buy a faster WD hard drive…) and fixing the encryption HW to accelerate rsync and ssh.
Installation: extract the compressed tar archive to any directory (paths are relative). Copy boot/apollo3g.dtb_4.9.33 to /boot/apollo3g.dtb (make a copy of your original dtb file first), copy boot/uImage_4.9.33.nc.usb to /boot/uImage (again: backup first) and copy the whole lib/modules/4.9.33-mbl+ directory to /lib/modules.
Performance verification: on your Linux box (or Windows) make sure you configure the MTU at 4080 bytes (ifconfig eth0 mtu 4080 up).
On the WBL: nc -l -n -q 0 -T Maximize-Throughput IP-of-Linux-box -p 2222 >/dev/null
On my Linux Mint PC: dd if=/dev/zero bs=1024K count=1024 | nc -n -q 0 -T throughput IP-of-WBL 2222
To validate Samba performance on Windows, don’t forget to modify the MTU of your NIC, restart the SMB daemon (/etc/init.d/smbd restart) first and ideally unmap/remap the share.
Disclaimer: This voids your warranty. Despite all due diligence and testing done, data loss or corruption is at your own risk.