对于超低延迟SSD,IO调度器已经过时了吗?-part2

2024-01-24 02:12

本文主要是介绍对于超低延迟SSD,IO调度器已经过时了吗?-part2,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

为了进行这项研究,他们设计了一套严谨的实验方法论,包括在配备了高速Intel Optane P4801X Series NVMe SSD的服务器上执行一系列微观和宏观基准测试,同时监测系统能耗情况。这些测试涵盖了多种工作负载场景,从单一进程提交大量请求至多租户环境下的混合随机读写请求,旨在全面评估不同I/O调度器在实际应用场景中的表现。

图片

在研究中,实验工作负载的设计旨在全面评估I/O调度器对超低延迟存储设备性能和能源效率的影响。实验采用微观基准测试(Microbenchmarks)和宏观基准测试(Macrobenchmarks)两种方法来分析不同场景下的存储系统极限。

微观基准测试主要用于深入分析存储系统的极限性能,通过针对性地模拟单一或一组特定的I/O操作来测量系统的响应时间和吞吐量。例如,在本研究中,研究人员使用了Flexible IO Tester (fio) 工具生成了一系列针对不同I/O调度器的微基准工作负载,包括单租户和多租户场景下的随机读写请求,并且控制队列深度、IO类型和大小等因素,以精确衡量调度器对单个I/O请求处理的影响。

微观基准测试使用了灵活的IO测试工具fio版本3.31,并利用io_uring作为IO接口,该接口因其高效、异步IO能力及广泛应用而被选择。实验涉及四种不同的I/O调度器:none、mq-deadline、kyber和bfq,每个工作负载都针对这四种调度器重复执行并取五次测试结果的平均值以确保准确性。

图片

微观基准测试结果显示,实验通过使用单租户和多租户场景下的读、写以及混合(50%读取和50%写入)工作负载,对比了none、mq-deadline、kyber和bfq这四种Linux内核自带的I/O调度器在IOPS(每秒输入/输出操作次数)方面的表现。none模式表现出最佳的IOPS性能,这意味着采用I/O调度器并未带来预期的性能提升,反而可能降低了系统的吞吐能力。对于中位数延迟和尾部延迟等其他性能指标,研究也得出了相似的趋势。

图片

同时,通过测量完成100万次I/O操作时系统总能耗,结果显示无调度器none同样在能效方面具有优势或与其它调度器相当。在许多情况下,相比bfq调度器,无调度器none模式能够在每百万次I/O操作上节省大约200焦耳的能量消耗。这是因为无调度器可以更快地完成相同的工作负载,而非直接导致硬件执行阶段功耗降低,从而允许系统更早进入空闲状态,并有可能提前切换到更低功率的状态。

此外,研究还考虑了混合请求大小(4 KB和8 KB)、不同的I/O接口及读写比例的变化情况,但无论何种配置下,I/O调度器都没有为性能或能源效率提供任何明显益处。总的来说,基于Intel Optane SSD的实验数据表明,I/O调度器在ULL存储设备上的应用实际上削弱了系统性能并降低了能源效率。尽管如此,操作系统确保应用程序公平访问硬件资源的角色仍然重要,因此未来的研究需要进一步探讨I/O调度器在ULL存储环境中如何实现公平性以及其他技术如闪存基ULL SSD上的价值。

宏观基准测试则更侧重于实际应用环境中的表现。研究人员选择了RocksDB这一广泛使用的键值存储数据库作为真实应用场景,它特别适合模拟超低延迟环境下键值查找操作的优化,因此更能体现I/O调度器对ULL设备性能的影响。利用db_bench工具生成宏观基准测试数据,首先创建了一个接近饱和容量的RocksDB数据库,然后执行readrandom工作负载模拟大量数据库查询请求过程。除了记录数据库负载强度,研究者还通过Linux内核提供的`/proc/diskstats`接口精确测量来自设备层面的I/O请求数量和带宽,并结合Onset HOBO UX120-018 Data Logger监控整个实验过程中系统的能耗,以探究I/O调度器对系统能效的影响。

图片

研究者使用RocksDB键值存储作为宏观基准工具,进一步验证了I/O调度器对超低延迟(ULL)存储设备性能和能耗的影响。具体来说,他们运用db_bench工具生成随机读取键值查找的工作负载,并记录不同I/O深度下的性能表现(以IOPS衡量)以及能量消耗(每百万次IO操作的焦耳数)。结果显示,在各种不同的I/O强度条件下,无论是在读取、写入还是混合(50-50%读写比)场景下,无调度器none模式表现出最优的性能(即最高的IOPS),优于其他三种调度器mq-deadline、kyber和bfq的表现。

总的来说,研究团队通过实验证明,在现今超低延迟存储时代,传统的I/O调度策略不仅没有为性能优化带来帮助,反而增加了延迟并影响到吞吐率及能源效率。这提示我们,对于超低延迟存储设备,应当重新评估I/O调度器的作用,并根据具体应用场景和技术特性来决定是否继续使用它们以改善性能和能效。

小编每日撰文不易,如果您看完有所受益,欢迎点击文章底部左下角“关注”并点击“分享”、“在看”,非常感谢!

