linux平台下如何让字符设备支持阻塞和非阻塞io模型,以read操作为例
不知题主的read是指socket的read还是文件的read。 默认情况下,socket的read是阻塞的; 对文件进行read,要看内核态的read接口是注册为同步接口还是异步接口(可参见file_operations结构体)
我想做linux的磁盘io性能测试,有什么好的工具和方法推荐吗,感谢
首先,了解些磁盘的知识
现在常用的磁盘有多种,如机械硬盘、固态硬盘等。
不同种类磁盘有其各自特性,比如机械硬盘外磁道比内磁道快。
其次,可以了解下Linux的io堆栈
比如,了解数据真正落盘跟缓存在内存中的区别。
不同版本内核,io堆栈会有更新换代而稍有不同。具体参考内核作者的网站:https://www.thomas-krenn.com/en/wiki/Linux_Storage_Stack_Diagram
具体Io测试工具不少,这里推荐几个我用的工具
简单粗暴的工具:fio (
https://fio.readthedocs.io/en/latest/fio_doc.html)
复杂一些同时可以图形显示测试结果的工具:nmon (https://www.ibm.com/developerworks/community/wikis/home?lang=en#!/wiki/Power%20Systems/page/nmon)。
nmon的可视化工具有:nmonchart,NMONVisualize需要跟踪io读写,可以使用blktrace,跟踪每个io请求对应的扇区号。
除了fio测试工具和iostat,其他工具的测试结果基本上都是扯淡,跟直观感受距离太远,尤其是随机IO。
而且测试结果都不能反映真实负载,如果依据这个结果去预估负载,更是差的远。