pspcoelho Posted November 14, 2015 Posted November 14, 2015 Before installing this Armbian legacy kernel (3.4.109), I was using a Bananian-based image with OpenMediaVault (the so called BanaNAS image) and was getting regular 30MB/s transfer rates to my Samba shared hard drives (USB and SATA). My PC and Banana are connected through a gigabit switch, and working at 1Gbps. After installing and configuring the new Armbian image, I notice my transfer rates were now around ~23MB/s which was odd. After trying to change some smb.conf parameters and getting nowhere, I decided to test just the network performance by setting up a simple web server on my PC and doing a wget -O /dev/null http://<my PC-IP>/test.zip of 3Gb. The values were the same. Testing on another PC and Chrome, I got 40MB/s. So clearly my PC was fine but the Banana wasn't. Today I burned and installed 4 OS images and repeated the test above. I did it right after the initial boot ended without any further updates: - OpenMediaVault-Bananian 3.4.104: 36.6MB/s - Bananian 15.08: 36.7MB/s - Armbian legacy: 25.9MB/s - Armbian vanilla: 35MB/s Clearly there is something wrong with this image. However, I have no idea on what to do to find out how to fix it. Are there any configuration I can look up on the Bananian image and compare to yours? Thanks!
zador.blood.stained Posted November 14, 2015 Posted November 14, 2015 You can start by checking and comparing contents of /etc/sysctl.conf, and comparing outputs of "sysctl -a | grep ^net".
pspcoelho Posted November 15, 2015 Author Posted November 15, 2015 Ok. So, on Bananian 15.08, the difference on sysctl.conf is just vm.swapiness=1 (is 0 on Armbian), and adds vm.vfs_cache_pressure=50. I tried this on Armbian's conf file, but no difference. The sysctl output is the same, except for: - net.unix.max_dgram_qlen=10 (Bananian) vs 512 (Armbian), no difference in throughput. - a whole lot of extra settings on Armbian: net.ipv4.conf.all.forward_shared = 0 net.ipv4.conf.all.hidden = 0 net.ipv4.conf.all.loop = 0 net.ipv4.conf.all.rp_filter_mask = 0 net.ipv4.conf.bond0.accept_local = 0 net.ipv4.conf.bond0.accept_redirects = 1 net.ipv4.conf.bond0.accept_source_route = 1 net.ipv4.conf.bond0.arp_accept = 0 net.ipv4.conf.bond0.arp_announce = 0 net.ipv4.conf.bond0.arp_filter = 0 net.ipv4.conf.bond0.arp_ignore = 0 net.ipv4.conf.bond0.arp_notify = 0 net.ipv4.conf.bond0.bootp_relay = 0 net.ipv4.conf.bond0.disable_policy = 0 net.ipv4.conf.bond0.disable_xfrm = 0 net.ipv4.conf.bond0.force_igmp_version = 0 net.ipv4.conf.bond0.forward_shared = 0 net.ipv4.conf.bond0.forwarding = 0 net.ipv4.conf.bond0.hidden = 0 net.ipv4.conf.bond0.log_martians = 0 net.ipv4.conf.bond0.loop = 0 net.ipv4.conf.bond0.mc_forwarding = 0 net.ipv4.conf.bond0.medium_id = 0 net.ipv4.conf.bond0.promote_secondaries = 0 net.ipv4.conf.bond0.proxy_arp = 0 net.ipv4.conf.bond0.proxy_arp_pvlan = 0 net.ipv4.conf.bond0.rp_filter = 0 net.ipv4.conf.bond0.rp_filter_mask = 0 net.ipv4.conf.bond0.secure_redirects = 1 net.ipv4.conf.bond0.send_redirects = 1 net.ipv4.conf.bond0.shared_media = 1 net.ipv4.conf.bond0.src_valid_mark = 0 net.ipv4.conf.bond0.tag = 0 net.ipv4.conf.default.forward_shared = 0 net.ipv4.conf.default.hidden = 0 net.ipv4.conf.default.loop = 0 net.ipv4.conf.default.rp_filter_mask = 0 net.ipv4.conf.eth0.forward_shared = 0 net.ipv4.conf.eth0.hidden = 0 net.ipv4.conf.eth0.loop = 0 net.ipv4.conf.eth0.rp_filter_mask = 0 net.ipv4.conf.lo.forward_shared = 0 net.ipv4.conf.lo.hidden = 0 net.ipv4.conf.lo.loop = 0 net.ipv4.conf.lo.rp_filter_mask = 0 net.ipv4.conf.tunl0.forward_shared = 0 net.ipv4.conf.tunl0.hidden = 0 net.ipv4.conf.tunl0.loop = 0 net.ipv4.conf.tunl0.rp_filter_mask = 0 net.ipv4.neigh.bond0.anycast_delay = 100 net.ipv4.neigh.bond0.app_solicit = 0 net.ipv4.neigh.bond0.base_reachable_time_ms = 30000 net.ipv4.neigh.bond0.delay_first_probe_time = 5 net.ipv4.neigh.bond0.gc_stale_time = 60 net.ipv4.neigh.bond0.locktime = 100 net.ipv4.neigh.bond0.mcast_solicit = 3 net.ipv4.neigh.bond0.proxy_delay = 80 net.ipv4.neigh.bond0.proxy_qlen = 64 net.ipv4.neigh.bond0.retrans_time_ms = 1000 net.ipv4.neigh.bond0.ucast_solicit = 3 net.ipv4.neigh.bond0.unres_qlen = 35 net.ipv4.neigh.bond0.unres_qlen_bytes = 65536 I removed and didn't compare the ipv6 settings. What next?
zador.blood.stained Posted November 15, 2015 Posted November 15, 2015 Hmm. Maybe check "cpufreq-info" output for frequency range and governor. Also "cat /proc/interrupts" to check if eth0 interrupts are assigned to second core. By the way, this page is good for checking different aspects of configuration regarding network and storage performance: https://linux-sunxi.org/Sunxi_devices_as_NAS
pspcoelho Posted November 15, 2015 Author Posted November 15, 2015 After comparing both Bananian and Armbian, I noticed Bananian follows the rules defined on the site above (linux-sunxi.org), for the type of governor and some "ondemand" settings. This made the web download pratically the same as Bananian's, at 35.5MB/s. Still, Samba shares were the same :-( So, I tried to just copy the smb.conf file from Bananian to Armbian, maintaining my defined shares and finally things fell into place! :-) I didn't actually check what was the difference except there are no special "performance" or "tuning" settings there, like socket options, or aio read/write size, etc. I still think performance was better on my old, now lost, BanaNAS installation. But, it's acceptable. Thanks for your tips!
Igor Posted November 16, 2015 Posted November 16, 2015 This difference is probably due to U-boot fine tuning. The rest doesn't have that much impact. Except governor, everything is as stated in wiki but nevertheless kernel is different. I don't do detail testing for each build but I'll check within next build. There are also two different legacy kernels now: sun7i and sunxi ... they differ in GMAC driver.
Recommended Posts