龙空技术网

「干货」飞腾平台多路并发调优经验

湖南长城科技 103

前言:

现在你们对“飞腾2000架构安装win10”都比较关心,大家都想要剖析一些“飞腾2000架构安装win10”的相关文章。那么小编同时在网络上收集了一些关于“飞腾2000架构安装win10””的相关资讯,希望你们能喜欢,我们快快来学习一下吧!

一.情况简介

最近在帮助一个厂家进行应用适配的时候,遇到了多路并发的场景,今天就分享一下FT2000+平台下的多路并发调优的经历。

应用基本介绍:应用是打开本地的音频文件进行识别处理,没有走网络。应用可以同时跑多个进程进行数据处理,使用time命令统计各个音频文件识别处理的时间。正常的结果是单个音频文件的识别处理时间在300ms内。

出现的问题:跑4个进程同时处理,结果都在20多ms左右;但是加到6个进程来处理的时候,最大一个识别处理结果到了54000+ms,严重影响应用性能。

现状:64C128G长城擎天DF720服务器,cpu和内存都只跑了不到一半(6路和8路的时候都只跑到一半左右)

调优方向:

1.修改limits.conf,调整最大打开文件数

2.跟cpu的numa特性有关系。

二.开始调优:

2.1修改最大文件打开数

使用ulimit -a命令,查看最大打开文件数是1024,修改/etc/security/limits.conf文件,在最后加上:

* soft nofile 65535

* hard nofile 65535

修改后重启机器,使用ulimit -a查看修改是否生效:

确认生效后,重新跑应用,发现优化提升不明显。

2.2 numa相关设置

查看系统numa的节点情况:

numactl --hardware(需要安装numactl)

可以看到我们长城飞腾2000Plus的服务器,有8个numa节点。

2.2.1关掉numa测试

先把numa关掉,修改/boot/efi/EFI/kylin/grub.cfg,在kenerl行末尾加上numa=off,重启机器,查看系统numa的节点情况:

可以看到只有一个numa节点了。重新跑应用,发现并无提升,后咨询飞腾的同事,ft2000+的numa关闭,需要用uefi固件或者参数编译到内核里。

2.2.2绑定numa节点的cpu

根据之前查到的各numa节点对应的cpu号,把各路进程绑定到对应的cpu号:

重新跑应用起6路(6进程):

taskset -cp 56-63进程1pid

taskset -cp 48-55进程2pid

taskset -cp 40-47进程3pid

taskset -cp 32-39进程4pid

taskset -cp 24-31进程5pid

taskset -cp 16-23进程6pid

测试结果出来每个文件识别处理的结果都是在20ms左右。

然而继续加到7路,8路,有些文件的处理结果就超过1000ms了,没有达标,使用[numastat]可以看到miss率很高(miss代表内存访问分配到其他cpu节点上)。

2.2.3绑定numa节点和内存节点

鉴于上个测试结果。这次我们把进程和numa节点和对应的内存节点都绑定上,使用命令:

numactl --cpunodebind=0 --membind=0命令1(进程1)

numactl --cpunodebind=1 --membind=1命令2(进程2)

numactl --cpunodebind=2 --membind=2命令3(进程3)

numactl --cpunodebind=3 --membind=3命令4(进程4)

numactl --cpunodebind=4 --membind=4命令5(进程5)

numactl --cpunodebind=5 --membind=5命令6(进程6)

numactl --cpunodebind=6 --membind=6命令7(进程7)

numactl --cpunodebind=7 --membind=7命令8(进程8)

最后的结果都在300ms以内,实现了优化。

三.总结分析

我们的飞腾2000+服务器默认是开启着numa的(8节点),每个numa节点都有自己的内存节点,访问其他节点的内存,需要通过inter-connect通道访问,响应时间较之本地访问会慢一些。

我们做了写入内存测试和读取内存测试,写入内存使用[numactl --cpunodebind=0 --membind=y dd if=/dev/zero of=/dev/shm/A bs=1M count=1024]命令测试用节点0的cpu往其他节点上写数据的时间(y代表内存节点号):

写入内存测试

membind0

membind1

membind2

membind3

membind6

节点间距离(node distances)

10

20

40

30

50

测试结果(速度)

3.8GB/s

3.7GB/s

3.4GB/s

3.5GB/s

3.1GB/s

读取内存使用[numactl --cpunodebind=0 --membind=y dd if=/dev/shm/A of=/dev/null bs=1M count=1024]命令测试用节点0的cpu往其他节点上写数据的时间(y代表内存节点号):

读取内存测试

membind0

membind1

membind2

membind3

membind6

节点间距离(node distances)

10

20

40

30

50

测试结果(速度)

3.9GB/s

3.7GB/s

2.8GB/s

3.5GB/s

3.1GB/s

可以看到跨节点读写内存的时候,本节点的内存读写速度明显比跨节点快很多。我们的应用可以根据这种情况来指定numa节点和内存节点来进行调优。

更多干货尽在【中国信创服务社区】,点击文末左下角“了解更多”即可进入

标签: #飞腾2000架构安装win10