This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

wl12xx slower than wilink driver?

Other Parts Discussed in Thread: AM1808, WL1271

Hello,

I have updated the Linux SDK of my AM1808 EvalBoard to SDK 5.02. This SDK comes with a 2.6.37 kernel and OpenSource wl12xx (OpenLink) drivers instead of the WiLink drivers.

Unfortunately the data-rate with a TCP iperf test now is only half of that achieved with the old SDK (using the WiLink drivers). Instead of 14 MBit/s with TCP it is only 7 MBit/s now. Running the top-command shows a CPU usage of 99% in system space while iperf is running. After iperf finishes the CPU usage drops to nearly 0%.

I already performed a calibration of the WLAN module with no benefit.

The rates have been measured with the prebuilt kernel image and filesystem delivered with the SDK. Is this a general issue with this driver (maybe mac80211 needs more CPU power) or am I doing something wrong? Building the kernel (and wireless compat) myself I got the same results.

 

Thanks in advance

Tobias

  • OK, now I get 10 MBit/s (TCP) with the OpenLink drivers. In the old SDK with the 2.6.33 kernel netfilter was disabled and in the new 2.6.37 it was enabled. I disabled the netfilter stuff in 2.6.33 and the throughput increased from 6.5 to 10 MBit/s. Seems as if netfilter needs a lot of CPU power.

    I guess the remaining difference of 4 MBit/s is due to mac80211 but I would be thankful for hints on tweaking the kernel/driver/... for better performance.

  • Tobias,

    Indeed, the WiFi in SDK5.02 enables the netfilter option that consume CPU power and reduces the overall throughput . Enabling the netfilter option is done in order to add support for Soft Access Point mode as part of the SDK, while the old driver supported only Station mode.

    If you use the WiFi as station only then disabling the netfilter is ok and will increase the throughput.

    Did you configure the CPU clock for 456MHz? Using 300MHz CPU clock reduces the throughput.

    Regards,

    Alon

     

  • Hello Alon,

    thanks for the answer.

    No, the clock is on the default setting of 300 MHz. I haven't tested it so far with 456 MHz as I did not know if the CPU on the board was capable to work with 456 MHz.

    At least the two measurements without netfilter (2.6.33 vs. 2.6.37) were performed with a fixed 300 MHz clock and the results still differed by 4 MBit/s.
    Is this the expected result due to the usage of mac80211 in 2.6.37 or are there other changes that might reduce the datarate?

    Regards,

    Tobias

  • Hi Tobias,

    basically the SW architecture of Legacy driver (2.6.33) and the mac80211 are very different so maybe there are some difference in performance, i will be able to verify that next week when i will be back in the office.

    any way please find some useful links from our wiki page regarding performance:

    Performance measurement: http://processors.wiki.ti.com/index.php/OMAP_Wireless_Connectivity_WLAN_Throughput_Measurement

    CPU utilization measurement using top command: http://processors.wiki.ti.com/index.php/OMAP_Wireless_Connectivity_CPU_Utilization

    How to set CPU clock frequency http://processors.wiki.ti.com/index.php/OMAP_Wireless_Connectivity_CPU_Clock_Setup

    Regards,

    Eyal

  • Hi Eyal,

    were you able to check the WL1271 datarates with the openlink driver? Is there something in the 2.6.37 network stack that causes the lower datarate?

    On the performance measurement wiki page (http://processors.wiki.ti.com/index.php/OMAP_Wireless_Connectivity_Station_Performance_measurement_setup) there are some iperf results of an AM1808 board (root@am180x-evm), are these performed with a WL1271 and the 2.6.37 kernel?
    At least the iperf TCP results with 7.5 - 8.5 MBit/s resemble my results.

    When looking into the CPU utilization calculation on your wiki page I see that you calculate the driver CPU usage without the iperf CPU usage. With the 2.6.33 kernel, iperf consumes 10% CPU for 13.2 MBit/s TCP and with 2.6.37 27% for 9.61 MBit/s.

    Most of the iperf CPU usage is in system space so maybe iperf cannot be removed entirely from the CPU usage calculation. The iperf versions for the kernels are both 2.0.4 so I do not think that iperf itself causes the higher CPU usage. The CPU usage of iperf caused in system space with the 2.6.37 kernel is twice as high as with 2.6.33 although the data rate is lower.

     

    AM1808, 2.6.37, openlink, iperf 2.0.4:
        CPU:   0% usr  98% sys   0% nic   1% idle   0% io   0% irq   0% sirq
          PID  PPID USER     STAT   VSZ %MEM %CPU COMMAND
          873     2 root     DW       0   0%  29% [irq/207-wl1271]
         1180  1095 root     S    19800  33%  27% iperf -c 192.168.178.24 -t30
          443     2 root     SW       0   0%  13% [kworker/u:2]
          561     2 root     SW       0   0%  12% [kworker/0:2]
            5     2 root     RW       0   0%   9% [kworker/u:0]
            7     2 root     SW       0   0%   7% [kworker/u:1]
    -> 9.72 MBit/s

    time iperf ...:
        real    0m 30.11s
        user    0m 0.20s
        sys     0m 8.01s
     
    AM1808, 2.6.33, wilink, iperf 2.0.4:
        CPU:   1% usr  66% sys   0% nic  13% idle   0% io   9% irq   9% sirq
          PID  PPID USER     STAT   VSZ %MEM %CPU COMMAND
          983     2 root     RW       0   0%  44% [tiwlan]
            4     2 root     SW       0   0%  23% [events/0]
         1085   885 root     S    19912  33%  10% iperf -c 192.168.178.24 -t30
    -> 13.2 MBit/s

    time iperf ...:
        real    0m 30.17s
        user    0m 0.21s
        sys     0m 3.58s