背景
在启动dpdk多进程实例的时候,发现两个进程相互切换启动时,有一个进程必报无法申请足够的连续的大页数,导致dpdk主进程启动失败。
需求:
解决dpdk无法申请足够的连续大页数,让两个进程切换时都可以正常启动。
解决方案:
1:首先整理一套干净的环境。即重启服务器即可,因为一般情况下配置的大页数据都是临时的,不具备永久性。如果需要配置永久性的大页,需要在启动项的grub里配置,具体博友们可以自行查阅资料。
2:查看大页的使用情况:
1 [root@localhost bin]# cat /proc/meminfo | grep Huge 2 AnonHugePages: 452608 kB 3 HugePages_Total: 0 4 HugePages_Free: 0 5 HugePages_Rsvd: 0 6 HugePages_Surp: 0 7 Hugepagesize: 2048 kB
3:启动一个进程后,发现其申请了1024个大页,与另一个进程申请的大页数量不一致。
进程2:
[root@localhost bin]# cat /proc/meminfo | grep Huge AnonHugePages: 1087488 kB HugePages_Total: 4096 HugePages_Free: 0 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB
进程1:
[root@localhost bin]# cat /proc/meminfo | grep Huge AnonHugePages: 1087488 kB HugePages_Total: 1024 HugePages_Free: 0 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB
所以为了避免HugePages_Surp字段有数据,分配的大页数量要求一样,操作首先将进程1的大页申请数量改成4096 这时候大页数据一致了,该字段就不会存在数据了。
接下来:就是在启动进程之前,手动或者自动对dpdk的大页等一些配置进行设置。这样进程在启动的时候只需要绑定网卡,挂载大页等就可以了。
博友么可能很疑惑:为什么会不一样,这是因为两个进程使用的dpdk版本不一样,如果两个进程使用的是同一个版本的话可能就不会存在这样的问题了。上述的操作就相当于大页相关的只分配一次,只要不重启,进程直接使用就可以了。