OS 大文件传输
阻塞 IO :
- 内核缓存区 (PageCache) 拷到用户缓冲区
异步 I/O 没用到 PageCache
- 直接 I/O, 没用 PageCache
- 缓存 I/O, 用了 PageCache
- 对磁盘, 异步 I/O 只能用直接 I/O
传输大文件的, 用异步I/O+直接I/O 替代零拷贝
直接 I/O 应用场景:
- 应用已实现磁盘缓存, 如: MySQL 开启直接 I/O,默认: 不开启
- 传输大文件, 大文件难命中 PageCache, 还导致热点数据无法利用缓存,增大性能开销,因此,这时应该使用直接 I/O。
直接 I/O 绕过 PageCache 的优化:
- 缓存多个 I/O 请求在 PageCache, 再合并成大 I/O 请求, 发给磁盘,减少磁盘寻址
- 预读后续 I/O 请求放在 PageCache, 减少对磁盘操作
根据文件大小, 传输文件方式:
- 传输大文件,用异步 I/O+直接 I/O
- 传输小文件,用零拷贝技术