0
点赞
收藏
分享

微信扫一扫

Step-DPO 论文——数学大语言模型理解

image.png​​

 本文分享至飞腾开发者平台《飞腾腾云S2500 Nginx单机环回测试性能调优方法》

1 背景介绍

1.1 Nginx 简介

  Nginx是一个高性能HTTP和反向代理服务器,由俄罗斯程序员伊戈尔·赛索耶夫开发。Nginx 可以在大多数UNIX Linux OS 上编译运行,并有Windows移植版。

  Nginx特点是占有内存少,并发能力强,稳定性高等优势,并且依靠并发能力强,丰富的模块库以及友好灵活的配置而闻名。在Linux操作系统下,Nginx使用epoll事件模型使得在Linux操作系统下效率相当高。

  Nginx简介的详细内容可参考:https://baike.baidu.com/item/nginx/3817705?fr=aladdin

1.2 未优化前性能

  测试环境:飞腾腾云S2500 2路服务器

  测试方法:在飞腾腾云S2500环回访问本地nginx服务

  未优化前的nginx(日志写入硬盘)性能:16-17w req/s。

  未优化前的nginx(日志写入内存)性能:21-23w req/s。

  未优化前的nginx(不写日志情况)性能:24-25w req/s。

2 问题分析

2.1 性能影响因素分析

image.png

2.2 主要的优化方向

image.png

3 修改内核协议栈参数

3.1 优化措施

  通过修改一些内核参数:

image.png

  主要手段:通过调整以上参数的大小,以此来提高tcp连接时的带宽和时延,从而提升服务性能。

调优项目作用
net.ipv4.tcp_mem确定 TCP 栈应该如何反映内存使用
net.ipv4.tcp_rmemTCP接收缓冲区大小
net.ipv4.tcp_wmemTCP发送缓冲区大小
net.core.somamaxconn表示socket监听的backlog(监听队列)上限
net.ipv4.tcp_syn_retries发起TCP SYN连接超时重传的次数
net.ipv4.tcp_max_orphans所能处理不属于任何进程的TCPsockets最大数

3.2 测试结论

  结论:经测试验证,以上优化措施均未见明显的性能提升,距离目标300000 req/s相距甚远。

4 Nginx主要的优化工作

4.1 调优工作

  Nginx 调优项目:

image.png

  以上调优项目对应的调试手段见下表所示:

nginx 参数作用建议
log记录nginx 日志关闭
nginx worker processesnginx 进程数根据打开日志与否调整processes大小,日志开启,建议设为16进程,日志关闭,则越大越好。
tcp_nopush_on避免网络拥塞打开
tcp_nodelay_off避免网络拥塞tcp_nodelay off
sendfile on文件高效传输模式打开,并配合tcp_nopush使用
open file cache调整文件指定缓存功能的开关打开,并合理指定大小,建议max至少102400
reset time out connnginx关闭不响应的客户端连接开启此功能

  以上的调优手段,着重讲下sendfile 与open file cache,此两项的配置对性能提升最为明显:

  1、sendfile:

  sendfile实际上是Linux2.0+以后的推出的一个系统调用,web服务器可以通过调整自身的配置来决定是否利用sendfile这个系统调用。
  1)先来看一下不用 sendfile的传统网络传输过程:

image.png

  上面4个步骤有4次上下文切换,有4次拷贝,我们发现如果能减少切换次数和拷贝次数将会有效提升性能。

  2)使用sendfile(socket,file, len)的IO过程:

image.png

  sendFile 整个过程只有两次上下文切换和两次 DMA 拷贝,很重要的一点是这里完全不需要CPU 来进行拷贝了,所以才叫做零拷贝,这里的拷贝指的就是操作系统的层面。
  以上关于sendfile的内容可以参考:https://blog.csdn.net/YL3126/article/details/117468640。

  2、open_file_cache max=102400 inactive=20s:

  Nginx 的 open_file_cache 相关配置可以缓存静态文件的元信息,在这些静态文件被频繁访问时可以显著提升性能。缓存了文件句柄就意味着不用每次都close一个文件再open一个文件,减少了系统调用的操作。
  上表中的调优手段,可以通过更改Nginx的配置文件nginx.conf 来实现。

4.2 测试记录

4.2.1 关闭 Ngnix日志功能测试

  1、worker_processes==16

  绑核测试,在飞腾腾云S2500服务器本地输入命令,该命令如下所示:

