测来测去24:QAT使用大页hugepage

实践中,使用大页的QAT应用(尤其是Nginx)都比较稳定,已经用大页这个方法修复了很多生产环境中的疑难杂症,列举几个:

  • ioctl call for mem allocation failed, ret = -1
  • Lac_MemPoolCreate() - : Unable to allocate contiguous chunk of memory
  • qat_rsa_encrypt: internal error
  • qat_engine_init: pthread create failure error
  • usdm_drv: userMemAlloc:395 Unable to allocate memory slab or wrong alignment
  • 发生在Lac_MemPoolCreate()上的coredump等等

这些问题主要是由于QAT(usdm)需要连续的2MB slab内存,但是因为内存泄漏或者cache的原因导致没有这个资源。可以用cat /proc/buddyinfo查看。

用2MB大页的话因为是系统预先预留的,所以可以避免这个问题。

使用Hugepage的方法也很简单:

1
insmod ./usdm_drv.ko max_huge_pages=50 max_huge_pages_per_process=5

当然系统里面你需要先预留好足够的空闲大页。Linux怎么创建大页就不在这里介绍了。

Nginx跑起来之后可以通过cat /proc/meminfo查看Free的大页数量是不是比Total数量减少来确认使用了Hugepage。

关于那两个参数可以查看这个文档中第3.16节的内容。

这里主要说一些文档中没写的需要注意的点:

  • max_huge_pages的数量要大于max_huge_pages_per_process x Nginx worker process num x 2,乘以2是为了做Nginx reload时有足够的资源

  • 推荐的Async-Nginx用法是:insmod ./usdm_drv.ko max_huge_pages=2048 max_huge_pages_per_process=32,Nginx可以开到32个Process

© 2020 DecodeZ All Rights Reserved. 本站访客数人次 本站总访问量
Theme by hiero