linux - 将(物理拆分的)虚拟大页面移动到另一个 numa 节点
问题描述
我在有 2 个节点的 NUMA 机器上。架构是 x86_64 和 linux 内核版本 4.19.60。
接口 /sys/kernel/mm/transparent_hugepages/enabled 设置为“始终”。在我的 C 程序中,我使用 malloc() 创建一个数组,并使用 memset() 在物理内存中对其进行故障排除。程序是单线程的,固定在node 0的core上。采用first-touch内存策略,所以所有内存都到node 0上。但是node 0的内存是碎片化的,从某种意义上说物理巨量并不多可用页面(我用另一个程序手动导致)。使用此处显示的代码,我可以在我的 C 程序中找到数组的 *virtual* 大页面列表,这些页面被拆分为 512 个物理帧。如果一个虚拟大页面的前4K的pfn是2MB对齐的,那么这个虚拟大页面很可能映射到一个物理大页面。否则,它不是。
我的目标是在我的程序中调用一些函数,它将数组的(物理拆分的)虚拟大页面迁移到节点 1,在那里它们将合并到单个物理大页面。我首先想到使用move_pages()。但是,我的测试表明,使用 2MB 对齐的页面地址调用 move_pages() 以及使用 512 4K 映射到 RAM 中的虚拟大页面,那么只有第一个 4K 页面会移动。休息 511 将保持不变。所以这个方法行不通。
有没有其他方法可以尝试实现目标?
解决方案
推荐阅读
- c# - 将第一天字符串转换为日期时间
- python - While loop doesn't stop with multiple conditions
- android - 网络更改连接接收器不工作
- python - How can I let the id be auto generated in my database?
- c# - 如何在用户名和密码中再添加一个字段,以便在 ASP.NET Identity 中创建帐户和进行身份验证?
- javascript - 扫描条码后自动提交 HTML 表单
- c - 使用 vsnprintf 时有没有办法绕过 va_copy?
- git - 如果它是目标分支后面的一些提交,我们如何限制 git 不允许从功能分支合并
- azure - 未能部署 Azure 资源管理器模板
- python - pwntools python not importing