X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=doc%2Fguides%2Ftools%2Fflow-perf.rst;h=017e20022249ca42a565f76d71ad2a8b55de6882;hb=6a2cf58a045f58c9744194f4d44394c7af1a0027;hp=28b5a5a0933c4d9169512b432a8fc8a179b117fe;hpb=bf3688f1e81632daa2a88dc7bd7120b46ed35d4e;p=dpdk.git diff --git a/doc/guides/tools/flow-perf.rst b/doc/guides/tools/flow-perf.rst index 28b5a5a093..017e200222 100644 --- a/doc/guides/tools/flow-perf.rst +++ b/doc/guides/tools/flow-perf.rst @@ -5,30 +5,32 @@ Flow Performance Tool ===================== Application for rte_flow performance testing. -The application provide the ability to test insertion rate of specific -rte_flow rule, by stressing it to the NIC, and calculate the insertion -rate. +The application provides the ability to test insertion rate of specific +rte_flow rule, by stressing it to the NIC, and calculates the insertion +and deletion rates. -The application offers some options in the command line, to configure -which rule to apply. +The application allows to configure which rule to apply through several +options of the command line. After that the application will start producing rules with same pattern but increasing the outer IP source address by 1 each time, thus it will give different flow each time, and all other items will have open masks. +To assess the rule insertion rate, the flow performance tool breaks +down the entire number of flow rule operations into windows of fixed size +(defaults to 100000 flow rule operations per window, but can be configured). +Then, the flow performance tool measures the total time per window and +computes an average time across all windows. -Known Limitations -================= +The application also provides the ability to measure rte flow deletion rate, +in addition to memory consumption before and after the flow rules' creation. -The current version has limitations which can be removed in future: - -* Support outer items up to tunnel layer only. -* Single core insertion only. -* Only one instance of same action can be added in one rule. +The app supports single and multiple core performance measurements, and +support multiple cores insertion/deletion as well. Compiling the Application -========================= +------------------------- The ``test-flow-perf`` application is compiled as part of the main compilation of the DPDK libraries and tools. @@ -37,10 +39,10 @@ Refer to the DPDK Getting Started Guides for details. Running the Application -======================= +----------------------- EAL Command-line Options ------------------------- +~~~~~~~~~~~~~~~~~~~~~~~~ Please refer to :doc:`EAL parameters (Linux) <../linux_gsg/linux_eal_parameters>` or :doc:`EAL parameters (FreeBSD) <../freebsd_gsg/freebsd_eal_parameters>` for @@ -48,7 +50,7 @@ a list of available EAL command-line options. Flow Performance Options ------------------------- +~~~~~~~~~~~~~~~~~~~~~~~~ The following are the command-line options for the flow performance application. They must be separated from the EAL options, shown in the previous section, @@ -56,22 +58,47 @@ with a ``--`` separator: .. code-block:: console - sudo ./dpdk-test-flow_perf -n 4 -w 08:00.0 -- --ingress --ether --ipv4 --queue --flows-count=1000000 + sudo ./dpdk-test-flow_perf -n 4 -a 08:00.0 -- --ingress --ether --ipv4 --queue --rules-count=1000000 The command line options are: * ``--help`` Display a help message and quit. -* ``--flows-count=N`` - Set the number of needed flows to insert, - where 1 <= N <= "number of flows". +* ``--rules-count=N`` + Set the total number of flow rules to insert, + where 1 <= N <= "number of flow rules". The default value is 4,000,000. +* ``--rules-batch=N`` + Set the number of flow rules to insert per iteration window, + where 1 <= N <= "number of flow rules per iteration window". + The default value is 100,000 flow rules per iteration window. + For a total of --rules-count=1000000 flow rules to be inserted + and an iteration window size of --rules-batch=100000 flow rules, + the application will measure the insertion rate 10 times + (i.e., once every 100000 flow rules) and then report an average + insertion rate across the 10 measurements. + * ``--dump-iterations`` - Print rates for each iteration of flows. - Default iteration is 1,00,000. + Print rates for each iteration window. + Default iteration window equals to the rules-batch size (i.e., 100,000). + +* ``--deletion-rate`` + Enable deletion rate calculations. + +* ``--dump-socket-mem`` + Dump the memory stats for each socket before the insertion and after. +* ``--enable-fwd`` + Enable packets forwarding after insertion/deletion operations. + +* ``--portmask=N`` + hexadecimal bitmask of ports to be used. + +* ``--cores=N`` + Set the number of needed cores to insert/delete rte_flow rules. + Default cores count is 1. Attributes: @@ -160,6 +187,12 @@ Items: under ``TAG_INDEX`` with full mask, default value = 0. Other fields are open mask. +* ``--icmpv4`` + Add icmpv4 item to all flows items, This item have open mask. + +* ``--icmpv6`` + Add icmpv6 item to all flows items, This item have open mask. + Actions: @@ -232,3 +265,87 @@ Actions: Add hairpin RSS action to all flows actions. The queues in RSS action will be all hairpin queues configured in the app. + +* ``--set-src-mac`` + Add set source mac action to all flows actions. + The mac to be set is random each flow. + +* ``--set-dst-mac`` + Add set destination mac action to all flows actions. + The mac to be set is random each flow. + +* ``-set-src-ipv4`` + Add set source ipv4 action to all flows actions. + The ipv4 header to be set is random each flow. + +* ``--set-dst-ipv4`` + Add set destination ipv4 action to all flows actions. + The ipv4 header to be set is random each flow. + +* ``--set-src-ipv6`` + Add set source ipv6 action to all flows actions. + The ipv6 header to be set is random each flow. + +* ``--set-dst-ipv6`` + Add set destination ipv6 action to all flows actions. + The ipv6 header to be set is random each flow. + +* ``--set-src-tp`` + Add set source tp action to all flows actions. + The tp sport header to be set is random each flow. + +* ``--set-dst-tp`` + Add set destination tp action to all flows actions. + The tp dport header to be set is random each flow. + +* ``--inc-tcp-ack`` + Add increment TCP acknowledgment by one to all flows actions. + +* ``--dec-tcp-ack`` + Add decrement TCP acknowledgment by one to all flows actions. + +* ``--inc-tcp-seq`` + Add increment TCP sequence by one to all flows actions. + +* ``--dec-tcp-seq`` + Add decrement TCP sequence by one to all flows actions. + +* ``--set-ttl`` + Add set IP ttl action to all flows actions. + The ttl value to be set is random each flow. + +* ``--dec-ttl`` + Add decrement IP ttl by one to all flows actions. + +* ``--set-ipv4-dscp`` + Add set IPv4 dscp action to all flows actions. + The dscp value to be is random each flow. + +* ``--set-ipv6-dscp`` + Add set IPv6 dscp action to all flows actions. + The dscp value to be is random each flow. + +* ``--flag`` + Add flag action to all flows actions. + +* ``--raw-encap=`` + Add raw encap action to all flows actions. + Data is the data needed to be encaped, with fixed values. + Example: raw-encap=ether,ipv4,udp,vxlan + +* ``--raw-decap=`` + Add raw decap action to all flows actions. + Data is the data needed to be decaped, with fixed values. + Example: raw-decap=ether,ipv4,gre + +* ``--vxlan-encap`` + Add vxlan encap action to all flows actions. + Data to encap is fixed with pattern: ether,ipv4,udp,vxlan, + all encapped items have fixed values. + +* ``--vxlan-decap`` + Add vxlan decap action to all flows actions. + +* ``--meter`` + Add meter action to all flows actions. + Currently, 1 meter profile -> N meter rules -> N rte flows.