《Linux系统编程(第2版)》——2.5 直接I/O

简介: 在open()中指定O_DIRECT标志位会使得内核对I/O管理的影响最小化。如果提供O_DIRECT标志位,I/O操作会忽略页缓存机制,直接对用户空间缓冲区和设备进行初始化。所有的I/O操作都是同步的,操作在完成之前不会返回。

本节书摘来自异步社区《Linux系统编程(第2版)》一书中的第2章,第2.5节,作者:【美】Robert Love著,更多章节内容可以访问云栖社区“异步社区”公众号查看

2.5 直接I/O

和其他现代操作系统内核一样,Linux内核实现了复杂的缓存、缓冲以及设备和应用之间的I/O管理的层次结构(参见2.11节)。高性能的应用可能希望越过这个复杂的层次结构,进行独立的I/O管理。但是,创建一个自己的I/O系统往往会事倍功半,实际上,操作系统层的工具往往比应用层的工具有更好的性能。此外,数据库系统往往倾向于使用自己的缓存,以尽可能减少操作系统带来的开销。

在open()中指定O_DIRECT标志位会使得内核对I/O管理的影响最小化。如果提供O_DIRECT标志位,I/O操作会忽略页缓存机制,直接对用户空间缓冲区和设备进行初始化。所有的I/O操作都是同步的,操作在完成之前不会返回。

使用直接I/O时,请求长度、缓冲区对齐以及文件偏移都必须是底层设备扇区大小(通常是512字节)的整数倍。在Linux内核2.6以前,这项要求更加严格:在Linux内核2.4中,所有的操作都必须和文件系统的逻辑块大小对齐(一般是4KB)。为了保持兼容性,应用需要对齐到更大(而且操作更难)的逻辑块大小。

相关文章
|
2月前
|
Linux
【Linux 系统编程】wait函数详解
【Linux 系统编程】wait函数详解
26 0
|
2月前
|
算法 Linux C++
【Linux系统编程】解析获取和设置文件信息与权限的Linux系统调用
【Linux系统编程】解析获取和设置文件信息与权限的Linux系统调用
35 0
|
2月前
|
算法 Linux API
【Linux系统编程】Linux下删除文件的 API方式以及文件删除机制差异
【Linux系统编程】Linux下删除文件的 API方式以及文件删除机制差异
43 0
|
2月前
|
算法 Linux C++
【Linux系统编程】Linux目录操作:opendir、readdir与closedir详解
【Linux系统编程】Linux目录操作:opendir、readdir与closedir详解
48 0
|
2月前
|
存储 算法 Linux
【Linux系统编程】深入理解Linux目录扫描函数:scandir目录函数(按条件扫描目录
【Linux系统编程】深入理解Linux目录扫描函数:scandir目录函数(按条件扫描目录
75 0
|
2月前
|
存储 算法 Linux
【Linux系统编程】Linux 文件系统探究:深入理解 struct dirent、DIR 和 struct stat结构
【Linux系统编程】Linux 文件系统探究:深入理解 struct dirent、DIR 和 struct stat结构
53 0
|
14天前
|
Linux
【Linux系统编程】基础指令(二)(下)
【Linux系统编程】基础指令(二)
|
14天前
|
Linux C语言
【Linux系统编程】基础指令(二)(上)
【Linux系统编程】基础指令(二)
|
2月前
|
算法 Linux C语言
【Linux系统编程】深入理解Linux目录操作:文件夹位置指针操作函数(telldir,seekdir,rewinddir)
【Linux系统编程】深入理解Linux目录操作:文件夹位置指针操作函数(telldir,seekdir,rewinddir)
25 0
|
2月前
|
算法 Linux C++
【Linux系统编程】深入理解Linux中的chmod函数和mode_t类型
【Linux系统编程】深入理解Linux中的chmod函数和mode_t类型
44 0