• spdk(一)----为什么要使用spdk?


    为什么要使用spdk?

           主要原因就是:nvme已经快到一定程度了,很多东西,尤其是软件已经赶不上他了,此时软件反而成为了系统IO的瓶颈。

           假如将24块每秒传输几个G的硬盘放在一起,也就是说这时的问题也就是放大了24倍。

           对于一个8通道的内存而言,理论带宽就是200GB/s,实际应用中也就是能达到100~150GB/S。

           在24块nvme硬盘组成的磁盘阵列中,它的理论速度也能达到100GB/S,而这些都是理论数据,在实际应用中都是不可能达到的。

           我们在实际的读写中,光是用来搬运来来往往的数据,就要占用到内存带宽的一半,这就太没有道理了。就算是Linux kernel,这么多的数据处理起来也会很有困难。

            一般来说读写数据的运作方式是这样的:OS kernel请求一组数据,硬盘回应“嗯,没问题”,但是NAND闪存挺慢的,所以需要一点时间将数据载入到硬盘的缓存中,准备好就会告诉OS kernel。假设现在已经准备好了,就会给CPU发送一个中断信号,“嘿数据已经准备好了,没问题了可以来取那组数据了”。但是在这里会遇到一个问题:如果这个中断信号在去到目标CPU核心的过程中,CPU核心正在忙着处理其他事情,或者暂时处于睡眠状态,或者被重新分配到其他任务上的话(这种情况在多核心CPU中是很常见的),如果有以上情况发生的话,那么这个中断信号永远到不了,那么CPU永远不会去取那组数据。这样的结果就导致整个系统的读取调用过程截然而止。也就是说当CPU在执行大量的计算任务时或者很繁忙的时候,那么读写任务可能受到严重的影响。

           也就是说,使用nvme磁盘的系统,在CPU高负载的情况下可能会出现问题。

           对此业界给出了一个解决方案,对于超高速设备(比如这里的nvme磁盘,基于RAM的缓存盘)以一种叫做“轮询”的模式运作。这是一种完全不同的模式。说人话就是:系统内核假定设备非常快,快到“不用问准备好了没,问就是准备好了”。(设备速度很快,马上就可以把数据准备好)。

           当然如果在比较慢的硬盘(比如机械硬盘)上这么搞会带来很大的性能损耗。因为系统会不停的问“嘿,准备好了吗?嘿,准备好了吗?”,这样一来,IO时延变高了,同时读写带宽也会受影响。但是对于nvme盘,特别是前面提到的超快速的存储设备,这么做是值得的。

           而spdk的存在就是提供一种以轮询的方式来访问硬盘的方式,在高速设备上用于取代中断的访问方式。

    原文链接:https://www.cnblogs.com/powerrailgun/p/12389660.html

    更多DPDK学习资料有需要的可以自行添加进入学习交流君 羊 793599096 免费获取,或自行报名学习,免费订阅,永久学习,关注我持续更新哦!!!

    学习地址:http://ke.qq.com/course/5066203?flowToken=1043717

    更多DPDK学习资料有需要的可以自行添加进入学习交流君 羊 793599096 免费获取,或自行报名学习,免费订阅,永久学习,关注我持续更新哦!!!

    学习地址:http://ke.qq.com/course/5066203?flowToken=1043717

  • 相关阅读:
    【工具】2102- es-toolkit:一个现代 JavaScript 工具包,体积更小,内置 TypeScript 支持...
    Spring Security loadUserByUsername传递多个参数
    【Python百日进阶-WEB开发-冲進Flask】Day181 - Flask简单流程
    优雅的记录日志,拒绝打印模糊信息导致bug定位难
    FPGA project : IIC_wr_eeprom
    【Android音视频开发】音频编码原理
    安卓逆向入门级学习————自用
    vue3 setup语法糖下的定时器的使用与销毁
    mybatis的动态sql知识总结
    7. RxJava总结
  • 原文地址:https://blog.csdn.net/lingshengxiyou/article/details/126431905