避免锁存器

避免锁存器,第1张

谈谈存储软件的无锁设计

面向磁盘的存储软件不需要考虑市场竞争锁带来的性能危害。磁盘存储软件的性能短板取决于磁盘,磁盘抖动会导致巨大的性能损失。所以传统存储软件的设计并不容易,尤其是CPU的应用效率。以前一个存储虚拟化手机软件的性能优化,在锁市场竞争层面做了很多改进。最终没有达到性能提升的实际效果。原因是存储虚拟化的性能缺点取决于磁盘,而不是CPU的应用效率。正因为如此,很多为磁盘设计的手机软件都采用了并行处理和单队列的解决方案,这也可以在一定程度上防止高并发带来的磁盘震动问题。

在面向NVMeSSD设计的存储软件中,这一切都在改变。与传统磁盘相比,NVMeSSD具有非常高的IO读写能力,不会出现传统磁盘的搜抖问题。为了充分发挥NVMeSSD的性能,在手机软硬件配置上都必须选择多队列技术,按照多队列的方法充分利用NVMeSSD的性能。一般NVMeSSD控制板可以呈现128个IO提交和完成队列,NVMe驱动会根据CPU核心数使用SSD控制板呈现的硬件配置能力来完成IO的高并发解决方案。在驱动端,可以将CPU与IO队列关联起来,从而达到高IO并发解决方案的实际效果。在这种情况下,业务流程必须使用线程同步、高并发的CPU,才能真正使用NVMeSSD的多队列。在很多情况下,业务流程的手机软件实体模型通常分为两部分:度量模块和数据内存。度量模块通常是线程同步和高并发的解决方案;内存是传统磁盘上的并行处理方式,在NVMeSSD上成为线程同步和高并发的解决方案。这种手机软件解决方案实体模型可以描述如下:



在手机软件的物理模型中,如果将计算和IO模块按照有效的资源划分一起划分,并且计算和IO模块在同一个上下文中,那么所有手机软件的效率可能会越来越高。但是很多时候测量和存储可以是两个手机软件控制模块,或者测量和服务器资源无法合理划分。在这种情况下,测量和存储过程之间的通信必须根据信息队列进行。这种信息交流可以抽象为运营商-客户实体模型。计算模块是 *** 作符;IO是客户。

运营商-客户必须进行全过程同步控制。如果用传统的加锁系统来完成“运营商-客户”队列,分布式存储的性能短板可能会迁移到加锁市场的竞争点。一方面,市场竞争使得CPU长时间等待或睡眠质量生产调度;另一方面,由于很多缓存文件是无效的,实际 *** 作大大降低了CPU的内存访问效率。总的来说,锁市场的竞争可能会降低CPU的应用效率,然后我们可以看到CPU的IPC指标值越来越低。

那么,在手机软件实体模型中,如何提高CPU效率,充分利用NVMeSSD的性能呢?这必须考虑到无锁设计的选择。在线程同步和高并发的情况下,进程间进行数据和信息交互是不可避免的。为了提高CPU的效率,可以使用无锁的方法来进行这种进程交互。无锁设计必须选择独特的优化算法和CPU给出的独特命令。常见的无锁优化算法包括CAS命令完成的无锁队列。这种优化算法必须有一个伪连接点,所以存在动态分配内存的问题。为了更好的防止动态内存分配,可以选择固定长度的无锁队列的无锁环,但是会存在队列深度固定的问题。在分布式存储的设计中,最好能防止运行内存资源在关键线上的频繁分配,此外还必须完成队列的深度可变性和IO总数的流量控制。因此,必须根据分布式存储的特点,设计无锁优化算法。最近,在一个新的存储项目中,我们创建了一个无锁 *** 作员-客户和无锁流量控制优化算法。选择这种优化算法后,我们可以发现IO的性能可以随CPU核的数量线性变化。CPU内核数量越多,IO性能越高。下图显示了检测到的特定性能与IO进程总数之间的关系:




在图中我们可以看到,当IO进程总数增加到28时,任意读性能没有明显变化,有一定的性能下降。在这个测试平台上,有28个CPUtops,按照超线程的方法实现了56个CPU核。从上面的测试结果来看,超线程对IO性能的贡献并不大。iothreads总数为8后,任意读取性能达到最高值。是因为后端开发的NVMeSSD磁盘的性能达到了最高值。

NVMe分布式存储设计遇到了CPU性能不足的问题。如何提高CPU的IO解决效率是高性能分布式存储设计中必须考虑的问题。无锁设计是提高CPU效率的合理途径,好的无锁设计必须和系统设计一起考虑。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/778357.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-03
下一篇 2022-05-03

发表评论

登录后才能评论

评论列表(0条)

保存