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

c - 顺序访问内核驱动程序中的大页面

我正在使用由大页面支持的缓冲区的驱动程序,并且我发现大页面的顺序性存在一些问题。

mmap在用户空间中,程序使用系统调用分配由大页面支持的大缓冲区。然后通过ioctl调用将缓冲区传送给驱动程序。驱动程序使用该get_user_pages函数来获取该缓冲区的内存地址。

这适用于 1 GB(1 个大页面)的缓冲区大小。get_user_pages返回很多页面(HUGE_PAGE_SIZE / PAGE_SIZE),但它们都是连续的,所以没有问题。我只是抓取第一页的地址page_address并使用它。remap_pfn_range当另一个程序mmap在 char 设备上进行调用时,驱动程序还可以将该缓冲区映射回用户空间。

但是,当缓冲区由多个大页面支持时,事情会变得复杂。内核似乎可以返回一个由非顺序大页面支持的缓冲区。即,如果大页面池的布局是这样的

,可以通过保留 HP1 和 HP4 或 HP3 然后 HP2 来满足对大页面支持缓冲区的请求。这意味着当我get_user_pages在最后一种情况下获得页面时,页面 0 的地址实际上是页面 262.144 (下一个大页面的头部)地址之后的 1 GB。

有什么方法可以按顺序访问这些页面?我尝试重新排序地址以找到较低的地址,以便我可以使用整个缓冲区(例如,如果内核给了我一个由 HP3 支持的缓冲区,HP2 我使用 HP2 的一个作为基地址),但似乎会打乱数据在用户空间中(该重新排序缓冲区中的偏移量 0 可能是用户空间缓冲区中的偏移量 1GB)。

TL;DR:给定 >1 个无序大页,有没有办法在 Linux 内核驱动程序中按顺序访问它们?

顺便说一句,我正在使用具有 3.8.0-29-generic 内核的 Linux 机器。

0 投票
2 回答
2325 浏览

c++ - 确定通过 malloc() 进行的分配是否由大页面支持

我非常了解透明大页面的工作原理,并且任何分配,例如由大页面执行的分配,malloc都可能被大页面满足。

我想知道的是,在分配后是否可以进行任何检查(可能是启发式的)以确定内存是否由大页面支持。

0 投票
0 回答
1075 浏览

linux-kernel - 如何在内核和用户空间之间共享大页面

我知道如何在 linux 内核中获取普通页面并使用基于此代码的 mmap 与用户进程共享:http: //people.ee.ethz.ch/~arkeller/linux/multi/kernel_user_space_howto-8.html 现在我想要将其扩展为使用大页面(2M)。

将备份共享内存的文件放在hugetlbfs文件系统中就足够了吗?你也可以给我指一个关于使用大页面的教程吗?

到目前为止的进展: 我使用hugeadm启用了hugepages和透明hugepages,并添加了相应的grub配置。

stackoverflow 上的这篇文章说对 alloc_pages 使用以下参数

它不起作用,因为 /proc/meminfo 仍然说所有大页面都是免费的。

然后我变了

但发生了以下错误:

0 投票
2 回答
4654 浏览

memory-management - 通过 SYSFS 设置 nr_hugepages 时出错

我有 8G 的物理内存,Fedora20,并配置了内核参数,通过将以下参数传递给内核,在启动时分配两个 1G 的巨页:

HugeTLBFS 是自动挂载的:

重新启动后,一切看起来都很好,我看到内核已经分配了所需的页面:

如您所见,可用内存量应该允许我增加大页面的数量,但是我没有这样做:

或者

也减少页数失败。我究竟做错了什么?

0 投票
1 回答
183 浏览

performance - 建议 Prolog 处理器使用大页面

是否有任何 Prolog 实现支持使用大页面(每个内存页面 2MB/4MB)而不是普通的 4Kb 内存页面。

理想情况下,我想向解释器/编译器/运行时声明,对于某些特定应用程序,可以将 X 大页面用于各种堆/堆栈/暂存器内存。

当然,并非所有应用程序都可以从中受益,但我相信会有很多应用程序可以从中受益。毕竟,兆字节是新的千字节:)

0 投票
1 回答
3438 浏览

mysql - 大页面不适用于 mariadb

我们尝试为使用 galera 集群运行的 mariabdb 设置大页面。我们已经分配了足够高的大页面来容纳 innodb 缓冲区。

服务器配置文件

/etc/sysctl.conf

/etc/security/limits.conf

免费-m

mysqld.log 中的错误

cat /proc/meminfo |grep -i 巨大的

0 投票
1 回答
14509 浏览

c - 使用 mmap 和 madvise 处理大页面

我想在 Linux 机器正在使用的大页面上分配内存。我看到有两种方法可以做到这一点,使用mmapmadvise

也就是说,MAP_HUGETLB在调用中使用标志mmap-

还有那MADV_HUGEPAGE面旗帜madvise——

有人可以解释两者之间的区别吗?

0 投票
1 回答
285 浏览

memory-management - CentOs7:HugePages_Rsvd 等于 18446744073709551615

为了DPDK的目的,我有一个使用大量大页面的应用程序。我在系统启动时分配页面,然后多次加载/卸载应用程序。重新加载后,程序无法再分配大页面。当我看时meminfo,我看到:

这将保持这种方式,并且不会让任何应用程序分配大页面,直到我重新启动机器。

任何想法?

0 投票
1 回答
1487 浏览

c - 如何转储页表?

我是 linux、C 和堆栈溢出的新手。我试图查看所有正在运行的进程的页表。为此,我正在使用dump_pagetable.c

我尝试通过正常编译先运行gcc dump_pagetables.c -o dump_pagetables.out。但它给了我错误:

  1. 如何让这段代码运行?
  2. 如何修改dump_pagetables.c以便我也可以看到大页面。
0 投票
1 回答
277 浏览

python - 由 Python 多处理分叉的空 Python 进程的私有内存

我正在通过 Python 多处理创建几个子进程,但这些子进程即使是空进程也使用大量堆私有内存。在启用了 THP(透明大页面)的 RHEL 上运行时,这种情况会变得更糟。

  • 空子进程的堆私有内存中有什么?
  • 在linux COW(写时复制)下,子进程不应该共享所有内存,因为它不创建/修改任何内存页面?或者子进程正在尝试修改/写入内存页面,那么它正在尝试修改/写入什么样的数据?
  • 还是因为喜欢python对象引用计数或其他原因?

这是一个简单的例子来演示这个:

输出:

子进程的 priv 内存(925696B,或堆中的 664KB)中有什么?

父进程堆内存:

006cc000-00be4000 rw-p 00000000 00:00 0 [堆]

大小:5216 KB

RSS:4120 KB

pss: 4120 KB

Shared_Dirty:0 kB

Private_Dirty:4120 kB

参考:4120 kB

匿名:4120 kB

AnonHugePages:0 kB

内核页面大小:4 kB

子进程堆内存:

006cc000-00be4000 rw-p 00000000 00:00 0 [堆]

大小:5216 KB

RSS:4396 KB

pss: 2530 KB

Shared_Dirty:3732 kB

Private_Dirty:664 kB

参考:676 kB

匿名:4396 kB

AnonHugePages:0 kB

内核页面大小:4 kB