![在有两个CPU的计算机中,如何获取每个CPU的本地内存的物理地址?](https://linux22.com/image/220327/%E5%9C%A8%E6%9C%89%E4%B8%A4%E4%B8%AACPU%E7%9A%84%E8%AE%A1%E7%AE%97%E6%9C%BA%E4%B8%AD%EF%BC%8C%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E6%AF%8F%E4%B8%AACPU%E7%9A%84%E6%9C%AC%E5%9C%B0%E5%86%85%E5%AD%98%E7%9A%84%E7%89%A9%E7%90%86%E5%9C%B0%E5%9D%80%EF%BC%9F.png)
我的电脑有以下规格
- 2 个英特尔 CPU x86_64
- 总内存 8GB(每个 CPU 4GB)
- 操作系统是 Rocky Linux 9
我想使用memmap
grub 中的参数为每个 CPU 保留 1GB 内存。我检查过dmesg
,/proc/meminfo
甚至使用过numaclt -H
。但我找不到每个CPU的内存物理地址。
如何获取每个CPU本地内存的物理地址?
答案1
如果您的目的是在特定的 CPU 核心上运行应用程序,为其分配特定的资源(内存)集,您可以执行以下操作:
#launch google-chrome on CPU core 0
taskset 0x1 google-chrome
# Create a cgroup
mkdir /sys/fs/cgroup/memory/my_cgroup
# Add the process to it
echo $PID > /sys/fs/cgroup/memory/my_cgroup/cgroup.procs
# Set the limit to 100MB
echo $((100 * 1024 * 1024)) > /sys/fs/cgroup/memory/my_cgroup/memory.limit_in_bytes
通过操作系统抽象与硬件交互总是一个好主意,除非我们确切地知道我们正在做什么/撤消什么。