Taskset和cpuset之间的区别


8

我正在尝试减少linux网络应用程序的延迟。我了解到,有两种工具可将程序“绑定”到特定的CPU内核:taskset和cpuset。

  1. 我应该选哪一个?它们在较低的水平上等效吗?
  2. (配置)我的应用程序具有单线程,并且应该以尽可能少的延迟通过快速LAN网络处理单个tcp连接(无需重新连接)。我走对了吗?

您是否阅读了各自的手册页?
迈克尔·汉普顿

您是否运行了详细的性能分析,以便确保导致延迟的是Linux网络部分而不是导致应用程序的部分?
Tero Kilkanen 2014年

您正在运行哪个OS /发行版/版本/内核?
ewwhite 2014年

另外,涉及哪种类型的硬件?服务器品牌/型号,CPU规格,网络基础设施...
ewwhite

Answers:


12

任务集用于将一个进程绑定到一个或多个CPU。实质上指定它在初始执行时或运行时可以在何处运行。如果在现代服务器设备上使用RHEL / CentOS,numactl建议使用taskset

Cpuset / cset用于CPU屏蔽,是围绕Linux cgroup构建的框架。Cset从未在某些发行版(如RHEL)上流行,因为还有其他工具可用于流程管理。

下面的第一个命令创建一个防护,将操作系统的任务限制为CPU内核0和8。第二个命令将当前的Shell会话移动到指定的CPU防护,从而隔离了系统和用户进程。

# cset shield --cpu 1-7,9-15 --kthread=on
# cset proc --move --pid=$$ --threads --toset=user

在您将进程绑定到CPU之前,还需要检查和调整其他内容。中断(irqbalance部分禁用),节能设置,系统调度程序,I / O升降机,实时策略(chrt)。

请参阅:Ubuntu上的低延迟TCP设置

这是一个(复杂的)应用程序包装器示例,它选择一个内核,停止irqbalance,启动它并将其列入黑名单,然后在选定的内核上使用SCHED_FIFO和优先级99 执行./your_program 。

Core=5
CoreMask=`echo "16 o 2 $Core ^ p" | dc`
service irqbalance stop
  until [ "`service irqbalance status`" = "irqbalance is stopped" ] ; do sleep 1 ; done
IRQBALANCE_ONESHOT=1 IRQBALANCE_BANNED_CPUS=${CoreMask} irqbalance
sleep 1
  until [ "`service irqbalance status`" = "irqbalance is stopped" ] ; do sleep 1 ; done
numactl --physcpubind=${Core} --localalloc chrt -f 99 ./your_program

1
请注意,使用时,应用程序可能会重置其关联性taskset。如果您使用cpuset,则无法从cpuset授予您的亲和力上改变您的亲和力。
马修·伊夫,2015年

numactl??
ewwhite 2015年

1
同样,两个程序都调用相同的基础系统调用sched_setaffinity
马修·伊夫,2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.