问题标签 [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 回答
602 浏览

cpu - TLB中可以存储的hugepage条目的数量是否有限制

我正在尝试分析虚拟机在使用大页面时获得的网络性能提升。为此,我通过更改 grub 命令行并重新启动将虚拟机管理程序配置为具有多个 1G 大页面(36),并且在启动 VM 时,我确保将大页面传递给 VM。在启动 8 个虚拟机(每个都有 2 个 1G 的大页面)并在它们之间运行网络吞吐量测试时,发现吞吐量比没有大页面时的运行速度要低得多。这让我想知道,这是否与我使用的大页面数量有关。可以使用 TLB 引用的 1G 大页面的数量是否有限制,如果有,是否低于常规大小页面的限制?我怎么知道这些信息。在这种情况下,我使用的是 Ivy Bridge 系统,并使用 cpuid 命令,我看到了类似

这是否意味着我在 TLB 中任何时候都只能有 4 个 1G 的大页面映射?

0 投票
2 回答
2561 浏览

dpdk - DPDK application cannot work for no free hugepage

I am building the Helloworld application in DPDK. I get an error that says No free hugepages reported in hugepages-1048567.

(1) I build the DPDK-18.11 using RTE_TARGET=x86_64-linuxapp-native-gcc.

(2) I run usertools/dpdk-setup.sh, run [15] (build DPDK).

(3) run [22], allocate hugepages. I set 1024 hugepages.

(4) run [18], insert igb_uio module.

(5) run [24], bind my NIC (e1000e) to igb_uio module.

Then, I go to examples/helloworld/, run make to build the app. When I run ./build/app/helloworld -l 0-1 -n 4, I get the following nofication (No free hugepage):

I have already allocated hugepages in the setup script, and get the following output:

Furthermore, I find e1000e cannot bind to VFIO, so I only use igb_uio driver.

My host profile is : CPU:

Memory:

The things go worse when I run pktgen-3.6.0. I get the following error:

Could you share me some idea? Thank you for your time.

0 投票
1 回答
623 浏览

linux-kernel - 在内核模块中分配大页面

我正在寻找一种在内核模块中分配大页面(2M 或 1G)的方法(我使用的是内核版本 4.15.0)。

在用户空间中,我可以挂载hugetlbfs文件系统,然后使用mmap(参见,例如,https ://blog.kevinhu.me/2018/07/01/01-Linux-Hugepages/ )分配大页面。在内核空间中是否有类似的方法可以做到这一点?

我知道我可以先在用户空间中分配它们,然后使用 将它们传递给内核get_user_pages,如Sequential access to hugepages in kernel driver 中所述。但是,我正在寻找一种更直接的方式来分配它们,因为我只需要在内核空间中使用它们。

0 投票
1 回答
450 浏览

memory - 内存分配太慢

我在 AWS(m4.15xlargem5.12xlarge实例)上运行一些内存密集型服务,并注意到在某些条件下(通常在某个内存限制之后)分配额外内存所需的时间显着增加(高达 50 倍)。

当它发生时,htop在内核模式下显示 100%(红色),perf top看起来像这样:

在正常操作期间,它看起来像这样:

我不完全明白是什么触发了这种行为。有时它很难重现,但有时它一直在发生。

我有一个假设,这与 AWS 虚拟化有关(因此问题是间歇性的,我将其归因于“邻居”上发生的事情)(请参阅下面的更新)。我也无法在m5.metal机器上重现该问题。

我能够使用一个简单的 C 程序来重现该问题,该程序在循环中分配和初始化内存:

这次我只能在接近内存限制的情况下解决问题,但即使在 20Gb(可用 186Gb 中)也能解决问题。

如果有人可以对正在发生的事情以及如何摆脱这种影响进行遮掩,我将不胜感激。

更新:

我已经更多地解决了这个问题,目前指责透明大页面支持 (THP) 恰好被启用 ( always) onm5.12xlarge和禁用 ( madvise) on m5.metal。在切换机器上的设置后,我能够解决问题m5.metal并且问题消失了m5.12xlarge

0 投票
1 回答
860 浏览

c - 使物理地址区域中的虚拟地址连续如何提高性能?

最近我在 dpdk(dpdk.org) 中阅读有关大页面的代码。我看到代码故意使虚拟地址在物理地址区域中连续。具体来说,它首先检查hugepages中是否存在物理上连续的区域,并将物理上的连续区域映射到连续的虚拟地址中。这如何提高性能?

源代码说:

为了保留大量连续的内存,我们使用了 linux 的 hugepage 特性。为此,我们需要安装 hugetlbfs。此代码将在此目录中创建许多文件(每页一个)并将它们映射到虚拟内存中。对于每个页面,我们将检索其物理地址并重新映射它,以便拥有一个虚拟连续区域和一个物理连续区域。

为什么需要重新映射?

0 投票
0 回答
297 浏览

huge-pages - mmap 分配的大页面比 posix_memalign 慢

我使用正常malloc的 andposix_memalignmmap测试性能。我的测试结果是: malloc耗时约29.7s,posix_memalign耗时约23.5s,mmapmalloc. 两者都posix_memalign使用mmap大页面。为什么一个有明显改善,另一个没有?我是否mmap以错误的方式使用?我不为 mmap 做 bzero 因为手册页说“它的内容被初始化为零”。

0 投票
0 回答
216 浏览

cassandra - Cassandra 大页面清单

在阅读了它之后,我决定尝试为 cassandra 启用大页面。然而,在设置了一些东西之后,cassandra 根本没有启动。我怀疑我错过了一些实际允许 cassandra 使用大页面所必需的重要设置,但我不确定是什么。

具体来说,我做了:

112 是 cassandra 组 ID,并在 cassandra-env.sh 中添加了以下内容:

我在 debian 拉伸上使用 cassandra 3.11.3。

我正在阅读以下文档:

注意:虽然 /var/log/cassandra 中没有任何内容,但我在 /var/lib/cassandra/hs_err_1557985546.log 中发现了以下内容:

因此,问题似乎在于它没有使用 HugePages 并且没有足够的非巨大内存。但为什么?

0 投票
0 回答
88 浏览

linux - 如何将 HugePages 与 pmem 分配一起使用?

在我的 Ubuntu 18.04 Intel 系统中,有 356gb 的 DDR。在这个内存中,300gb 是使用 pmem 机制预先分配的(因为我们有一个外部硬件向我们发送 10gb 的连续数据块)。我们以完全随机的方式访问此内存。

我们在访问此内存时目睹了内存 tpt 下降,并且我们了解到对 TLB 的许多访问/更新导致性能下降。

出于这个原因,我们试图用大页面来映射我们的 pmem,但目前没有成功。

有没有人有使用 pmem 处理大页面的经验?也许我们的场景有其他解决方案?

0 投票
1 回答
392 浏览

c - TLB、CPUID 和大页面?

如果我将 64MB 的 2MB 大页面挂载到 /mnt/huge2mb,这些页面使用哪些 TLB 条目?我mmap()在我的 C 程序中编辑了它们。

cpuid的输出:

我相信那些挂载的 2MB 大页面属于数据,因此它们使用数据 TLB 条目。

但是,数据 TLB 条目用于 1G 和 4K 页面。

那么,那些 2MB 的大页面使用了哪些 TLB 条目?L2 TLB 条目?如果是,什么是 L2 TLB?数据和指令都适用吗?如果是,那么 4K 页面的数据存在重叠——数据 TLB 和 L2 TLB。那么 4K 页面的额外 64 个条目的目的是什么?

谢谢!

0 投票
1 回答
299 浏览

kubernetes - mlock k8s pod 中的一个大页面返回 ENOMEM

我在具有 SYS_ADMIN 功能的 k8s pod 容器中运行一个程序。该程序分配了 2 MB 的大页面,它成功了。然后在该内存上调用 mlock() ,但失败了。

我查看了 ENOMEM 的手册页,没有一个原因可以解释这个问题。

我尝试在主机上运行程序,工作正常。

我尝试使用具有相同图像的 SYS_ADMIN 在 docker 容器上运行该程序。

我检查了 OCI config.json 文件中直接 docker 案例与下面显示的 k8s 案例之间的区别,我没有看到任何有趣的东西..

版本

以下 yaml 文件在 /tmp/test 中使用了测试程序

重现步骤:

测试程序