sdnfv / openNetVM

A high performance container-based NFV platform from GW and UCR.
http://sdnfv.github.io/onvm/
Other
263 stars 135 forks source link

Fair Queue NF #234

Closed Shashwatha-Mitra closed 4 years ago

Shashwatha-Mitra commented 4 years ago

This PR adds a new example - Fair Queue with Round Robin Scheduler

The NF uses the advanced rings mode, classifies IPv4 packets based on the header information, and simulates a round-robin dequeue.

The CRC32 hash from the DPDK library has been used to classify the packets.

The NF uses a custom implementation of the standard FIFO queuing system. An implementation using the rte_ring structure from the DPDK library failed to scale for large number of queues.

Summary:

Usage:

This PR includes
Resolves issues
Breaking API changes
Internal API changes
Usability improvements
Bug fixes
New functionality
New NF/onvm_mgr args x
Changes to starting NFs
Dependency updates
Web stats updates

Merging notes:

TODO before merging :

Test Plan:

An equal number of flows and queues are created to test the NF. The packets are generated by Pktgen and have same headers values except destination port with a 1000B packet size. An example:

fq_test_case resized

A 1G NIC was used to send the packets to the NF. As can be seen from the image, each queue gets approximately 15MBps throughput which is 1/8th of the total link speed. A maximum of 35% hash collision probability is observed when the NF is tested with a large number of flows and queues (up to 1024).

NF Checklist:

Review:

(optional) << @-mention people who should review these changes >>

(optional) Subscribers: @rohit-mp, @NishanthSubramanian, @archit-p, @mohittahiliani

onvm commented 4 years ago

In response to PR creation

CI Message

Aborting, need an authorized user to run CI

EthanBaron14 commented 4 years ago

@onvm test

onvm commented 4 years ago

@onvm test

CI Message

Your results will arrive shortly

bdevierno1 commented 4 years ago

The python lint is a result of the recent merge to develop that has yet been merged into this PR. @kevindweb I'll take a look again sometime soon at how we are using git diff.

EthanBaron14 commented 4 years ago

Hey, @Shashwatha-Mitra, thanks for working on this! Looks like you found it, but we normally request our PR's onto develop before merging them to master in major releases. This looks pretty good, though! Thanks for contributing!

twood02 commented 4 years ago

@Shashwatha-Mitra - I have added a checklist to the bottom of your PR message. Can you verify that you follow all of these and mark them off / fix them as needed?

rohit-mp commented 4 years ago

Please correct me if I'm wrong, but I don't think advanced rings mode uses function_table as mentioned here. Is it still possible to use function_table along with advanced rings mode?

twood02 commented 4 years ago

@rohit-mp yes, I think you are correct (this is a general set of questions we will be using for all NFs, so they may not apply in some cases)

EthanBaron14 commented 4 years ago

@Shashwatha-Mitra one more thing... it looks like you're seeing some errors with the Python linter. After investigating this, it seems that the errors that you're seeing are not present on either the master or develop branches. This leads me to believe you might have an old fork that doesn't have the most recent ONVM release. Please make sure you pull the master branch from the main repo onto your branch. Once you make a commit after that, you should be fine.