问题标签 [huge-pages]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
11923 浏览

linux - 运行 DPDK helloworld 示例时,未在大页面中报告免费大页面

我下载并构建了 dpdk-stable-16.11.4 版本(使用 x86_64-native-linuxapp-gcc 目标)。我正在运行 Ubuntu 16.04.3 LTS。根据http://dpdk.org/doc/quick-starthttp://dpdk.org/doc/guides-16.04/linux_gsg/sys_reqs.html设置大页面后

我可以看到巨大的页面。

但是当我运行 helloWorld 示例时,它抱怨没有免费的大页面,见下文。

此外,内存信息显示免费的大页面都消失了。

知道为什么会这样吗?

0 投票
1 回答
1347 浏览

linux - 在 Linux x86-64 上使用 mmap 或 shmget 分配非默认大页面

更新:我将默认的大页面大小切换为 2MB 并重新启动以确认它始终是失败的非默认大小,现在我可以从两个池中分配。我很困惑,但可能正在取得进展。

我一直试图让 shmget 和 mmap 从非默认的大页面池中分配,但在内核 4.13.0-32-generic 上没有成功。我已经配置了 2M 和 1G 的大页面。使用 1G 页面作为默认大小,此调用将成功:

addr = mmap(0, byteAmount, PROT_READ | PROT_WRITE, MAP_PRIVATE|MAP_HUGETLB|MAP_ANONYMOUS|MAP_HUGE_1GB, -1, 0);

但这将失败Cannot allocate memory

addr = mmap(0, byteAmount, PROT_READ | PROT_WRITE, MAP_PRIVATE|MAP_HUGETLB|MAP_ANONYMOUS|MAP_HUGE_2MB, -1, 0);

hugeadm --解释输出:

目标是能够使用 2MB 和 1GB 页面的组合来最大化 TLB 命中率。非常感谢任何帮助!

0 投票
1 回答
1605 浏览

c++ - c++ 应用程序无法分配比某个限制更多的大页面

概述

我有一个读取大量数据(~1T)的 c++ 应用程序。我使用大页面(2M 时 614400 页)运行它,这可以正常工作 - 直到达到 128G。

为了测试,我在 C++ 中创建了一个简单的应用程序,它分配 2M 的块直到它不能。

应用程序运行使用:

在运行时,我监视免费大页面的 nr(来自/proc/meminfo)。我可以看到它以预期的速度消耗巨页。

但是,应用程序在分配了 128G(或 65536 页)时因std::bad_alloc异常而崩溃。

如果我同时运行两个或更多实例,它们都以 128G 的速度崩溃。

如果我将 cgroup 限制降低到较小的值,比如 16G,应用程序会在此时正确崩溃并出现“总线错误”。

我错过了一些微不足道的事情吗?请在下面查看详细信息。

我的想法不多了...

细节

机器、操作系统和软件:

我使用的简单测试代码(分配 2M 的块,直到可用的大页面低于限制)

Hugepages 在启动时设置为使用 614400 个页面,每个页面 2M。

从 /proc/meminfo:

来自 ulimit 的限制:

cgroup 限制:

测试

使用 HUGETLB_DEBUG=1 运行测试代码时的输出:

使用 strace:

最后在 /proc/ pid /numa_maps 中:

0 投票
1 回答
3640 浏览

linux-kernel - /proc/$pid/maps 中的“已删除”是什么意思?

我下载了 libhugetlbfs.so 并有一个简单的测试源:

然后设置环境:

最后,执行 test_malloc.exe :

和 /proc/ pidof test_malloc.exe/maps :

numastat -m 显示真正用于 8M 的大页面,困扰我的是地图输出中的“已删除”是什么意思?!在 /mnt/SharedMem_2M 或 /anon_hugepage

编辑 :

和调试信息:

和地图:

0 投票
1 回答
980 浏览

linux - VirtualBox 是否分配操作系统专用的“大页面”?

我在使用具有大量 RAM 的 VirtualBox 和 VM 时遇到了严重的性能问题,已经在这个那个其他问题中进行了更详细的解释。从我到目前为止的测试来看,与分配给 VM 的内存量有直接关系:问题发生在 48 GB 的 RAM 上,而不是只有 6 GB 或启用largepagesVM 的设置。

这很有趣,因为在Linux上默认情况下似乎没有启用该设置,文档只讲述了大约 5 % 的改进,并不是说在某些 RAM 大小下对于良好的性能根本没有必要,另外还有一些情况下VirtualBox 完全忽略largepages了。

00:00:42.866663 PGMR3PhysAllocateLargePage:分配大页面花费的时间太长(最后一次尝试 103 毫秒;nr 超时 11);禁用

https://www.virtualbox.org/attachment/ticket/16518/VBox_16518_5112.log#L1154