精彩推荐:

  • 浅析CXL P2P DMA加速数据传输的原理

  • HDD回暖于2024,与SSD决战于2028

  • 如何解决NAND系统性能问题?

  • 浅析NVMe key per IO加密技术

  • PCIe 6.0生态业内进展分析总结

  • 浅析PCIe 6.0功能更新与实现的挑战

  • 年度总结|存储随笔2023年度最受欢迎文章榜单TOP15

  • NVMe SSD IO压力导致宕机案例解读

  • 过度加大SSD内部并发何尝不是一种伤害

  • NVMe over CXL技术如何加速Host与SSD数据传输?

  • FIO测试参数与linux内核IO栈的关联分析

  • 为什么QLC NAND才是ZNS SSD最大的赢家?

  • SSD在AI发展中的关键作用:从高速缓存到数据湖

  • 浅析不同NAND架构的差异与影响

  • SSD基础架构与NAND IO并发问题探讨

  • 字节跳动ZNS SSD应用案例解析

  • SSD数据在写入NAND之前为何要随机化?

  • 深度剖析:DMA对PCIe数据传输性能的影响

  • NAND Vpass对读干扰和IO性能有什么影响?

  • HDD与QLC SSD深度对比:功耗与存储密度的终极较量

  • NVMe SSD:ZNS与FDP对决,你选谁?

  • 浅析Relaxed Ordering对PCIe系统稳定性的影响

  • 实战篇|浅析MPS对PCIe系统稳定性的影响

  • 浅析PCI配置空间

  • 浅析PCIe系统性能

  • 存储随笔《NVMe专题》大合集及PDF版正式发布!

这篇关于对于超低延迟SSD,IO调度器已经过时了吗?-part2的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/638241

相关文章

如何解决Druid线程池Cause:java.sql.SQLRecoverableException:IO错误:Socket read timed out的问题

《如何解决Druid线程池Cause:java.sql.SQLRecoverableException:IO错误:Socketreadtimedout的问题》:本文主要介绍解决Druid线程... 目录异常信息触发场景找到版本发布更新的说明从版本更新信息可以看到该默认逻辑已经去除总结异常信息触发场景复

Linux查看系统盘和SSD盘的容量、型号及挂载信息的方法

《Linux查看系统盘和SSD盘的容量、型号及挂载信息的方法》在Linux系统中,管理磁盘设备和分区是日常运维工作的重要部分,而lsblk命令是一个强大的工具,它用于列出系统中的块设备(blockde... 目录1. 查看所有磁盘的物理信息方法 1:使用 lsblk(推荐)方法 2:使用 fdisk -l(

golang实现延迟队列(delay queue)的两种实现

《golang实现延迟队列(delayqueue)的两种实现》本文主要介绍了golang实现延迟队列(delayqueue)的两种实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的... 目录1 延迟队列:邮件提醒、订单自动取消2 实现2.1 simplChina编程e简单版:go自带的time

Python文件操作与IO流的使用方式

《Python文件操作与IO流的使用方式》:本文主要介绍Python文件操作与IO流的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、python文件操作基础1. 打开文件2. 关闭文件二、文件读写操作1.www.chinasem.cn 读取文件2. 写

Linux区分SSD和机械硬盘的方法总结

《Linux区分SSD和机械硬盘的方法总结》在Linux系统管理中,了解存储设备的类型和特性是至关重要的,不同的存储介质(如固态硬盘SSD和机械硬盘HDD)在性能、可靠性和适用场景上有着显著差异,本文... 目录一、lsblk 命令简介基本用法二、识别磁盘类型的关键参数:ROTA查询 ROTA 参数ROTA

Spring框架中@Lazy延迟加载原理和使用详解

《Spring框架中@Lazy延迟加载原理和使用详解》:本文主要介绍Spring框架中@Lazy延迟加载原理和使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、@Lazy延迟加载原理1.延迟加载原理1.1 @Lazy三种配置方法1.2 @Component

MySQL主从同步延迟问题的全面解决方案

《MySQL主从同步延迟问题的全面解决方案》MySQL主从同步延迟是分布式数据库系统中的常见问题,会导致从库读取到过期数据,影响业务一致性,下面我将深入分析延迟原因并提供多层次的解决方案,需要的朋友可... 目录一、同步延迟原因深度分析1.1 主从复制原理回顾1.2 延迟产生的关键环节二、实时监控与诊断方案

Linux之计划任务和调度命令at/cron详解

《Linux之计划任务和调度命令at/cron详解》:本文主要介绍Linux之计划任务和调度命令at/cron的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux计划任务和调度命令at/cron一、计划任务二、命令{at}介绍三、命令语法及功能 :at

java实现延迟/超时/定时问题

《java实现延迟/超时/定时问题》:本文主要介绍java实现延迟/超时/定时问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java实现延迟/超时/定时java 每间隔5秒执行一次,一共执行5次然后结束scheduleAtFixedRate 和 schedu

Redis实现延迟任务的三种方法详解

《Redis实现延迟任务的三种方法详解》延迟任务(DelayedTask)是指在未来的某个时间点,执行相应的任务,本文为大家整理了三种常见的实现方法,感兴趣的小伙伴可以参考一下... 目录1.前言2.Redis如何实现延迟任务3.代码实现3.1. 过期键通知事件实现3.2. 使用ZSet实现延迟任务3.3