UPGRADE YOUR BROWSER

We have detected your current browser version is not the latest one. Xilinx.com uses the latest web technologies to bring you the best online experience possible. Please upgrade to a Xilinx.com supported browser:Chrome, Firefox, Internet Explorer 11, Safari. Thank you!

AR# 31785

10.1 EDK - Why is lwip_v3_00_a socket mode so slow?

Description

When investigating the low performance of lwIP that Xilinx ships, I found a spin loop in the Xilinx Ethernet adapter for lwip_3_00_a.

Why is there a spin loop in the code?

Solution

The function xemacif_input_thread in file $XILINX_EDK\sw\ThirdParty\sw_services\lwip_v3_00_a\src\contrib/ports\xilinx\netif\xadapter.c contains a spinloop.

This reduces the performance of lwIP in socket mode drastically, and is the reason why socket mode performance is limited to 1 Mbps.

The correct implementation should use a counting semaphore to awaken this thread only when there are packets to process.

However, the counting semaphore mechanism has not been implemented in lwip_v3_00_a since this resulted in an unstable stack. We attribute this to issues in lwIP 1.2.0's socket API. This layer has been significantly improved in lwIP 1.3.0; as a result, this spinlock is no longer necessary in lwIP 1.3.0.

The Xilinx lwIP 1.3.0 adapter will be fixed to use a counting semaphore in EDK 11.1

AR# 31785
Date Created 10/10/2008
Last Updated 12/15/2012
Status Active
Type General Article