首页   快速返回

磁盘io与直接io     所属分类 architecture
缓存I/O 标准I/O,大多数文件系统的默认I/O操作都是缓存I/O。
Linux 缓存I/O ,数据先从磁盘复制到内核空间的缓冲区,然后从内核空间缓冲区复制到应用程序的地址空间。

读操作
先检查内核缓冲区 ,命中缓存直接从缓存中读取,否则从磁盘读取并缓存 

写操作
将数据从用户空间复制到内核空间缓存 ,何时写入磁盘由操作系统决定,除非显式调用sync同步命令 

优点
在一定程度上分离了内核空间和用户空间,保护系统本身的运行安全
减少读写磁盘次数,提高性能

缺点
数据需要在应用程序地址空间(用户空间)和缓存(内核空间)之间进行多次拷贝

直接IO 
应用程序直接访问磁盘数据,而不经过内核缓冲区
数据库经常使用该方式
数据库管理系统提供一种更加有效的缓存机制来提高数据的存取性能

通常直接IO与异步IO结合使用,会得到比较好的性能。


磁盘IO延时  
机械转动延时(机械磁盘的主要性能瓶颈,平均为2ms) + 寻址延时(2~3ms) + 块传输延时(一般4k每块,40m/s的传输速度,延时一般为0.1ms)  平均为5ms

网络IO延时
服务器响应延时 + 带宽限制 + 网络延时 + 跳转路由延时 + 本地接收延时 (一般为几十到几千毫秒,受环境影响大)


慢速I/O设备和内存之间的数据传输方式

PIO 读取磁盘文件到内存中,数据要经过CPU存储转发
DMA 直接内存访问,Direct Memory Access
不经过CPU而直接进行磁盘和内存的数据交换

open()系统调用 参数选项
O_DIRECT  绕过内核缓冲区直接访问
O_SYNC    只对写数据有效,写入内核缓冲区的数据立即写入磁盘,减少机器故障时数据丢失

上一篇     下一篇
数据结构要点

hive四种存储格式

java版hyperLogLog

Linux IO sync fsync与fdatasync

sendfile 零拷贝机制

区块链简介