在写之前插个接口问题,自己还不清楚区别:
u2interface. msata interface.m2接口是sata简化接口。u2是新的接口,中间有突起,使用的是nvme协议,但是怎么使用的?数据线都没有 ,但是说是兼容好几种: 是否需要转换头也不知道。没使用过。
fio使用的时候,可以在ubuntu中使用sudo apt-get install fio即可,而如果下载源码,那么wget http://brick.kernel.dk/snaps/fio-2.1.10.tar.gz(摘录其他人的博客)然后三步骤执行:./config make make install 如果想自己修改,那么可以修改完再次make 再次make install就会更换为新的版本。
fio简单的一次性命令为:fio -filename=/dev/sdb1 -direct=1 -iodepth=8 -thread -rw=read -ioengine=psync -bs=4k -size=100G -numjobs=30 -runtime=1000 -group_reporting -name=mytest
fio -output=磁盘路径
注意事项和说明:
1)测试只能测试设备不能测试一个设备中的文件目录。就是目录不能当成fio的测试对象.(这句话严重错误,可以测盘内文件的,也可以裸盘测试,即不带文件系统的测试,那样测完盘需要重新格式化。)
因此给出快速模拟出一个虚拟硬盘的方法,用于测试使用,步骤如下(注意使用dd命令没有-开头。。而fio中除了job file中写,命令行的参数前面必须有-)。
dd if=/dev/zero of=~/testforfio-4GB.img bs=4M count=1024
mkfs.ext4 testforfio-4GB.img
sudo mount -o loop testforfio-4GB.img ~/testforfio
此处需要强调:是使用testforfio-4GB.img挂载完了之后才会在df -h中显示出来/dev/loop0 这个设备就是将testforfio-4GB.img给使用/dev/loop0对应的驱动操作。所以不可以使用: sudo mount -o loop /dev/loop0 ~/testforfio
2)filename 是测试的盘符,direct=1表示绕过机器的buffer 不使用pagecache, rw=randwrite 或者randread或read 或write(不带rand的代表顺序读写)或者randrw表示随机读写 bs=4k表示单次io的块文件大小为4k. bsrange=512-2048表示指定了io块的大小范围。size=5G 表示该次测试总量的大小是5G(又有说明是每个进程跑5G的量??) numjobs表示使用线程是30个 runtime=100表示100秒结束,当然要与总量相比,如果不写runtime就是一次把5G总量写完为止。 ioengine=psync 表示io引擎使用psync方式 rwmixwrite=30表示混合读写下写占了30% group_reporting 关于显示结果的,汇总每个进程信息,注意此处是汇总,而不是显示每个进程信息。如果想显示每个进程的如numjobs=5那么不用group_reporting就会将所有的信息显示5份然后加上最后的汇总如果用了group_reporting那么就是不会显示5份只有总的。 lockmem=1G 表示只使用1G内存进行测试 zero_buffers表示用0初始化buffer nrfiles=8表示每个进程生成文件数量。
对于低版本的fio2.多版本对于-group_reporting会出错,必须不加-才行。。。这个是版本错误。
另外写法中:–iodepth 2 或是 –iodepth=2.效果都是一样的。
如果想得到fio中每次io的lat时间,(当然clat和slat也能得到)。则在框架
在io_u.c文件中
static void io_completed(struct thread_data *td, struct io_u *io_u,
struct io_completion_data *icd)函数中
----------------------》
在io_u.c文件中
static void account_io_completion(struct thread_data *td, struct io_u *io_u,struct io_completion_data *icd,
const enum fio_ddir idx, unsigned int bytes)
-------------------------》