【发布时间】:2022-09-19 23:00:12
【问题描述】:
在接收端,我们有机会选择将处理接收队列 (RPS) 的 CPU。在发送方,XPS 为给定 CPU 选择发送队列,但无法选择将在其上启动 ndo_start_xmit() 的 CPU。 Taskset 可以绑定用户任务,但ndo_start_xmit() 绑定不同。
在我的情况下 CPU0 保留用于轮询 kthread,因为我们的 NIC 没有中断,因此是必要的。我不想在这个 CPU 上运行其他任何东西。
在两个节点上为 RPS 设置 CPU1:
echo 0x2 > /sys/class/net/<dev>/queues/rx-0/rps_cpus
然后在两个节点上运行 iperf:
host1: taskset -c 1 iperf -s
host2: taskset -c 1 iperf -c host1
在我的 ndo_start_xmit() 方法中添加 pr_info("cpu%d\n", smp_processor_id()); 后,请参见 dmesg:
host1: dmesg | grep cpu0 | wc -l
0
host2: dmesg | grep cpu0 | wc -l
6512
是否可以选择发送方将在其上启动ndo_start_xmit() 的 CPU?
【问题讨论】: