执行I/O的开销包括初始化缓冲区、系统调用、上下文切换、分赔内核元数据、检查进程权限和限制、映射地址到设备、执行内核和驱动代码来执行I/O,以及在最后释放元数据和缓冲区。
增加I/O尺寸是应用程序提高吞吐量的常用策略。考虑到每次I/O的固定开销,一次I/O传输128KB要比128次传输1KB高效很多,尤其是磁盘I/O,由于寻道时间,每次I/O开销都较高。
如果应用程序不需要,更大的I/O尺寸也会带来负面效应。一个执行8KB随机读取的数据库按128KBI/O的尺寸运行会慢很多,应为120KB的数据传输能力被浪费了。选择小一些的I/O尺寸更贴近应用程序所需,能降低引起的I/O延迟。不必要的大尺寸I/O还会浪费缓存空间。
指定I/O尺寸方法
mkfs.ext4 -b 2048 -i 256 /dev/sdb
-b 指定block大小单位字节
-i 指定"字节/inode"的比例
查看现有文件系统类型
df -TH
查看Block大小
dumpe2fs /dev/vda1|grep "Block size"
这两个命令也可以查看Ionde数量和剩余