为什么做动漫短视频网站,怎么推广自己做的网站,网站建设合同管辖,wordpress页面制作根笔者最近在SPDK优化上的工作#xff0c;下面总结了一些可以提升性能的优化点。 永远保持高队列深度 对于NVME SSD和RDMA这种基于completion queue/submittion queue 硬件机制的设备#xff0c;就应该根据硬件队列执行的特性#xff0c;始终保持队列中有物理队列深度这么多… 根笔者最近在SPDK优化上的工作下面总结了一些可以提升性能的优化点。 永远保持高队列深度 对于NVME SSD和RDMA这种基于completion queue/submittion queue 硬件机制的设备就应该根据硬件队列执行的特性始终保持队列中有物理队列深度这么多的请求在跑这样才可能榨干硬件性能。 数据结构 在IO路径上如果你需要缓存一段请求并且只只需要操作它的头和尾。如果是基于C 模板切记不要使用双向链表而应该用queue。 内存拷贝 大厂的很多基础库中期望的浅复制在有些情况下可能包括拷贝操作针对这个需要仔细筛查。特别是在IO路径上不同的函数参数传递的过程中尽量用指针传递。 内存分配 IO路径上频繁的内存分配会影响性能特别是对 spdk 提供的内存分配函数。一种思路是预估请求的多少预先分配好。 占时高的函数 读写程序跑起来的时候可以用perf 跟踪并记录到热点函数然后分析是否符合预期对于不符合预期的想办法把它的时间占比降下来。笔者通过perf 发现对一个std::map结构进行判空比较占据了超过5%的比例后来通过把这个判断放到其他条件之后性能得到一定改善。 锁 IO路径上尽量避免锁因为对于自旋锁它很耗CPU对于互斥锁它又很可能导致频繁的上下文切换。进而整体上影响性能。 去掉不必要的打印、睡眠、乘法、除法 把IO路径上乘、除、模等需要比较多CPU周期的操作改造成位的操作把冗余的日志和睡眠减少乃至都去掉也会对性能有提升。 内连函数、编译选项 -O 优化、热点函数汇编、使用高级指令 这个是常见的公共的优化方法常见于计算密集型的应用。 通过综合上面的措施笔者把4K粒度的读写从2~3万IOS优化到45万左右IOPS。当然在多个线程并发、队列深度不同的情况下是否还能保持如此高的性能还有待验证。