【问题标题】:How to set ndo_start_xmit cpu affinity in ethernet driver?如何在以太网驱动程序中设置 ndo_start_xmit cpu 亲和性?
【发布时间】: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?

【问题讨论】:

    标签: linux linux-device-driver


    【解决方案1】:

    找到了我的问题的答案。怀疑有人会需要它,但无论如何。内核网络堆栈在调用 dev_kfree_skb() 函数的 cpu 上初始化下一个 ndo_start_xmit()。就我而言,我将 dev_kfree_skb() 从轮询 kthread 移出到一个进行排队的函数。

    【讨论】:

      猜你喜欢
      • 2021-06-20
      • 1970-01-01
      • 2018-05-19
      • 2014-08-30
      • 2010-11-27
      • 2022-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多