在Nginx应用场景使用HTTPress对vKAE进行性能测试
针对Nginx应用场景,在客户端上,使用HTTPress工具对vKAE进行详细的性能测试,涵盖原生Nginx的同步与异步模式,以及使能vKAE结合Nginx的同步与异步模式,并对测试结果进行详细分析,得出结论与应用建议。
测试命令介绍
在虚拟机中执行两组HTTPress性能测试,分别针对原生Nginx的同步和异步模式,以及使能vKAE结合Nginx的同步与异步模式。
在客户端上,执行以下操作:使用HTTPress对HTTPS长连接和HTTPS短连接进行压力测试,测试命令如下:
- HTTPS长连接。
httpress -n 2000000 -c 200 -t 10 -k https://服务端IP地址:服务端端口号/index${nodeIndexNum}.html
- HTTPS短连接。
httpress -n 20000 -c 200 -t 10 https://服务端IP地址:服务端端口号/index${nodeIndexNum}.html

- 命令中的-n、-t、-c和-k参数分别代表请求数、线程数、连接数和是否使用长连接。-n、-t和-c参数可以根据实际情况进行调整,以寻找RPS值最大的最优参数。
- ${nodeIndexNum}是一个变量,可以根据实际情况设置为指定测试的页面编号。
- 在客户端下,由于HTTP不使用加解密算法,HTTPS在HTTP基础上使用SSL/TLS算法,其中SSL/TLS握手过程包含加解密相关计算,非对称加解密计算复杂耗时,HPRE设备只对RSA非对称加解密算法进行加速,即使用vKAE硬件加速只对HTTPS长/短连接有效,因此在vKAE加速场景下仅对比HTTPS的测试结果。
在服务端上,执行以下操作:
- 以1个线程为例,在“/root/test/”目录下创建一个名为sync_nginx_1_worker.conf的Nginx配置文件。
vim sync_nginx_1_worker.conf
- 按“i”进入编辑模式,在文件中新增如下内容。
以下为使能KAE + 参数未调优过的Nginx同步模式的配置文件内容。
# For more information on configuration, see: # * Official English Documentation: http://nginx.org/en/docs/ # * Official Russian Documentation: http://nginx.org/ru/docs/ user root; worker_processes 1; worker_cpu_affinity 1 ; # error_log /var/log/nginx/error.log debug; error_log /var/log/nginx/error.log; pid /run/nginx.pid; # Load dynamic modules. See /usr/share/doc/nginx/README.dynamic. include /usr/share/nginx/modules/*.conf; events { worker_connections 1024; } http { log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; # access_log off; # access_log /var/log/nginx/access.log main; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 4096; include /usr/local/nginx/conf/mime.types; default_type application/octet-stream; # Load modular configuration files from the /etc/nginx/conf.d directory. # See http://nginx.org/en/docs/ngx_core_module.html#include # for more information. include /etc/nginx/conf.d/*.conf; server { listen 8080; listen [::]:8080; server_name _; root /usr/share/nginx/html; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } } # Settings for a TLS enabled server. # server { listen 8090 ssl http2 so_keepalive=off; listen [::]:8090 ssl http2 so_keepalive=off; #listen 8090 ssl http2 so_keepalive=off asynch; #listen [::]:8090 ssl http2 so_keepalive=off asynch; server_name _; # ssl_asynch on; ssl_certificate /usr/local/nginx/server_2048.crt; ssl_certificate_key /usr/local/nginx/server_2048.key; root /usr/share/nginx/html; ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4"; #ssl_ciphers "RSA-PSK-AES128-CBC-SHA256 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4"; # ssl_ciphers AES256-GCM-SHA384; ssl_prefer_server_ciphers on; # ssl_session_tickets off; error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } } }
- 该配置文件中,HTTP使用的端口号为8080,HTTPS使用的端口号为8090。
- worker_processes为服务端线程数,worker_cpu_affinity为NUMA亲和性,可根据需要设置服务端的线程数,同时对应改变NUMA亲和性部分。
- 如果要使用4个服务端线程,将“worker_processes”和“worker_cpu_affinity”参数修改为如下:
worker_processes 4; worker_cpu_affinity 1 10 100 1000;
- 如果要配置使能KAE+参数未调优过的Nginx异步模式的配置文件内容,请先创建一个名为async_nginx_x_worker.conf(x表示使用的线程个数)的配置文件,并将上述配置文件内容拷贝到async_nginx_x_worker.conf文件中,再分别将以下三行内容前面的#号删除:
#listen 8090 ssl http2 so_keepalive=off asynch; #listen [::]:8090 ssl http2 so_keepalive=off asynch; # ssl_asynch on;
最后在以下两行内容前面分别添加#号:
listen 8090 ssl http2 so_keepalive=off; listen [::]:8090 ssl http2 so_keepalive=off;
- 如果要使用参数调优过的Nginx配置文件,可以直接使用9中的配置文件。
- 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
- 在客户端上使用HTTPress对HTTPS短连接进行压力测试。以服务端分别使用1个线程和4个线程,客户端绑核数根据实际需要进行限制为例,在客户端上使用HTTPress对HTTPS短连接进行压力测试,测试命令如下:
- 使能KAE + Nginx同步 + 服务端使用1个线程。
- 服务端:
nginx -s stop || true; sleep 1; OPENSSL_CONF=/home/openssl.cnf /usr/share/nginx/sbin/nginx -c /root/test/sync_nginx_1_worker.conf; sleep 1
- 客户端:
taskset -c 64-254 httpress -c 64 -t 32 -n 64000 https://服务端IP地址:8090/index.html
- 服务端:
- 使能KAE + Nginx异步 + 服务端使用1个线程。
- 服务端:
nginx -s stop || true; sleep 1; OPENSSL_CONF=/home/openssl.cnf /usr/share/nginx/sbin/nginx -c /root/test/async_nginx_1_worker.conf; sleep 1
- 客户端:
taskset -c 64-254 httpress -c 64 -t 32 -n 64000 https://服务端IP地址:8090/index.html
- 服务端:
- 使能KAE + Nginx同步 + 服务端使用4个线程。
- 服务端:
nginx -s stop || true; sleep 1; OPENSSL_CONF=/home/openssl.cnf /usr/share/nginx/sbin/nginx -c /root/test/sync_nginx_4_worker.conf; sleep 1
- 客户端:
taskset -c 64-254 httpress -c 64 -t 32 -n 128000 https://服务端IP地址:8090/index.html
- 服务端:
- 使能KAE + Nginx异步+服务端使用4个线程。
- 服务端:
nginx -s stop || true; sleep 1; OPENSSL_CONF=/home/openssl.cnf /usr/share/nginx/sbin/nginx -c /root/test/async_nginx_4_worker.conf; sleep 1
- 客户端:
taskset -c 64-254 httpress -c 64 -t 32 -n 128000 https://服务端IP地址:8090/index.html
- 服务端:
- 不使能KAE + Nginx同步 + 服务端使用1个线程。
- 服务端:
nginx -s stop || true; sleep 1; /usr/share/nginx/sbin/nginx -c /root/test/sync_nginx_1_worker.conf; sleep 1
- 客户端:
taskset -c 64-254 httpress -c 64 -t 32 -n 64000 https://服务端IP地址:8090/index.html
- 服务端:
- 不使能KAE + Nginx异步 + 服务端使用1个线程。
- 服务端:
nginx -s stop || true; sleep 1; /usr/share/nginx/sbin/nginx -c /root/test/async_nginx_1_worker.conf; sleep 1
- 客户端:
taskset -c 64-254 httpress -c 64 -t 32 -n 64000 https://服务端IP地址:8090/index.html
- 服务端:
- 不使能KAE + Nginx同步 + 服务端使用4个线程。
- 服务端:
nginx -s stop || true; sleep 1; /usr/share/nginx/sbin/nginx -c /root/test/sync_nginx_4_worker.conf; sleep 1
- 客户端:
taskset -c 64-254 httpress -c 64 -t 32 -n 128000 https://服务端IP地址:8090/index.html
- 服务端:
- 不使能KAE + Nginx异步 + 服务端使用4个线程。
- 服务端:
nginx -s stop || true; sleep 1; /usr/share/nginx/sbin/nginx -c /root/test/async_nginx_4_worker.conf; sleep 1
- 客户端:
taskset -c 64-254 httpress -c 64 -t 32 -n 128000 https://服务端IP地址:8090/index.html
- 服务端:
- 使能KAE + Nginx同步 + 服务端使用1个线程。
测试结果与分析
以HTTPS短连接为例,在规格为8C16G虚拟机中,使用HTTPress工具进行压力测试得到的RPS结果如表1所示。
处理器型号 |
服务端线程数=1 |
服务端线程数=4 |
虚拟机规格 |
Nginx同步/异步 |
是否启用vKAE |
---|---|---|---|---|---|
鲲鹏920处理器 |
1367 |
5102 |
8C16G |
同步 |
是 |
鲲鹏920处理器 |
2246 |
7393 |
8C16G |
异步 |
是 |
鲲鹏920处理器 |
587 |
2255 |
8C16G |
同步 |
否 |
鲲鹏920处理器 |
584 |
2245 |
8C16G |
异步 |
否 |
在CPU利用率达到100%的情况下,得出以下结论:
- 对于8C16G规格的虚拟机,在不使能vKAE的情况下同步与异步性能几乎无差异;使能vKAE之后,在CPU达到性能瓶颈之前,vKAE异步性能优于同步,RPS相比同步提升40%。
- 在8C16G规格的虚拟机未达到CPU瓶颈时,同步的硬软比为226%,异步的硬软比为329%,异步性能提升优于同步。
结论与应用建议
对于8C16G规格的虚拟机:
- 在不使能vKAE时,Nginx的同步与异步模式在性能上差异不大;在使用vKAE进行硬件加速后,特别是在处理HTTPS请求时,异步模式表现出更优异的性能提升。因此,在需要高性能HTTPS服务的场景中,推荐采用vKAE结合Nginx的异步模式配置。
- Nginx配置文件的调优也是提升性能的关键因素之一。通过合理配置Nginx的worker_processes、worker_cpu_affinity等参数,可以进一步挖掘硬件的潜力,提升系统的整体性能。
父主题: 测试