Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
dpif: Allow adding ukeys for same flow by different pmds.
In multiqueue mode several pmd threads may process one port, but different queues. Flow may not depend on queue. It's true at least for vhost-user ports. When multiple pmd threads attempt to process upcalls for a particular flow key, only the first will succeed. Any subsequent threads will receive error = ENOSPC when attempting to insert a new udpif_key into the umaps. This causes the latter threads to never insert a flow into the datapath to handle the traffic, and as a result they will consistently execute those flows through the slow path. Fix that by mixing pmd_id with the bits from the ufid for ukey->hash calculation. So, for a given flow key/UFID, each pmd thread will create an independent udpif_key. This also opens the possibility to reassign queues among pmd threads without restarting them and deleting the megaflow cache. Signed-off-by: Ilya Maximets <[email protected]> Signed-off-by: Joe Stringer <[email protected]>
- Loading branch information