缓冲I/O:原理、性能优化与标准I/O库使用
1. 块与I/O性能
在I/O操作中,块是一个关键的抽象概念,所有磁盘操作都以块为单位进行。因此,当I/O请求在块对齐的边界上以块大小的整数倍发出时,I/O性能最佳。例如,读取单个字节1024次,比一次性读取1024字节所需的系统调用次数大幅增加,会导致性能显著下降。即使操作的大小大于块大小,如果不是块大小的整数倍,性能也可能不佳。
以 dd 命令为例,以下两个命令完成相同的两兆字节复制任务:
dd bs=1 count=2097152 if=/dev/zero of=pirate
dd bs=1024 count=2048 if=/dev/zero of=pirate
第一个命令以单字节块进行复制,需要约两百万次读写操作;第二个命令以1024字节块进行复制,读写操作次数减少了1024倍。性能提升非常明显,具体数据如下表所示:
| 块大小 | 实时时间 | 用户时间 | 系统时间 |
| ---- | ---- | ---- | ---- |
| 1字节 | 18.707秒 | 1.118秒 | 17.549秒 |
| 1024字节 | 0.025秒 | 0.002秒 | 0.023秒 |
| 1130字节 | 0.035秒 | 0.002秒 | 0.027秒 |
从表中可以看出,使用1024字节块比单字节块有巨大的性能提升。同时,使用非块大小整数倍的块大小(如1130字节),尽管系统调用次数减少,但会导致未对齐的请求,效率低于1024字节请
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