taskset -c 32-63 weighttp -n 3000000 -c 100 -t 50 -k <http://11.1.1.1:80>
测试次数结果(req/s)
1285713
2282235
3286919
4285477
5289397
平均值285948

  不绑核测试,在飞腾腾云S2500 服务器本地输入命令,该命令如下所示:

weighttp -n 3000000 -c 100 -t 50 -k <http://11.1.1.1:80>
测试次数结果(req/s)
1248677
2279867
3290159
4270982
5283741
平均值274687.4

  2、worker_processes==22

  绑核测试:在飞腾腾云S2500服务器本地输入命令,该命令如下所示:

taskset -c 32-63 weighttp -n 3000000 -c 100 -t 50 -k http://11.1.1.1:80
测试次数结果(req/s)
1354322
2343963
3346928
4349629
5342861
平均值347540

  不绑核测试:在飞腾腾云S2500服务器本地输入命令,该命令如下所示:

weighttp -n 3000000 -c 100 -t 50 -k http://11.1.1.1:80
测试次数结果(req/s)
1300276
2285604
3219688
4283422
5295507
平均值276899
4.2.2 打开Ngnix日志功能测试

4.2.2.1 日志写入内存

  1、worker_processes==16

  绑核测试,在飞腾腾云S2500服务器本地输入命令,该命令如下所示:

taskset -c 32-63 weighttp -n 3000000 -c 100 -t 50 -k <http://11.1.1.1:80>
测试次数结果(req/s)
1274568
2278908
3283300
4274235
5277759
平均值277754

  不绑核测试,在飞腾腾云S2500服务器本地输入命令,该命令如下所示:

weighttp -n 3000000 -c 100 -t 50 -k http://11.1.1.1:80
测试次数结果(req/s)
1277621
2258456
3260107
4252588
5253443
平均值260443

  2、worker_processes==22

  绑核测试,在飞腾腾云S2500服务器本地输入命令,该命令如下所示:

taskset -c 32-63 weighttp -n 3000000 -c 100 -t 50 -k http://11.1.1.1:80
测试次数结果(req/s)
1334128
2323585
3328500
4329572
5329261
平均值329009

  不绑核测试,在飞腾腾云S2500服务器本地输入命令,该命令如下所示:

weighttp -n 3000000 -c 100 -t 50 -k http://11.1.1.1:80
测试次数结果(req/s)
1282196
2300277
3259707
4198777
5247318
平均值257655

4.2.2.2 日志写入硬盘

  性能测试时,通过perf查看热点函数,在worker_processes大于16时,随worker_processes不断增大,热点函数”osq_lock”占比逐渐增大,吞吐量基本没有提升,每个进程还都满负载,多余的CPU性能都被osq_lock给消耗了。
  综上,日志写在硬盘的情况下,选择16进程,性能最佳。

  测试记录:
  绑核测试,在飞腾腾云S2500服务器本地输入命令,该命令如下所示:

taskset -c 32-63 weighttp -n 3000000 -c 100 -t 50 -k http://11.1.1.1:80
次数结果(req/s)
1266764
2269377
3264932
4267018
5268114
平均值267241

  不绑核测试,在飞腾腾云S2500服务器本地输入命令,该命令如下所示:

weighttp -n 3000000 -c 100 -t 50 -k http://11.1.1.1:80
测试次数结果(req/s)
1240303
2254572
3266540
4229249
5242094
平均值246551

5 结论

  经过优化后的具体测试结果见下表:

不写日志
绑核不绑核
16 processes285948274687
22 processes347540276899
写日志(内存)
绑核不绑核
16 processes277754260443
22 processes329009257655
写日志(硬盘)
绑核不绑核
16 processes267241246551

  优化前后的(最优状态下)性能对比图:

image.png

  综上所述:

  1、优化前后对比,性能提升近50%。

  2、nginx不写日志时,性能明显高于写日志时,且不写日志时,随着进程数目增加,性能会越高。日志写入内存时,性能高于写入硬盘。同等条件下,weighttp绑核的性能要明显高于不绑核的性能,且weighttp不绑核时的性能波动很大。

推荐阅读

  • 飞腾平台虚拟机组播性能调优指南
  • SPECweb2009调优指南

欢迎广大开发者来飞腾开发者平台获取更多前沿技术文档及资料

如开发者在使用飞腾产品有任何问题可通过在线工单联系我们


举报

相关推荐

0 条评论