Commit 2a1ddf27 authored by Jesper Dangaard Brouer's avatar Jesper Dangaard Brouer Committed by David S. Miller

pktgen: document ability to add same device to several threads

The pktgen.txt documentation still claimed that adding same device to
multiple threads were not supported, but it have been since 2008 via
commit e6fce5b9 ("pktgen: multiqueue etc.").

Document this and describe the naming scheme dev@X, as the procfile name
still need to be unique.

Fixes: e6fce5b9 ("pktgen: multiqueue etc.")
Signed-off-by: default avatarJesper Dangaard Brouer <brouer@redhat.com>
Acked-by: default avatarAlexei Starovoitov <ast@plumgrid.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 91db4b3c
...@@ -50,16 +50,33 @@ For ixgbe use e.g. "30" resulting in approx 33K interrupts/sec (1/30*10^6): ...@@ -50,16 +50,33 @@ For ixgbe use e.g. "30" resulting in approx 33K interrupts/sec (1/30*10^6):
# ethtool -C ethX rx-usecs 30 # ethtool -C ethX rx-usecs 30
Viewing threads Kernel threads
=============== ==============
/proc/net/pktgen/kpktgend_0 Pktgen creates a thread for each CPU with affinity to that CPU.
Running: Which is controlled through procfile /proc/net/pktgen/kpktgend_X.
Stopped: eth1
Result: OK: add_device=eth1 Example: /proc/net/pktgen/kpktgend_0
Running:
Stopped: eth4@0
Result: OK: add_device=eth4@0
Most important are the devices assigned to the thread.
Most important are the devices assigned to the thread. Note that a The two basic thread commands are:
device can only belong to one thread. * add_device DEVICE@NAME -- adds a single device
* rem_device_all -- remove all associated devices
When adding a device to a thread, a corrosponding procfile is created
which is used for configuring this device. Thus, device names need to
be unique.
To support adding the same device to multiple threads, which is useful
with multi queue NICs, a the device naming scheme is extended with "@":
device@something
The part after "@" can be anything, but it is custom to use the thread
number.
Viewing devices Viewing devices
=============== ===============
...@@ -68,29 +85,32 @@ The Params section holds configured information. The Current section ...@@ -68,29 +85,32 @@ The Params section holds configured information. The Current section
holds running statistics. The Result is printed after a run or after holds running statistics. The Result is printed after a run or after
interruption. Example: interruption. Example:
/proc/net/pktgen/eth1 /proc/net/pktgen/eth4@0
Params: count 10000000 min_pkt_size: 60 max_pkt_size: 60 Params: count 100000 min_pkt_size: 60 max_pkt_size: 60
frags: 0 delay: 0 clone_skb: 1000000 ifname: eth1 frags: 0 delay: 0 clone_skb: 64 ifname: eth4@0
flows: 0 flowlen: 0 flows: 0 flowlen: 0
dst_min: 10.10.11.2 dst_max: queue_map_min: 0 queue_map_max: 0
src_min: src_max: dst_min: 192.168.81.2 dst_max:
src_mac: 00:00:00:00:00:00 dst_mac: 00:04:23:AC:FD:82 src_min: src_max:
udp_src_min: 9 udp_src_max: 9 udp_dst_min: 9 udp_dst_max: 9 src_mac: 90:e2:ba:0a:56:b4 dst_mac: 00:1b:21:3c:9d:f8
src_mac_count: 0 dst_mac_count: 0 udp_src_min: 9 udp_src_max: 109 udp_dst_min: 9 udp_dst_max: 9
Flags: src_mac_count: 0 dst_mac_count: 0
Current: Flags: UDPSRC_RND NO_TIMESTAMP QUEUE_MAP_CPU
pkts-sofar: 10000000 errors: 39664 Current:
started: 1103053986245187us stopped: 1103053999346329us idle: 880401us pkts-sofar: 100000 errors: 0
seq_num: 10000011 cur_dst_mac_offset: 0 cur_src_mac_offset: 0 started: 623913381008us stopped: 623913396439us idle: 25us
cur_saddr: 0x10a0a0a cur_daddr: 0x20b0a0a seq_num: 100001 cur_dst_mac_offset: 0 cur_src_mac_offset: 0
cur_udp_dst: 9 cur_udp_src: 9 cur_saddr: 192.168.8.3 cur_daddr: 192.168.81.2
cur_udp_dst: 9 cur_udp_src: 42
cur_queue_map: 0
flows: 0 flows: 0
Result: OK: 13101142(c12220741+d880401) usec, 10000000 (60byte,0frags) Result: OK: 15430(c15405+d25) usec, 100000 (60byte,0frags)
763292pps 390Mb/sec (390805504bps) errors: 39664 6480562pps 3110Mb/sec (3110669760bps) errors: 0
Configuring threads and devices Configuring devices
================================ ===================
This is done via the /proc interface, and most easily done via pgset This is done via the /proc interface, and most easily done via pgset
as defined in the sample scripts. as defined in the sample scripts.
...@@ -221,6 +241,9 @@ Note that when adding devices to a specific CPU it is a good idea to ...@@ -221,6 +241,9 @@ Note that when adding devices to a specific CPU it is a good idea to
also assign /proc/irq/XX/smp_affinity so that the TX interrupts are bound also assign /proc/irq/XX/smp_affinity so that the TX interrupts are bound
to the same CPU. This reduces cache bouncing when freeing skbs. to the same CPU. This reduces cache bouncing when freeing skbs.
Plus using the device flag QUEUE_MAP_CPU, which maps the SKBs TX queue
to the running threads CPU (directly from smp_processor_id()).
Enable IPsec Enable IPsec
============ ============
Default IPsec transformation with ESP encapsulation plus transport mode Default IPsec transformation with ESP encapsulation plus transport mode
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment