我正在使用testpmd(DPDK 17.11.1)。我创建了两个端口P0和P1,我将流量从P0发送到P1。我发现它只使用了两个内存通道。以下是启动testpmd的命令:
./testpmd -n4 -l2,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33 -- --rxd=4096 --txd=4096 --numa --rxq=8 --txq=8 --nb-cores=16 --numa --forward-mode=mac -i
这是pcm工具的结果,它表示正在使用4个内存通道中的2个:
|---------------------------------------||---------------------------------------|
|---------------------------------------||---------------------------------------|
|-- Socket 0 --||-- Socket 1 --|
|---------------------------------------||---------------------------------------|
|-- Memory Channel Monitoring --||-- Memory Channel Monitoring --|
|---------------------------------------||---------------------------------------|
|-- Mem Ch 0: Reads (MB/s): 0.06 --||-- Mem Ch 0: Reads (MB/s): 0.01 --|
|-- Writes(MB/s): 0.13 --||-- Writes(MB/s): 0.01 --|
|-- Mem Ch 1: Reads (MB/s): 141.17 --||-- Mem Ch 1: Reads (MB/s): 1642.35 --|
|-- Writes(MB/s): 262.84 --||-- Writes(MB/s): 11842.28 --|
|-- Mem Ch 2: Reads (MB/s): 140.44 --||-- Mem Ch 2: Reads (MB/s): 1639.97 --|
|-- Writes(MB/s): 261.67 --||-- Writes(MB/s): 11850.11 --|
|-- Mem Ch 3: Reads (MB/s): 0.46 --||-- Mem Ch 3: Reads (MB/s): 0.40 --|
|-- Writes(MB/s): 0.55 --||-- Writes(MB/s): 0.40 --|
|-- NODE 0 Mem Read (MB/s) : 282.13 --||-- NODE 1 Mem Read (MB/s) : 3282.72 --|
|-- NODE 0 Mem Write(MB/s) : 525.19 --||-- NODE 1 Mem Write(MB/s) : 23692.79 --|
|-- NODE 0 P. Write (T/s): 15496 --||-- NODE 1 P. Write (T/s): 15947 --|
|-- NODE 0 Memory (MB/s): 807.33 --||-- NODE 1 Memory (MB/s): 26975.52 --|
|---------------------------------------||---------------------------------------|
|---------------------------------------||---------------------------------------|
|-- System Read Throughput(MB/s): 3564.86 --|
|-- System Write Throughput(MB/s): 24217.99 --|
|-- System Memory Throughput(MB/s): 27782.84 --|
|---------------------------------------||---------------------------------------|
如何使用所有四个内存通道?
答案 0 :(得分:0)
我们使用-n
指定的内存通道数量并不多:它只是将每个内存池元素与不同的内存通道对齐,如DPDK Programmer's Guide
即使我们在那里放了一个无效的数字,我们仍然应该能够使用所有的频道,也许不是那么理想。可能存在一些极端情况,但这些很少见,并且不仅可以使用-n
选项轻松“修复”,还可以使用--mbuf-size=N
选项调整testpmd mbuf大小(即内存池元素),如上所述在Testpmd User Guide
所以,我的猜测是命令行选项并不重要,真正的问题是你使用的系统每个NUMA节点没有四个DIMM,即没有8个独立的DIMM。您可以尝试使用sudo dmidecode | grep DIMM
或仅使用物理检查。