这个问题以前有人问过,但我相信世界已经改变了,足以再问一次。
irqbalance 在今天的系统上有什么用处,我们有支持 NUMA 的 CPU,在它们的核心之间共享内存?
运行irqbalance --oneshot --debug
表明现代 VMware ESXi 环境中的虚拟来宾正在内核之间共享 NUMA 节点。
# irqbalance --oneshot --debug 3
Package 0: numa_node is 0 cpu mask is 0000000f (load 0)
Cache domain 0: numa_node is 0 cpu mask is 0000000f (load 0)
CPU number 0 numa_node is 0 (load 0)
CPU number 1 numa_node is 0 (load 0)
CPU number 2 numa_node is 0 (load 0)
CPU number 3 numa_node is 0 (load 0)
Run Code Online (Sandbox Code Playgroud)
在这种情况下,irqbalance 将检测到它正在 NUMA 系统上运行,然后退出。这会干扰我们的进程监控。 …
我们一直在测试使用 2 个 Xeon Gold 6154 CPU 和 Supermicro X11DPH-I 主板和 96GB RAM 的服务器,并发现与仅使用 1 个 CPU(一个插槽空),类似的双核运行相比,内存存在一些非常奇怪的性能问题CPU Haswell Xeon E5-2687Wv3(用于本系列测试,但其他 Broadwell 性能类似)、Broadwell-E i7s 和 Skylake-X i9s(用于比较)。
当涉及到各种 memcpy 功能甚至内存分配时,预计具有更快内存的 Skylake Xeon 处理器的性能将比 Haswell 更快(在下面的测试中未涵盖,因为我们找到了一种解决方法),而是安装了两个 CPU ,Skylake Xeon 的速度几乎是 Haswell Xeon 的一半,与 i7-6800k 相比甚至更低。更奇怪的是,当使用 Windows VirtualAllocExNuma 分配 NUMA 节点进行内存分配时,虽然普通内存复制功能在远程节点上的性能预计比本地节点差,但使用 SSE、MMX 和 AVX 寄存器的内存复制功能性能更佳在远程 NUMA 节点上比在本地节点上更快(什么?)。如上所述,使用 Skylake Xeons,
我不确定这是主板或 CPU 上的错误,还是 UPI 与 QPI 的错误,或者以上都不是,但是 BIOS 设置的组合似乎对此没有用。在 bios 中禁用 NUMA(未包含在测试结果中)确实提高了所有使用 SSE、MMX 和 AVX 寄存器的复制功能的性能,但所有其他普通内存复制功能也会遭受很大损失。
对于我们的测试程序,我们使用内联汇编函数和_mm
内部函数进行测试,除了汇编函数之外,我们使用 Windows 10 和 Visual Studio …
我的老板想知道 HP DL320 G5 是否启用了 NUMA。我试过在互联网上搜索,但找不到任何具体信息。
有谁知道这个服务器是否适合运行 NUMA 应用程序?
来自 VMware 的文档:
虚拟 NUMA 拓扑可用于硬件版本 8 虚拟机,并且在虚拟 CPU 数量大于 8 时默认启用。您还可以使用高级配置选项手动影响虚拟 NUMA 拓扑。
因此,假设我有一个分配了 8 个 CPU 的虚拟机——它正在运行虚拟 NUMA。如果我有一个旧的非 NUMA 感知应用程序在服务器上运行,它会不会运行得很差,或者至少不会像在非 V-NUMA 模式下那样好?
我假设 V-NUMA 是这样启用的,因为如果应用程序供应商推荐 8 个或更多内核,则该软件很可能会识别 NUMA。或者是否有许多应用程序支持多核,但不支持 NUMA?
我如何确定由这个可能的问题引起的瓶颈?
编辑:有没有想过 vCenter 中是否有用于监控远程 NUMA 调用的指标?
我需要一些帮助来确定我在服务器上的 Linux 下看到的内存带宽是否正常。这是服务器规范:
HP ProLiant DL165 G7
2x AMD Opteron 6164 HE 12-Core
40 GB RAM (10 x 4GB DDR1333)
Debian 6.0
Run Code Online (Sandbox Code Playgroud)
mbw
在这台服务器上使用我得到以下数字:
foo1:~# mbw -n 3 1024
Long uses 8 bytes. Allocating 2*134217728 elements = 2147483648 bytes of memory.
Using 262144 bytes as blocks for memcpy block copy test.
Getting down to business... Doing 3 runs per test.
0 Method: MEMCPY Elapsed: 0.58047 MiB: 1024.00000 Copy: 1764.082 MiB/s
1 Method: MEMCPY Elapsed: 0.58012 MiB: 1024.00000 Copy: 1765.152 MiB/s …
Run Code Online (Sandbox Code Playgroud) 我可以访问两台 NUMA 服务器。其中之一是 Dell R720,具有以下 CPU:
$ cat /proc/cpuinfo |grep Xeon|sort|uniq -c
24 model name : Intel(R) Xeon(R) CPU E5-2630L v2 @ 2.40GHz
Run Code Online (Sandbox Code Playgroud)
另一个是 HPE DL360 Gen8,具有以下 CPU:
$ cat /proc/cpuinfo |grep Xeon|sort|uniq -c
24 model name : Intel(R) Xeon(R) CPU E5-2630 0 @ 2.30GHz
Run Code Online (Sandbox Code Playgroud)
在我们拥有许多 HPE Gen9 服务器的工作中,我已经习惯了 CPU 编号(socket0、socket1、socket0 超线程、socket1 超线程)。HPE DL360 Gen8 似乎使用以下编号:
$ cat /proc/cpuinfo |grep physical.id|uniq -c
6 physical id : 0
6 physical id : 1
6 physical id : 0
6 physical id …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 taskset 将一些进程分配给特定的 CPU。当我运行 taskset 时,似乎该命令已起作用,因为我收到了一条回复,说明了该进程的新关联设置。
但是,当我监视顶部输出时(我试图为其分配 cpu 的进程以高 cpu 百分比运行),我可以看到该进程仍在 cpu 之间切换,因此看起来任务集不起作用。
在网上搜索类似问题时,我看到 Red Hat 网站上的帖子https://access.redhat.com/knowledge/docs/en-US/Red_Hat_Enterprise_MRG/1.1/html/Realtime_Tuning_Guide/sect-Realtime_Tuning_Guide-Realtime_Specific_Tuning-Non_Uniform_Memory .html
这表明 taskset 在启用 numa 的系统上不起作用。是这种情况吗?我无法从其他任何地方找到这一点。
我正在使用的任务集命令是
taskset -pc 1-2 16723 pid 16723 的当前关联列表:0-7 pid 16723 的新关联列表:1,2
我也试过:
任务集-p 0x00000001 16723
操作系统版本为:
描述:Ubuntu 12.04.1 LTS 版本:12.04
内核版本:Linux hadoop 3.2.0-29-generic #46-Ubuntu SMP Fri Jul 27 17:03:23 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
在我考虑使用 cgroups 之前,我会认为 taskset 至少可以为进程分配 cpu 亲和性?
谢谢,
还要确认我的主机上没有禁用 numa 来自http://martincarstenbach.wordpress.com/2012/04/27/little-things-i-didnt-know-difference-between-_enable_numa_support-and-numactl/
更多 /proc/cmdline
BOOT_IMAGE=/boot/vmlinuz-3.2.0-29-generic root=UUID=3221e122-b2fb-48b7-b761-16c57ef51f9a ro安静飞溅vt.handoff=7
确认这是在物理主机上。
我们即将构建一个新服务器,我想知道可用选项对 NUMA 有何影响。
该系统将使用 Proliant DL380 Gen9 8SFF 构建,它有 2 个插槽,每个插槽有 12 个内存组。
我的问题是什么会更好地配置 2 CPU 的 6 核和内存均匀分布在 NUMA 节点或单个 12 核 CPU 和该 NUMA 节点中的所有内存。
我是否应该期望使用单个 Intel Xeon E5-2690Wv3 和 192GB(4 * 32GB + 4 * 16GB)内存出现带宽问题并选择 2 CPU 选项,或者我应该避免复杂性并选择单 CPU 解决方案并让所有 RAM 坐下在分配给该套接字的银行中?
不会使用虚拟化,机器将运行 Windows 2012 R2 和 SQL 2014,两者都支持 NUMA。
我知道可以将特定进程的 numa 模式设置为“交错”(请参见下面的注释)numactrl --interleave
,但我想知道是否可以将其设为系统范围的默认值(又名更改“系统策略”) ”)。例如,是否有一个内核启动标志来实现这一点?
注意:这里我谈论的是跨 NUMA 节点交错分配的页面的内核行为,而不是 BIOS 级别的内存控制器行为设置,该行为设置跨 NUMA 节点交错缓存行
我在非常特定的情况下遇到服务器速度下降的问题。事实是:
在 5a 或 5b 场景中,我的 WRF 开始突然变慢,有时甚至比正常情况慢约 5 倍。
numa ×10
linux ×4
performance ×4
hp ×2
hp-proliant ×2
memory ×2
redhat ×2
vmware-esxi ×2
centos ×1
hardware ×1
intel ×1
multi-core ×1
sql-server ×1
windows ×1
x86 ×1