硬盘测速工具中的队列深度是个什么东西——CrystalDiskMark中的Q32T16是什么意思

 

================================

 

最近有使用CrystalDiskMark给自己的硬盘做测速,发现有个名词自己不是很理解,就是像Q32T16这样的词:

 

在网上找了好久,都说Q32T16代表着16线程32队列,也有的说是16线程32队列深度,找了很多资料也没有哪个解释这个队列是个什么鬼。于是灵机一动搜索了一下其他的硬盘测速软件,还真发现了队列这个概念,从硬盘压力测试软件FIO中就有读写硬盘时的队列设置,相关资料:

https://blog.csdn.net/bandaoyu/article/details/113190057

上面这个资料比较详细的介绍了这个队列是什么,其实个人理解这个队列只有在进行磁盘的异步读写时才有用(磁盘的读写如果不经过内存的缓存直接写入磁盘还可以有异步的这种方式我也是头一次见到),由于进行异步方式的磁盘写入那么就需要有一个队列来存储操作系统发出的命令,否则发出命令的速度过快而磁盘处理的速度跟不上就会造成命令的过分堆积,而操作系统每次发出的磁盘读写命令都直接发送给磁盘执行又效率不高,因此就有了整个队列的存在。而这个队列具体的工作情况就是不断的接受操作系统发出的磁盘读写指令,操作系统发出指令后就回去继续执行,这样就成了异步的磁盘读写,而这个队列中的命令达到队列深度值时就会将队列中的所有磁盘读写命令发送给磁盘,然后队列再接着接受操作系统发出的指令;由于磁盘真正执行命令时是接收到了多个命令,因此磁盘可用根据这些命令进行排序得到一个更高效率的命令执行顺序。不过这个队列的设置也只有在异步读写磁盘的时候才有用,而且还是在磁盘写入操作不经缓存直接写盘的情况下,而且还是在进行大量读写操作并行的情况下(磁盘压力测试类似的情况),而且这个东西的设置可能主要还是对机械硬盘比较敏感。

不过个人感觉上面的这个队列的工作情况还是有些不太对(上面的描述主要还是来自上面给出资料中的),个人的观点是这个队列的工作情况还是要更加复杂一些,还有这个每次队列发送给磁盘的命令数也是不一定按照上面的描述来的,个人观点是这个每次发送的这一批命令可能是有个时钟周期的,每次发送的命令数也是有上限的,不过这个东西具体是如何工作的也还是主要靠个人的猜测。不过这个队列的设置是为了给异步并发多线程读写磁盘来服务的,这一点是确定的,如果读写操作的线程多那么设置大一些的队列深度可以更好的榨取出磁盘的性能表现(读写线程多的情况下应该把队列深度设置的大些,不过一般不超过32)。

回到之前说的Q32T16中的Q32就是指每次异步读写磁盘时以batch形式发送给磁盘的命令数为32,即队列深度为32,而这个队列的深度的设置更多的是为了磁盘压力测试的。

由于在对磁盘进行压力测试时,据说这个队列的深度还是比较重要的,因此我们在保证磁盘读写并行度的前提下(线程数固定),可以对这个队列深度进行调整,选出最好的磁盘读写情况下的队列深度,而此时的磁盘表现就可以作为真实的磁盘性能表现(在测试时对这个队列深度进行调整是可以的,并且这样测出的效果可能更真实,不过对于绝大部分情况下不考虑这个队列深度测出的结果也足够说明磁盘性能的了)。

 

===============================

 

 

相关:

http://blog.yufeng.info/archives/2104

http://home.eeworld.com.cn/my/space-uid-718016-blogid-361951.html

https://sata-io.org/developers/sata-ecosystem/native-command-queuing?language=zh-hans

https://www.cnblogs.com/jackydalong/p/3921948.html

https://blog.csdn.net/bandaoyu/article/details/121072279

 

posted on 2023-01-29 01:04  Angry_Panda  阅读(2880)  评论(0编辑  收藏  举报

导航