On Thu, May 21, 2015 at 05:51:34PM +0000, Shyam Sundar Govindaraj wrote: > Hi > > I am interested in DPDK LPM implementation. I understand the high > performance of this LPM table but, when it comes to multithreaded > application, I read the following safety issue in DPDK documentation. I > understand that multithread read and multithread write are not possible > without locking table. But I want to know if single thread write and > multithread read are possible with your implementation without any locking > mechanism.
For the LPM library, I don't believe any such guarantees are made about that case. However, assuming LPM for IPv4 here, the individual LPM entries are only 16-bits in size, and, from what I see in the code, are always being assigned as a single entry, so the code may indeed by multi-reader, single-writer safe. Unfortunately, it would need a proper examination of the code to fully verify this - my quick re-reading of the code is not enough :-), and it may also depend, to some extent on the compiler used, whether the compiler converts the assignment of one 16-bit structure to another 16-bit structure as a field-by-field copy, or as a single copy of a uint16_t type. Not a very satisfactory answer, I'm afraid, but if you do look at this further, please let us know the result of your investigation. It would be good to get the rte_lpm library made/confirmed thread-safe. Regards, /Bruce > > 20. Thread Safety of DPDK Functions > "The hash and LPM libraries are, by design, thread unsafe in order to > maintain performance. However, if required the developer can add layers on > top of these libraries to provide thread safety. Locking is not needed in all > situations, and in both the hash and LPM libraries, lookups of values can be > performed in parallel in multiple threads. Adding, removing or modifying > values, however, cannot be done in multiple threads without using locking > when a single hash or LPM table is accessed. Another alternative to locking > would be to create multiple instances of these tables allowing each thread > its own copy". > http://dpdk.org/doc/guides/prog_guide/thread_safety_intel_dpdk_functions.html > > Thanks > Shyam