1.numactl
cpu绑定,内存调优,例如:
# numactl --cpubind=0 --membind=0 python param
# numactl --cpubind=1 --membind=1 java param
即分配所有的node供其使用,这也是官方推荐的用法:
# numactl --interleave=all mongod -f /etc/mongod.conf
通过numastat命令可以查看numa状态
# numastat
node0 node1
numa_hit 1775216830 6808979012
numa_miss 4091495 494235148
numa_foreign 494235148 4091495
interleave_hit 52909 53004
local_node 1775205816 6808927908
other_node 4102509 494286252
other_node过高意味着需要重新规划numa.
https://blog.youkuaiyun.com/qccz123456/article/details/81979819
2.tcpdump
tcpdump --time-stamp-precision=nano -i enp95sofo host 10.128.6.5 and dst port \(320001 or 8019 \) or src port \(320001 or 8019 \) -vn -w ./cc.txt
3.DPDK网络收发加速
https://www.cnblogs.com/bakari/p/8404650.html
https://blog.youkuaiyun.com/jffyuhgv/article/details/83788260
包含了代码优化的介绍:https://www.cnblogs.com/qcloud1001/p/9585724.html
相关平台优化配置
硬件:
PCIe Gen3 x 8,x16.
网卡多队列收发包,支持收包RSS时分发进多个队列。
软件:
关闭CPU以及设备的省电模式;
让内存运行在所支持的最高频率上;
内核初始化时设置好大页;
增加内核启动参数,预先指定DPDK使用的逻辑核,不被操作系统调度;
DPDK参数配置:
收包队列长度,即每个收包队列分配的收包描述符个数,反映了在软件驱动程序读取所收到包之前最大的缓存包的能力。太长占用资源,太短容易丢包,默认长度为128.
发包队列长度,即每个发包队列分配的发包描述符个数,默认长度为512.
收包队列可释放描述符数量阈值,DPDK驱动程序并没有每次收包都更新收包队列尾部索引寄存器,而是在可释放的收包描述符数量达到一个阈值时更新,设置合理,可以减少没有必要的过多收包队列尾部索引寄存器的访问。默认值为32.
发包队列可释放描述符数量阈值,通过将回写标记设置在一定间隔的发包描述符上,减少不必要的回写次数,改善性能,默认为32.
发包描述符释放阈值,当用来重新配置的发包描述符数量少于阈值时,才会启动描述符和Mbuf释放动作,设置太大释放频繁,影响性能,设置太小可用描述符少,容易丢包,默认值为32.
4.cpu禁止降频
4.Solarflare
dkdp对应的另一种商业解决方案,交易所常用。