我正在尝试在多核机器上运行一些基准测试,我想告诉 Linux 内核简单地避免使用某些内核,除非明确告知要使用它们。
这个想法是我可以留出少量内核(机器有 6 个物理内核)进行基准测试,并使用 cpu 掩码只允许对给定内核进行基准测试。
这可行吗?
我需要为我的并发程序运行性能测试,我的要求是它应该只在一个CPU 内核上运行。(我不想合作线程 - 我希望总是有一个上下文切换)。
所以我有两个问题:
最佳解决方案 - 如何仅为我的程序签名和保留一个 CPU 内核(以强制操作系统不使用此 CPU 内核)。我想这是不可能的,但也许我错了......
如何设置 linux (Fedora 24) 只使用一个 CPU 核心?
我正在尝试禁用服务器的某些 CPU。
我找到了这个链接:https : //www.cyberciti.biz/faq/debian-rhel-centos-redhat-suse-hotplug-cpu/linux-turn-on-off-cpu-core-commands/,它提供我的方法如下:
我想禁用从 16 到 63 的所有 CPU,所以我编写了一个名为opCPUs.sh如下的脚本:
#!/bin/bash
for i in {16..63}; do
if [[ "$1" == "enable" ]]; then
echo 1 > /sys/devices/system/cpu/cpu$i/online
elif [[ "$1" == "disable" ]]; then
echo 0 > /sys/devices/system/cpu/cpu$i/online
else
echo 'illegal parameter'
fi
done
grep "processor" /proc/cpuinfo
Run Code Online (Sandbox Code Playgroud)
然后我执行它:./opCPUs.sh disable我可以grep在脚本中看到结果:

它似乎工作。
现在我认为所有进程都应该在 CPU 0 - 15 中,因为其他进程已被禁用。
所以我使用现有的流程dbus来验证如下:
ps -Lo psr $(pgrep dbus)
该psr …
每次在 Kali Linux 2.0 上启动然后解锁我的 GUI 会话时,我都会在虚拟控制台 1 中收到另一个此错误:
[ 1235.586792] [drm:intel_set_cpu_fifo_underrun_reporting [i915]] *ERROR* uncleared fifo underrun on pipe A
[ 1235.586827] [drm:ironlake_irq_handler [i915]] *ERROR* CPU pipe A FIFO underrun
Run Code Online (Sandbox Code Playgroud)
这个错误是什么意思?有什么值得担心的重要事情吗?
我刚刚用 KDE 安装了 Linux Mint 18。在为 wifi 配置正确的驱动程序时,我遇到了启用“英特尔 CPU 处理器微码固件”的选项。现在该设备(被描述为未知)被标记为“请勿使用”。
我应该启用这个选项吗?如果我理解正确,微码应该可以启用 CPU 中的详细更改,我不打算这样做。另一方面,我读过它可以帮助提高 CPU 的性能。你会推荐什么?
谢谢!
感谢您检查这个。
jonathan@melange:~$ top
top - 05:21:08 up 44 min, 2 users, load average: 1.21, 1.68, 1.98
Tasks: 351 total, 2 running, 349 sleeping, 0 stopped, 0 zombie
%Cpu(s): 4.3 us, 14.0 sy, 2.1 ni, 70.4 id, 8.9 wa, 0.0 hi, 0.3 si, 0.0 st
GiB Mem : 15.579 total, 0.173 free, 4.141 used, 11.264 buff/cache
GiB Swap: 15.910 total, 15.868 free, 0.042 used. 11.014 avail Mem
PID PPID UID USER RUSER TTY TIME+ %CPU %MEM S COMMAND
67 2 0 …Run Code Online (Sandbox Code Playgroud) 只是为了理解核心 ID:
我有 4 个 CPU:
$ cat /proc/cpu* | grep proc*
processor: 0
processor: 1
processor: 2
processor: 3
Run Code Online (Sandbox Code Playgroud)
的结果nproc也是 4。
但如果我使用cat /proc/cpu* | grep 'core id'我得到相同的两次
core id: 0
core id: 2
core id: 0
core id: 2
Run Code Online (Sandbox Code Playgroud)
为什么它们不像CPU那样编号以及如何区分相同的核心ID?
全文/proc/cpuinfo如下:
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 37
model name : Intel(R) Core(TM) i3 CPU M 380 @ 2.53GHz
stepping : 5
microcode : 0x4
cpu MHz …Run Code Online (Sandbox Code Playgroud) 由于 Intel、AMD 和 ARM 受到Spectre 和 Meltdown cpu 内核内存泄漏错误/缺陷的影响,我们可以说 Power 架构不受这些影响吗?
我在 Linux (Ubuntu 18.04) 上使用带有四个处理器内核的 MacBook Retina:
$ grep -E '^model name|^cpu MHz' /proc/cpuinfo
model name : Intel(R) Core(TM) i5-4258U CPU @ 2.40GHz
cpu MHz : 799.976
model name : Intel(R) Core(TM) i5-4258U CPU @ 2.40GHz
cpu MHz : 799.993
model name : Intel(R) Core(TM) i5-4258U CPU @ 2.40GHz
cpu MHz : 799.992
model name : Intel(R) Core(TM) i5-4258U CPU @ 2.40GHz
cpu MHz : 800.016
Run Code Online (Sandbox Code Playgroud)
为了启用这个调控器(和按需调控器),我切换到acpi-cpufreq驱动程序。按照(将 CPU 调节器设置为按需或保守)和(https://ubuntuforums.org/showthread.php?t=1767485)中的说明,我必须在以下位置启用两个内核标志grub.cfg:
intel_pstate=disable processor.ignore_ppc=1
Run Code Online (Sandbox Code Playgroud)
反正。这就是 …
我的dmesg输出包含以下行:
[ 0.265021] MDS CPU bug present and SMT on, data leak possible. See https://www.kernel.org/doc/html/latest/admin-guide/hw-vuln/mds.html for more details.
Run Code Online (Sandbox Code Playgroud)
访问了上述站点并阅读了一些 MDS 后,我运行/收到了以下内容:
$ cat /sys/devices/system/cpu/vulnerabilities/mds
Mitigation: Clear CPU buffers; SMT vulnerable
根据该网站,这转化为:
“缓解:清除 CPU 缓冲区”......处理器易受攻击,并且启用了 CPU 缓冲区清除缓解。
“SMT 易受攻击”... SMT 已启用
我在计算方面没有很多经验,但据我所知(如果我错了,请纠正我),我的系统正在尽其所能防止 MDS。
我的问题是:
我可以采取进一步措施来保护我的系统吗?如果可以,我的下一步应该是什么?
cpu ×10
kernel ×3
linux ×3
linux-kernel ×2
ubuntu ×2
aix ×1
benchmark ×1
boot ×1
buffer ×1
cpu-usage ×1
dmesg ×1
drivers ×1
intel ×1
kali-linux ×1
linux-mint ×1
macintosh ×1
numa ×1
parallelism ×1
powerpc ×1
ps ×1