标签: numa

为 Intel Core i7 启用 NUMA

在 Linux 内核中,文档CONFIG_NUMA说:

Enable NUMA (Non Uniform Memory Access) support. 

he kernel will try to allocate memory used by a CPU on the  
local memory controller of the CPU and add some more
NUMA awareness to the kernel.

For 64-bit this is recommended if the system is Intel Core i7
(or later), AMD Opteron, or EM64T NUMA.
Run Code Online (Sandbox Code Playgroud)

我有一个 Intel Core i7 处理器,但 AFAICT 它只有一个 NUMA 节点:

$ numactl --hardware
available: 1 nodes (0)
node 0 cpus: 0 1 …
Run Code Online (Sandbox Code Playgroud)

linux-kernel numa

23
推荐指数
2
解决办法
3万
查看次数

如何将一个进程的所有内存页从一个 NUMA 节点迁移到另一个 NUMA 节点?

在 Linux 中,我想在运行时将 KVM 虚拟机的内存页从一个 NUMA 节点迁移到另一个 NUMA 节点。但是我在 KVM 管理程序或使用 libvirt API 中找不到任何接口来执行此操作。然后我尝试使用中的numa_migrate_pages函数-lnuma,迁移VM进程的内存页。但是我发现该numa_migrate_pages功能只能迁移部分页面,不能迁移所有页面。例如,下面的文字显示了这个 VM 进程的内存页分布:

Node0:  0             pages
Node1:  1538          pages
Node2:  270641        pages
Node3:  552           pages
Run Code Online (Sandbox Code Playgroud)

我想把Node2中的所有页面都迁移到Node0。但是使用该numa_migrate_pages功能后,只迁移了部分页面,如下图所示:

Node0:  7952          pages
Node1:  1538          pages
Node2:  262113        pages
Node3:  552           pages
Run Code Online (Sandbox Code Playgroud)

然后我打开文件,发现Node2上剩下的大部分页面都是匿名和脏页:/proc/[pid of VM process]/numa_maps

7f572c000000 default anon=262143 dirty=262143 N2=262113 ...
Run Code Online (Sandbox Code Playgroud)

那么为什么不能将Node2中的所有页面都迁移到Node0上呢?这里有什么问题?

linux kvm numa

11
推荐指数
1
解决办法
1572
查看次数

如何禁用一个 CPU

我正在尝试禁用服务器的某些 CPU。
我找到了这个链接:https : //www.cyberciti.biz/faq/debian-rhel-centos-redhat-suse-hotplug-cpu/linux-turn-on-off-cpu-core-commands/,它提供我的方法如下:

这是numactl --hardware给我的:
在此处输入图片说明

我想禁用从 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 …

linux cpu ps numa cpu-usage

9
推荐指数
2
解决办法
8716
查看次数

全局设置 CPU 亲和性

有没有办法制作所有进程,除了我故意设置tasksetnumactl仅使用某些内核/内存的进程(无需循环遍历每个进程的每个线程并自己设置)?

更多细节:我有 2 个物理 CPU 芯片,每个芯片有 4 个内核/8 个线程以及总共 256 GB 的 RAM。内存在两条 CPU 内存总线之间分布不均。我希望内存显着减少的那个是通用的,大多数程序(例如后台任务)在该 CPU 上运行并带有它的内存。然后在具有大部分内存的 CPU 上运行特殊任务,我将对其速度进行计时,并希望它们没有 CPU 争用、NUMA 或类似问题。

cpu numa

6
推荐指数
1
解决办法
2895
查看次数

如何在 Linux 系统上禁用 NUMA 节点的内存

有没有办法禁止访问与NUMA机器上的给定 NUMA 节点/套接字关联的内存?

我们与数据库供应商就我们的 HP DL560 机器存在一些争议。DB 销售类型的技术支持人员很高兴我们不能使用我们的 DL560,但不得不购买新的 DL360,因为它们的插槽较少。我相信他们关心的是访问套接字间内存的速度。他们建议,如果我坚持保留 DL560,我应该将两个插座留空。我认为他们错了(又名疯狂)但我需要测试来证明我的立场是稳固的。

我的配置:
机器有四个插槽,每个插槽有 22 个超线程物理内核,总共 176 个表观内核,总共 1.5 T 内存。操作系统为 Red Hat Enterprise Linux Server 7.4 版。

lscpu 显示内容(部分):

$ lscpu | egrep 'NUMA|ore'
Thread(s) per core:    2
Core(s) per socket:    22
NUMA node(s):          4
NUMA node0 CPU(s):     0-21,88-109
NUMA node1 CPU(s):     22-43,110-131
NUMA node2 CPU(s):     44-65,132-153
NUMA node3 CPU(s):     66-87,154-175
Run Code Online (Sandbox Code Playgroud)

如果我可以访问物理硬件,我会考虑从两个插槽中拉出处理器来证明我的观点,但我没有访问权限,无论如何我也无权在硬件上胡闹。

下一个最好的方法是使用操作系统虚拟禁用套接字。我在这个链接上读到我可以让处理器停止服务

echo 0 > /sys/devices/system/cpu/cpu3/online
Run Code Online (Sandbox Code Playgroud)

并且,确实,处理器已停止使用,但这与内存无关。

我刚刚关闭了套接字 #3 的所有处理器(使用 lscpu 查找哪些是用于套接字#3):

for num in …
Run Code Online (Sandbox Code Playgroud)

linux rhel memory numa

6
推荐指数
1
解决办法
1901
查看次数

如何使用 numactl 运行服务

我需要做这样的事情来运行 MongoDB

$numactl --interleave=all /usr/bin/mongod --config /etc/mongod.conf &
Run Code Online (Sandbox Code Playgroud)

我应该更改什么才能使用上述选项运行 mongo 守护程序?

linux ubuntu database numa mongodb

4
推荐指数
1
解决办法
6727
查看次数

标签 统计

numa ×6

linux ×4

cpu ×2

cpu-usage ×1

database ×1

kvm ×1

linux-kernel ×1

memory ×1

mongodb ×1

ps ×1

rhel ×1

ubuntu ×1