因此,我试图深入研究该功能在 VirtualBox 的内存管理中实际发生了什么变化,并得出结论,它似乎实现了一种与操作系统的“巨页”相媲美的机制。这意味着在我看来,它不分配任何类型的“大页面”,也不分配transparenthugetlb*而是仅从操作系统获取 4 kB 页面,将这些页面组合成 2 MB 的块,并在内部将其用作一个逻辑页面

关于我的性能问题,这意味着(内存管理)性能的任何差异只能来自 VirtualBox 本身,而不是来自主机操作系统中的任何优化。OTOH,如果 VirtualBox 将实现类似于“大页面”的方法,它可能会解释为什么在我的案例中可以看到性能优势,就像其他使用操作系统中的“大页面”的软件一样,例如 viamadvise或其他。如果--largepages真的像我的情况那样产生如此巨大的差异,甚至可以说这是 VirtualBox 中的一个错误,不需要为 VM 中的一定数量的 RAM 设置该设置。

那么,我的假设是否正确,即 VirtualBox 仅使用操作系统中的普通 4 kB 页面而不是特殊的巨大页面?

VBox/VMM/VMMR0/PGMR0.cpp:

VBox/VMM/VMMR0/GMMR0.cpp:

VBox/运行时/r0drv/linux/memobj-r0drv-linux.c:

0 投票
1 回答
819 浏览

dpdk - 为什么大页面没有更新

我收到此错误

EAL:hugepages-1048576kB 中没有报告免费的大页面

因此,即使在设置 nr_hugepages 之后,我也无法看到更新/设置的值。可能是什么原因

0 投票
0 回答
371 浏览

linux - 与标志 MAP_HUGETLB 相比,hugetlbfs 的优势

我一直在阅读有关大页面的 Linux 内核文档。我从该部分了解到,Using Huge Pages有 3 种方法可以获取它们:

  1. SHM POSIX API
  2. 通过在参数中使用MAP_HUGETLB标志mmap
  3. 在 处打开文件hugetlbfs并将其映射到mmap

当我需要多个进程之间的一些共享内存时,SHM 很有用。

的缺点hugetlbfs是我必须提供到安装的路径hugetlbfs。虽然使用简单的标志,MAP_HUGETLB但我不需要这些信息。那么使用微信有什么好处hugetlbfs呢?

0 投票
1 回答
1987 浏览

dpdk - 无法使用 dpdk 创建 mbuf 池

我试图在示例/中运行 vhost 应用程序,并面临以下问题:

[]#examples/vhost/build/app/vhost-switch -l 0-3 -n 4 -- --socket-file /tmp/sock0 --client -p 0x1 --stats 20
EAL: 检测到 24 lcore(s )
EAL:hugepages-1048576kB 中没有报告可用的大页面
EAL:多进程套接字 /var/run/.rte_unix
EAL:探测 VFIO 支持...
EAL:警告:主内核在本地套接字上没有内存!
EAL:NUMA 套接字 -1 上的 PCI 设备 0000:07:00.0
EAL:无效的 NUMA 套接字,默认为 0
EAL:探针驱动程序:8086:1521 net_e1000_igb
EAL:NUMA 套接字 -1 上的 PCI 设备 0000:07:00.1
EAL:无效的 NUMA套接字,默认为 0
EAL:探针驱动程序:8086:1521 net_e1000_igb
EAL:NUMA 套接字 -1 上的 PCI 设备 0000:09:00.0
EAL:无效的 NUMA 套接字,默认为 0
EAL:探针驱动程序:8086:10d3 net_e1000_em
VHOST_PORT:
指定的端口号(1)超过总系统端口号(0)
EAL:错误 - 退出代码:1
原因:无法创建 mbuf 池

HugePage 的信息是这样的:

[]# sudo cat /proc/meminfo | grep Huge
AnonHugePages:3129344 kB
HugePages_Total:4096
HugePages_Free:0
HugePages_Rsvd:0
HugePages_Surp:0
Hugepagesize:2048 kB

我尝试运行其他应用程序,helloworld 运行良好,但 ptpclient 有同样的问题。重新启动没有帮助。我该如何解决?任何帮助表示赞赏。

提前致谢。

0 投票
1 回答
895 浏览

linux - 使用大页面映射编写映射文件

据我了解,目前在 linux 上,没有办法对文件进行 mmap(在 xfs 或 ext4 上)然后写入文件并以某种方式使用大页面。

这是正确的还是过时的信息,现在有办法吗?

谢谢。

0 投票
0 回答
375 浏览

c - 在 Linux 中使用 1GB 透明大页面

我想知道是否有任何方法可以在 Linux 中使用 1GB 透明大页面而无需重新编译应用程序?我知道要使用 2MB 透明大页面,只需执行以下操作(我使用 SLES 12.3):