SSL加速卡的使用,对HTTPS 七层负载机的性能提升

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/toontong/article/details/79193309

SSL加速卡使用,编译驱动

一、编译驱动

1. 厂家提供2个SDK包,SDK与Drive,要自行编译。

DX_SDK_v2.2.2L_PUBLIC_20151225.tar.gz
DX_SDK_v2.2.2L_EXAR_20151225.tar.gz
要先解压PUBIBC包,make and make install后,
在同样的目录解压EXAR包,再make and make install。
原因是2个包都有Makefile,而exar要使用public编译出来的.o文件与头文件进行编译、链接。

2.依赖内核头文件与库:

yum install kernel-devel.x86_64 -y
# 先删除无用链接
rm /usr/lib/modules/3.10.0-514.el7.x86_64/build -f 
# 再建一个软链接文件,注意此时前后版本号是不一样。
ln -s /usr/src/kernels/3.10.0-693.11.6.el7.x86_64 /usr/lib/modules/3.10.0-514.el7.x86_64/build
tar -xf DX_SDK_v2.2.2L_EXAR_20151225.tar.gz
make && make install
tar -xf DX_SDK_v2.2.2L_PUBLIC_20151225.tar.gz
make && make install
# install 后配置文件只是的个ln软链,最好是copy到etc目录下:
rm -f /etc/exar/driver.cfg.xml
sudo cp -f driver.cfg.xml /etc/exar/driver.cfg.xml

由于上面提到kernel-devel包与实际运行中的内核版本不一样,需要update kernel并重启:

yum update kernel -y
# reboot 注释,防你copy直接粘帖运行了。

重启后,在SDK的编译目录下,直接 sudo sh Load # Load文件是在编译包中的厂家加裁脚本

lsmod | grep dre_drv
# 或 modinfo dre_drv.ko查看是否加载成功

3. 编译openssl驱动–厂家提供

mkdir dx_openssl_engine ; cd dx_openssl-engine
tar -xf openssl_engine-2.0.0-20140516.tar.gz  # 厂家提供的包

#修改Makefile中几个目录变量:
   OPENSSL_INCLUDE_PATH := /usr/include/openssl/
   OPENSSL_LIB_PATH := /usr/lib64/openssl/engines/
   OPENSSL_DYN_ENGINE_PATH := /usr/lib64/openssl/engines/
   
#由于我的系统使用的正好是openssl-1.0.2k版本,所以可以修改为系统目录。
#如果是下载源码编译,使用记得使用shared选项编译:
     ./config shared --prefix=/usr/local/openssl-1.0.0k
# 再修改Makefile中变量路径。

结果会编译出 eng_dx.so 这样一个动态库,会安装到/usr/lib64/openssl/engines/目录。

二. 几个关键的nginx配置

 # 指定使用芯片厂家的引擎 eng_dx
ssl_engine eng_dx;

ssl_prefer_server_ciphers on;
#设置协商加密算法时,优先使用我们服务端的加密套件,而不是客户端浏览器的加密套件。
#此值默认是off话,客户端会使用SSL/TLS Protocol: TLSv1.2,ECDHE-RSA-AES256-GCM-SHA384,2048,256

# 列出服务端支持的握手加密套件优先级:
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384;
#
# 一定要注意这个ssl_ciphers值的配置,配置不当,会引起浏览器报错[ERR_SPDY_INADEQUATE_TRANSPORT_SECURITY]
# 由于加速卡说明书中,是对AES128的性能最高的,这里我稍把AES128相关的算法顺序调整在前面。

关于ssl_ciphers的配置,参考mozillacloudflare

配置以上3个值 ,就能利用加速卡,我们使用的型号DX2040, 效率是能降低CPU 10倍的使用率。
HTTPS QPS=6k, CPU使用率对比

上图是一台32核服务器,当HTTPS QPS=6k时, CPU使用率对比,红框CPU接近60%,蓝框使用了加速卡后,CPU降到6~7%之间。nginx只是简单的proxy_pass到后端的http服务。

读到这里,读者有一个疑问,如果不使用加速卡,光配置:

    ssl_protocols       TLSv1.2 TLSv1.1 TLSv1 SSLv3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS:!DH:!EDH;
    

会否同样能降低CPU?
实际就是 把 ssl_engine eng_dx; 注释就可以测出结果 。
按我注释过的测试结果 ,是不能降CPU。

三、机器重启后,重新加载驱动的坑

官方的驱动DX_SDK_v2.2.2L_EXAR_20151225.tar.gz,解压,编译(make),安装 (make instll),3个常规步骤,外加一个 解压 出来 Load脚本,即加载驱动 。
但,在系统重启后要先Load 再make install; 原因可能是Makefile中定义对install行为会inmod 模块到内核。
需要如下执行:
sh Load # 这个Load
make install

展开阅读全文

没有更多推荐了,返回首页