如何解决如何为 DPDK 和 malloc 选择大页面大小?
我们开发了一个使用 DPDK 的 Linux 应用程序,并且还必须针对速度进行大量优化。
我们必须指定大页面供 DPDK 使用,也用于一般动态内存分配。对于后者,我们使用 libhugetlbfs 库。
sudo mount -t hugetlbfs none /mnt/hugetlbfs
我们在 bootcmd 行中指定大页面如下:
hugepagesz=1G hugepages=20 hugepages=0 default_hugepagesz=1G
我们使用的是 Centos 7,完整的启动 cmdline 是:
$ cat /proc/cmdline
BOOT_IMAGE=/vmlinuz-3.10.0-957.el7.x86_64 root=/dev/mapper/centos-root ro crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet hugepagesz=1G hugepages=20 default_hugepagesz=1G irqaffinity=0,1 isolcpus=4-23 nosoftlockup mce=ignore_ce idle=poll
这些值相当随意。有了这些值,我看到:
$ free -m
total used free shared buff/cache available
Mem: 47797 45041 2468 9 287 2393
Swap: 23999 0 23999
所以 2.468GB RAM 在 48GB 中是免费的。因此,大量内存被分配给大页面,我想减少这种情况。
我的问题是对他们来说什么是合理的价值观?
我对参数的解释感到困惑。我看到了:
$ cat /proc/meminfo
<snip>
HugePages_Total: 43
HugePages_Free: 43
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 1048576 kB
还有:
$ cat /sys/kernel/mm/hugepages/hugepages-1048576kB/free_hugepages
43
我的参数只指定了20页1G,为什么会报43页?
我想要一些指导方针:
- DPDK 可能需要巨大的页面大小/数量?
- malloc 可能需要巨大的页面大小/数量?
我知道这些高度依赖于应用程序,但一些指导方针会有所帮助。另外,我如何检测应用程序的大页面是否不够用?
附加信息:
$ cat /proc/mounts | grep huge
cgroup /sys/fs/cgroup/hugetlb cgroup rw,seclabel,nosuid,nodev,noexec,relatime,hugetlb 0 0
hugetlbfs /dev/hugepages hugetlbfs rw,relatime 0 0
3 月 4 日更新:
我的启动 cmdline 现在是:
$ cat /proc/cmdline
BOOT_IMAGE=/vmlinuz-3.10.0-957.el7.x86_64 root=/dev/mapper/centos-root ro crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet hugepagesz=1G hugepages=20 default_hugepagesz=1G irqaffinity=0,1 isolcpus=4-23 nosoftlockup mce=ignore_ce idle=poll transparent_hugepage=never
和透明大页面被禁用(我激活了自定义调谐配置文件):
$ cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
但我仍然看到 43 个大页面:
$ cat /sys/kernel/mm/hugepages/hugepages-1048576kB/free_hugepages
43
而我只在 cmdline 中指定了 20。这是为什么?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。