Intel异步模式Nginx中SSL握手失败与性能优化问题分析
asynch_mode_nginx 项目地址: https://gitcode.com/gh_mirrors/as/asynch_mode_nginx
问题背景
在使用Intel异步模式Nginx(asynch_mode_nginx)结合QAT加速卡进行HTTPS性能测试时,遇到了两个关键问题:
- 当Nginx的worker_processes数量超过QAT驱动配置的NumProcesses值时,会出现SSL握手失败
- 当worker_processes增加到4个以上时,性能提升出现瓶颈
问题现象分析
SSL握手失败问题
测试环境配置:
- Nginx worker_processes设置为32
- QAT驱动配置中NumProcesses设置为16
- 使用TLS 1.3协议和X25519椭圆曲线
错误日志显示:
ADF_UIO_PROXY: icp_adf_userProcessToStart: Failed to start SHIM
QAT HW initialization Failed.
SSL_do_handshake() failed (SSL: error:800B30C3:lib(128):qat_hw_init:icp sal userstart fail)
性能瓶颈问题
测试TLS 1.2 ECDHE-X25519-RSA时的性能表现:
- 1 worker: 5k CPS
- 2 workers: 10k CPS
- 3 workers: 15k CPS
- 4 workers: 17k CPS
- 8 workers: 17k CPS
技术原理分析
QAT资源分配机制
Intel QAT加速卡通过驱动配置文件(c6xx_dev0.conf)中的NumProcesses参数控制可同时使用的进程数量。当Nginx的worker进程数超过此限制时,额外的worker进程将无法成功初始化QAT硬件加速功能,导致SSL握手失败。
性能瓶颈原因
性能在worker_processes=4时达到瓶颈,主要可能原因包括:
- 设备资源争用:QAT加速卡的物理计算单元有限
- 进程亲和性设置:默认配置中LimitDevAccess=1限制了进程对设备的访问
- 中断处理瓶颈:过多的worker进程可能导致中断处理效率下降
解决方案
配置优化建议
-
匹配进程数量:
- 确保nginx.conf中的worker_processes不超过c6xx_dev0.conf中的NumProcesses值
- 或者增加NumProcesses值以支持更多worker进程
-
禁用进程亲和性限制: 修改c6xx_dev0.conf:
LimitDevAccess = 0
此设置允许用户空间进程使用所有可用的QAT逻辑实例,实现更好的负载均衡
-
性能调优建议:
- 对于4核以上系统,建议设置worker_processes等于CPU核心数
- 适当增加CyNumConcurrentSymRequests和CyNumConcurrentAsymRequests值
- 考虑使用SO_REUSEPORT套接字选项改善连接分配
最佳实践配置示例
QAT驱动配置(c6xx_dev0.conf)
[SHIM]
NumberCyInstances = 1
NumberDcInstances = 0
NumProcesses = 32 # 匹配或超过nginx worker数量
LimitDevAccess = 0 # 禁用亲和性限制
Nginx配置优化
worker_processes auto; # 自动匹配CPU核心数
worker_cpu_affinity auto;
ssl_engine {
use_engine qatengine;
qat_engine {
qat_offload_mode async;
qat_poll_mode heuristic;
}
}
总结
asynch_mode_nginx 项目地址: https://gitcode.com/gh_mirrors/as/asynch_mode_nginx
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考