《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)。为了保持兼容性,应用需要对齐到更大(而且操作更难)的逻辑块大小。

目录
打赏
0
相关文章
【嵌入式软件工程师面经】Linux系统编程(线程进程)
【嵌入式软件工程师面经】Linux系统编程(线程进程)
171 1
嵌入式Linux系统编程 — 5.3 times、clock函数获取进程时间
在嵌入式Linux系统编程中,`times`和 `clock`函数是获取进程时间的两个重要工具。`times`函数提供了更详细的进程和子进程时间信息,而 `clock`函数则提供了更简单的处理器时间获取方法。根据具体需求选择合适的函数,可以更有效地进行性能分析和资源管理。通过本文的介绍,希望能帮助您更好地理解和使用这两个函数,提高嵌入式系统编程的效率和效果。
138 13
|
10月前
|
【Linux系统编程】基础指令(二)(下)
【Linux系统编程】基础指令(二)
|
7月前
|
Linux I/O 重定向与管道
【8月更文挑战第17天】重定向在Linux中改变命令I/O流向,默认有">"覆盖输出至文件及">>"追加输出至文件末尾,便于保存结果;使用"<"从文件读取输入而非键盘,高效处理数据。文件描述符如0(stdin)、1(stdout)、2(stderr)标识I/O资源,支持读写操作。管道以"|"连接命令,使前一命令输出成为后一命令输入,如排序用户或找出CPU占用最高的进程,构建复杂数据处理流程。
73 9
在Linux中,如何监控磁盘I/O性能?
在Linux中,如何监控磁盘I/O性能?
实战Linux I/O多路复用:借助epoll,单线程高效管理10,000+并发连接
本文介绍了如何使用Linux的I/O多路复用技术`epoll`来高效管理超过10,000个并发连接。`epoll`允许单线程监控大量文件描述符,显著提高了资源利用率。文章详细阐述了`epoll`的几个关键接口,包括`epoll_create`、`epoll_ctl`和`epoll_wait`,以及它们在处理并发连接中的作用。此外,还探讨了`epoll`在高并发TCP服务场景的应用,展示了如何通过`epoll`和线程/协程池来构建服务框架。
966 22
|
7月前
|
Linux I/O 重定向与管道
【8月更文挑战第14天】输出重定向可将命令结果存入文件,如`>`覆盖写入或`>>`追加写入。输入重定向从文件读取数据,如`<`代替键盘输入。这些操作利用文件描述符(如0:stdin, 1:stdout, 2:stderr)管理I/O。管道`|`连接命令,使前一命令输出作为后一命令输入,便于数据处理,如排序用户`sort -t: -k3 -n /etc/passwd | head -3`或查找CPU占用高的进程`ps aux --sort=-%cpu | head -6`。
60 4
|
7月前
|
Linux I/O 重定向简介
Linux I/O 重定向简介
55 2
目录