收藏本站在线留言网站地图

您好,欢迎来到深圳联乐实业有限公司官网
咨询热线

400-888-2720

联乐实业

工业存储/工业电脑服务商

20年专注高可靠性工业存储产品及解决方案

SSD性能测试的“劳斯莱斯”--FIO

返回列表 来源: 发布日期: 2021.12.31
对于SSD性能测试来说,最好的工具莫过于FIO了。FIO是Jens开发的一个开源测试工具,功能非常强大,基本功能:线程、队列深度、Offset、同步异步、DirectlO、BIO。使用FIO之前,首先要有一些SSD性能测试方面的基础知识。

FIO

线程指的是同时有多少个读或写任务在并行执行,一般来说,CPU里面的一个核心同一时间只能运行一个线程。如果只有一个核心,要想运行多线程,只能使用时间切片。每个线程跑一段时间片,所有线程轮流使用这个核心。Linux使用Jiffies 来代表一秒钟被划分过了多少个时间片,一般来说Jiffies是1000或100,所以时间片就是毫秒或10毫秒。

一般电脑发送一个读写命令到SSD只需要几微秒。但是SSD要花几百微秒甚至几毫秒才能执行完这个命令。如果发一个读写命令,然后线程一直休眠,等待结果回来才唤醒处结果,这叫作同步模式。可以想象,同步模式是很浪费SSD性能的,因为SSD 里面有很多并行单元,比如一般企业级SSD内部有8~16个数据通道,每个通道内部有4~16个行逻辑单元(LUN,Plane),所以同一时间可以执行32~256个读写命令。同步模式就味着,只有其中一个并行单元在工作,暴殄天物。

2

为了提高并行性,大部分情况下SSD读写采用的是异步模式。就是用几微秒发送命令,发完线程不会傻傻地在那里等,而是继续发后面的命令。如果前面的命令执行完了,SSD通知会通过中断或者轮询等方式告诉CPU,由CPU来调用该命令的回调函数来处理结果。这样的好处是,SSD里面几十上百个并行单元都能分到活干,效率暴增。

不过,在异步模式下,CPU不能一直无限地发命令到SSD。比如SSD 执行读写如果发生了卡顿。那有可能系统会一直不停地发命令。几千个,甚至几万个,这样一方面 SSD扛住,另一方面这么多命令会很占内存,系统也要挂掉了。这样,就带来一个参数叫作队列深度。举个例子,队列深度64就是说,系统发的命令都发到一个大小为64的队列,如果填满了就不能再发。等前面的读写命令执行完了,队列里面空出位置来,才能继续填命令。

一个 SSD 或者文件有大小,测试读写的时候设置 Offset 就可以从某个偏移地址开始测试。比如从 offset=4G 的偏移地址开始。
Linux读写的时候,内核维护了缓存,数据先写到缓存,然后再后台写到SSD。读的时候他优先读缓存里的数据。这样速度可以加快,但是一旦掉电,缓存里的数据就没了。所以有一种模式叫作DirectiO,跳过缓存,直接读写SSD。

2.fw

Linux 读写SSD 等块设备使用的是BIO(Block-IO),这是个数据结构,包含了数据块逻辑地址 LBA,数据大小和内存地址等。一般Linux系统是自带FIO的,如果没有或者版本太老,要自己从https://github.com/axboe/fio下载安装,FIO功能非常强大,可以通过man来查看每一个功能,也有网页版。

联乐实业,工业存储/工业电脑服务商,17年专注高可靠性工业存储产品解决方案服务商!详情进入www.univo.com.cn或垂询400-888-2720