directio

'directio' 指令启用直接 I/O,用于读写文件,绕过操作系统缓存。 — NGINX HTTP Core

directio
httpserverlocation
语法directio size;
默认值none
上下文http, server, location
模块NGINX HTTP Core
参数1

说明

'directio' 指令在 NGINX 中用于配置文件处理的直接 I/O 操作,特别适用于在提供大文件时需要高性能的情况。启用后,数据将在磁盘和应用程序之间直接读写,绕过操作系统的缓存。这可以为经常访问大文件的应用减少延迟并提高吞吐量。 该指令带有一个参数,用于指定直接 I/O 缓冲区的大小。所给大小会与底层文件系统使用的块大小对齐。例如,如果你的块大小是 4 KB,则设置 'directio 4k;' 是合适的。该指令有助于在高性能场景或内存资源受限的系统中优化文件数据的处理方式。 '直directio' 指令可以在 `http`、`server` 和 `location` 块的上下文中声明,从而允许在 NGINX 层级的不同级别进行灵活配置。需要注意的是,尽管此功能可以带来显著的好处,但并非对所有工作负载都必要,尤其是不经常涉及大文件访问的工作负载,因为管理直接 I/O 的开销有时可能超过其性能收益。

配置示例

location /downloads {
    directio 4k;
    root /var/www/files;
}

确保文件系统支持 direct I/O;否则,该指令可能不会生效。

注意将缓冲区大小与底层文件系统的块大小对齐,以避免性能损失。

使用 direct I/O 可能会绕过 kernel page cache,这可能导致小文件访问模式下的性能下降。