Performance - leitec/openwrt-leitec GitHub Wiki

One important difference between OpenWrt and the factory firmware is that OpenWrt does not use hardware drivers provided by Ralink. This is partly because Ralink's own code for these models (i.e. old models) would never meet the Linux kernel's quality standards and are written for old kernel versions. There's also the fact that it is either murkily "GPL" (i.e. found in a "GPL" tarball, but with no or conflicting licenses in the source files) or not at all (binaries), which means it can't legally be used in a third-party product like OpenWrt.

OpenWrt long ago moved away from using factory drivers to using in-tree Linux implementations and/or in-house drivers. The latter are often merged into the Linux kernel, a testament to the quality of the work. Having these open drivers is very important to development and allows unencumbered firmware distribution.

There is a very important caveat from the user's perspective, though. Router chipset manufacturers build in special accelerators into their chips and drivers. These are almost always proprietary and not documented, and so OpenWrt's drivers can't take advantage of them. So, while the factory firmware may use hardware NAT or some sort of accelerated software NAT, OpenWrt is using the Linux kernel's NAT implementation directly. This translates to slower peak routing performance.

This will only affect users whose Internet connections are fairly fast relative to the 100Mbit Ethernet found in these models. If your connection speed is below the benchmark numbers here you will have no slowdown switching to OpenWrt-leitec or mainline OpenWrt.

An iperf/jperf benchmark (see the OpenWrt wiki) through an AR725W revealed some fairly large differences:

Factory firmware OpenWrt-leitec AA r42647 OpenWrt BB r42625 CC r43586 CC r43591
90Mbit/sec 64Mbit/sec 45Mbit/sec 40Mbit/sec 46Mbit/sec

Much to my surprise, the older code in Attitude Adjustment is actually faster. This is despite the many improvements in OpenWrt since AA. Still, this is 26Mbit/sec slower than the factory FW, which is remarkably close to wire speed. For comparison, DD-WRT r15693 on the AR670W (very similar to the AR725W) handled about 50Mbit/sec. They are apparently not using Ralink's enhanced NAT, either -- at least not on that (admittedly old) build. Modern builds appear to be totally broken on that model.

The addition of nf_conntrack_rtcache in Chaos Calmer r43587 (kernel 3.14) provided a 6MBit/sec boost, but it isn't enough to counteract the general slowdown since both Attitude Adjustment (kernel 3.3) and Barrier Breaker (kernel 3.10).

The test setup consisted of my desktop, an older AMD Opteron X2 Linux machine, and my laptop, a 2007 MacBook Pro (I'm a bit behind the times). The laptop's Gigabit Ethernet port went to one of the LAN ports on the router, and the WAN port went to a Gigabit NIC on the Linux machine. The Mac was the iperf client, and the Linux machine the server.