随着多核处理器在服务器,便携式计算机或台式PC甚至移动设备中变得越来越普遍,针对这种类型的系统优化了越来越多的应用程序。 但是,有时将程序或过程链接到一个或多个特定内核可能很有用。 让我们看看如何获得它...
安装任务集
Taskset工具是“ util-linux”软件包的一部分。 大多数Linux发行版都默认预先安装了软件包。 如果任务集不可用,可以按以下方式安装它:
En Debian / Ubuntu 及衍生产品:
sudo apt-get安装util-linux
En Fedora 及衍生产品:
sudo yum安装util-linux
查看正在运行的进程的CPU关联性
要检索进程的CPU相关性信息,请使用以下格式:
任务集-p PID
例如,要检查具有PID 2915的进程的CPU的亲和性:
任务集-p 2915
返回结果:
pid 2915当前的亲和力掩码:ff
Taskset以十六进制位掩码格式返回当前的CPU关联性。 在示例中,亲和力(以十六进制位掩码表示)对应于二进制格式的“ 11111111”,这意味着该进程可以在八个不同CPU内核(0至7)中的任何一个上运行。
十六进制位掩码中的最低位对应于核心ID 0,从右边到核心ID 1的第二最低位,对应于核心ID 2的第三最低位,等等。 因此,例如,CPU关联性“ 0x11”表示核心ID 0和4。
tasket可以将CPU关联性显示为处理器列表而不是位掩码,这很容易阅读。 要使用此格式,必须使用“ -c”选项运行任务集。 例如:
任务集-cp 2915
返回结果:
pid 2915的当前相似性列表:0-7
强制进程在特定内核上运行
使用任务集,可以将正在运行的进程分配给特定的CPU内核。 为此,您必须使用以下格式:
任务集-p COREMASK PID任务集-cp核心列表PID
例如,要将进程分配给核心0和4,您可以运行:
任务集-p 0x11 9030
结果返回什么:
pid 9030的当前亲和力掩码:ff pid 9030的新亲和力掩码:11
同样,您可以运行:
任务集-cp 0,4 9030
使用“ -c”选项,您可以指定一个数字内核ID列表,以逗号分隔,甚至可以包括范围(例如0,2,5,6、10、XNUMX、XNUMX-XNUMX)。
使用特定的内核启动程序
tasket还允许使用许多特定的内核启动新程序。 为此,必须以以下格式使用它:
COREMASK EXECUTABLE任务集
例如,要在CPU内核ID 0上启动VLC程序,请使用以下命令:
任务集-c 0 vlc
仅将内核专用于特定程序
尽管tasket允许将程序分配给特定的内核,但这并不意味着没有其他程序或进程可以使用它。 为了避免这种情况并将整个内核专用于特定程序,必须使用内核参数“ isolcpus”,该参数允许您在启动过程中保留内核。
为此,必须在GRUB的内核行中添加“ isolcpus =”参数。 例如,要保留ID核心0和1,请添加“ isolcpus = 0,1”。
完成此操作后,Linux调度程序将不会为保留的内核分配任何常规进程,除非专门为任务集分配了进程。
数据来源: xmodule & Taskset手册页.
好帖子:)。
好的帖子,但无意拖钓...
将程序分配给特定内核的用途是什么?
我的意思是; 如果您的计算机具有12个内核,那么合乎逻辑的事情就是使用这12个内核来执行某个程序,而不是对其进行限制,因为这样我们才能获得最高的性能。
我看到的是有用的选项,该选项允许我们不将任何进程分配给某个内核,而将其专用于某个程序。
您所说的是有道理的,通过让计划者使用所有内核,可以更好地平衡资源,但是有时需要专用的内核,例如运行具有特定任务的虚拟机,当没有更多的进程正在分配的内核中运行。
ATTE
jvk85321
精确! 谢谢,jvk! 🙂
但是,当您创建虚拟机时,它会要求您选择分配的CPU数量...如果最终操作系统忽略了该值并在所有CPU上执行它,那么选择此值有什么用...这个例子不是最好的...
为了使Flash在Windows 8.1 x64,AMD和Firefox上运行,建议选择Flash仅在CPU上运行,但是不适用于我。 如果将其添加到其他DE(至少是KDE)的任务管理器中(如果尚未添加),也将很方便。
嗯,我还不明白评论的结尾。但是,为此,必须禁止运行虚拟机的CPU上的所有进程。 或将它们分配给其他CPU。 有趣,很好的评论。
用于创建天才超级计算机
据了解。
感谢您的澄清。
当为一个特定的程序保留一个内核时,执行线程会发生什么?如果您使用带有HT的内核来执行,它将为程序保留2个执行线程。
在具有多个内核的计算机上,该命令似乎不是很有用,但是对于我们拥有双核的计算机来说,这是相当实用的。 例如,我有一个游戏,当我打开游戏时,它使用了所有处理器核心;如果我还有其他需要CPU的程序(例如使用大文件中的grep进行搜索),则系统速度会降低。 该解决方案非常简单,只需将游戏限制为仅使用其中一个内核即可。
我也同意lf,他们应该将其真正集成到任务管理器中(到目前为止,我在Gentoo上尝试过,我认为没有),尤其是在Windows中,这是XP以来存在的东西(右键单击进程> “设置亲和力...”),但是不久前,我发现以下脚本将任务集变成了更直观的内容(最初发布 信息 甚至在某些情况下,有必要管理内核的使用):
#!/bin/bash
read -p 'Ingrese el ID del proceso en cuestión: ' ID
read -p 'Ingrese la lista de procesadores separados por comas: ' P
echo 'Su ID es '$ID' y los procesadores son '$P
sudo taskset -p -c $P $ID
read -p 'Listo, presione enter para finalizar' P
进行一些修改后,它可以指示进程的名称而不是PID(或者可以接受两者,并且可以确定该参数是另一个参数的时间)。
没有针对新用户的任务集的图形界面,那就太好了