I am trying to properly setup/understand RSS and smp_affinity using the scripts
(load_driver and set_irq_affinity) provided with the PF_RING tarball without
CPU binding. I will put the questions upfront and the details will follow. I
would appreciate any help, though the questions may not be PF_RING tightly
related. Other seupt/configurations are already done and are working as
expected.
1. How do the values assigned to RSS when insmod(ing) the driver actually map
to the queues? Such as RSS=0,0 or RS=1,1,1,1 or RSS=4,4.2. The application at
the other end that is consuming the traffic has 4 processes running. Does this
mean that only 4 queues/4 CPUs should be mapped, or I can have the max. number
of queues irq(ed) - in this case 8 - to the 6 cores and let the scheduler
handle the reset?3. What is the easiest way for backing-out if things do not go
well; would rmmod(ing) and reloading the driver suffice? This is because I am
dealing with a production system already and don't have the space to test.
Loading igb and pf_ring:
insmod ./pf_ring.ko transparent_mode=2 min_num_slots=65536
enable_tx_capture=0insmod ./igb.ko
Server info:
# cat /proc/cpuinfo | grep "model name\|cpu cores" | head -2model name :
Intel(R) Xeon(R) CPU E5-2420 v2 @ 2.20GHzcpu cores : 6
# uname -r3.2.0-67-generic
PF_RING info:
# cat /proc/net/pf_ring/infoPF_RING Version : 6.0.2 ($Revision:
8089$)Total rings : 4
Standard (non DNA) OptionsRing slots : 65536Slot version
: 16Capture TX : No [RX only]IP Defragment
: NoSocket Mode : StandardTransparent mode
: No [mode 2]Total plugins : 0Cluster Fragment Queue :
0Cluster Fragment Discard : 0
Driver info:
# ethtool -i eth2driver: igbversion: 5.2.5firmware-version: 1.67, 0x80000ba6,
15.0.28bus-info: 0000:08:00.0supports-statistics: yessupports-test:
yessupports-eeprom-access: yessupports-register-dump: yes
Looking at dmesg for the driver suggest that there are 8 RX queues and 8 TX
queues:
# grep "igb" /var/log/dmesg[ 3.167209] igb 0000:08:00.0: Intel(R) Gigabit
Ethernet Network Connection[ 3.167214] igb 0000:08:00.0: eth2:
(PCIe:5.0Gb/s:Width x4) <MAC-ADDRESS>[ 3.167511] igb 0000:08:00.0: eth2: PBA
No: G13158-000[ 3.167513] igb 0000:08:00.0: Using MSI-X interrupts. 8 rx
queue(s), 8 tx queue(s)
However, listing the queues associated, does not show that are actually being
assigned/used;
# ls -l /sys/class/net/eth2/queues/total 0drwxr-xr-x 2 root root 0 Aug 28 08:56
rx-0drwxr-xr-x 2 root root 0 Aug 28 08:56 tx-0
And:
# cat /proc/interrupts | grep "eth2" CPU0 CPU1
CPU2 CPU3 CPU4 CPU5 CPU6 CPU7 CPU8
CPU9 CPU10 CPU11 81: 1 0
0 0 0 0 0 0
0 0 0 0 IR-PCI-MSI-edge eth2
82: 1857321564 0 0 0 0
0 0 0 0 0 0
0 IR-PCI-MSI-edge eth2-TxRx-0
If I am reading this correctly, then there is only one queue and it is being
handled by CPU0 only and the other cores are just dormant. What is also
confusing me is:
# cat /proc/irq/82/smp_affinity0000,00000fff
Again, if I am reading this correctly, then this means that IRQ 82 is (should
be) handled by CPU0...CPU11, however, this is not evident in the interrupt
table above. Looking at the indirection table also gives nothing:
# ethtool -x eth2RX flow hash indirection table for eth2 with 1 RX ring(s):
0: 0 0 0 0 0 0 0 0 8: 0 0 0
0 0 0 0 0 16: 0 0 0 0 0 0 0
0 24: 0 0 0 0 0 0 0 0 32: 0 0
0 0 0 0 0 0 40: 0 0 0 0 0 0
0 0 48: 0 0 0 0 0 0 0 0 56: 0
0 0 0 0 0 0 0 64: 0 0 0 0 0
0 0 0 72: 0 0 0 0 0 0 0 0 80:
0 0 0 0 0 0 0 0 88: 0 0 0 0
0 0 0 0 96: 0 0 0 0 0 0 0 0
104: 0 0 0 0 0 0 0 0 112: 0 0 0
0 0 0 0 0 120: 0 0 0 0 0 0 0
0
And finally:
# ethtool -S eth2NIC statistics: rx_packets: 2984011999 tx_packets: 3
rx_bytes: 2465341976853 tx_bytes: 222 rx_broadcast: 0
tx_broadcast: 0 rx_multicast: 0 tx_multicast: 3 multicast: 0
collisions: 0 rx_crc_errors: 0 rx_no_buffer_count: 0
rx_missed_errors: 0 tx_aborted_errors: 0 tx_carrier_errors: 0
tx_window_errors: 0 tx_abort_late_coll: 0 tx_deferred_ok: 0
tx_single_coll_ok: 0 tx_multi_coll_ok: 0 tx_timeout_count: 0
rx_long_length_errors: 0 rx_short_length_errors: 0 rx_align_errors: 0
tx_tcp_seg_good: 0 tx_tcp_seg_failed: 0 rx_flow_control_xon: 0
rx_flow_control_xoff: 0 tx_flow_control_xon: 0 tx_flow_control_xoff: 0
rx_long_byte_count: 2465341976853 tx_dma_out_of_sync: 0
lro_aggregated: 0 lro_flushed: 0 tx_smbus: 0 rx_smbus: 0
dropped_smbus: 0 os2bmc_rx_by_bmc: 0 os2bmc_tx_by_bmc: 0
os2bmc_tx_by_host: 0 os2bmc_rx_by_host: 0 rx_errors: 0 tx_errors: 0
tx_dropped: 0 rx_length_errors: 0 rx_over_errors: 0
rx_frame_errors: 0 rx_fifo_errors: 0 tx_fifo_errors: 0
tx_heartbeat_errors: 0 tx_queue_0_packets: 3 tx_queue_0_bytes: 210
tx_queue_0_restart: 0 rx_queue_0_packets: 2984012000 rx_queue_0_bytes:
2453405930211 rx_queue_0_drops: 0 rx_queue_0_csum_err: 0
rx_queue_0_alloc_failed: 0
Again, I appreciate any help. Thanks. (Sorry if this is a duplicate).YM
_______________________________________________
Ntop-misc mailing list
[email protected]
http://listgateway.unipi.it/mailman/listinfo/ntop-misc