Details
-
Bug
-
Status: Resolved
-
Resolution: Done
-
None
-
None
-
None
-
Operating System: Linux
Platform: PC
-
4335
Description
Here I have encountered a problem when testing the ODL performance. The following is the way how i did. I wrote a test program sending arp packets to ODL at some rate. when the rate reaches a relative high level, ODL stops replying arp packet, and it seems to be deadlocked. I followed ODL and figure the reason out. Firstly, the QueueHarvester find out that the packets from switch belong to packet-in and forward them to MD-SAL. And then MD-SAL uses distruptor to push notification. Finally packet handler in L2switch decode the packet from MD-SAL and publich the packet to MD-SAL again. Here is the key section. Disruptor uses ring buffer to store packets. If the buffer is full, provider has to wait consumer to pick packet out. When the packets flood, packet handler cannot process in time, so ring buffer in distruptor has no space some time later. After this time QueueHarvester drops all packet because ring buffer is full, while packet handler is also waiting to publich decoded packet, they are deadlocked.