未对齐的 AIO/DIO

未对齐的 AIO/DIO

我在安装 Ubuntu Server 时收到此错误:

kernel: [6622929.119915] EXT4-fs (sda1): Unaligned AIO/DIO on inode 43648079 by java; performance will be poor.

这是内核错误吗?我该如何修复它?

答案1

这不是一个内核错误:相反,这是来自内核的一个警告,表明相关应用程序正在以低效的方式使用 API(异步 I/O 或直接 I/O)。

源代码

/*
 * This tests whether the IO in question is block-aligned or not.
 * Ext4 utilizes unwritten extents when hole-filling during direct IO, and they
 * are converted to written only after the IO is complete.  Until they are
 * mapped, these blocks appear as holes, so dio_zero_block() will assume that
 * it needs to zero out portions of the start and/or end block.  If 2 AIO
 * threads are at work on the same unwritten block, they must be synchronized
 * or one thread will zero the other's data, causing corruption.
 */

所以这意味着所讨论的程序正在尝试使用异步 I/O 或直接 I/O API,其内存缓冲区与文件系统块边界不对齐,这会迫使文件系统按顺序对文件执行异步操作以避免损坏。

如果触发警告的程序是您编写的,那么您可以调整它使用 AIO 或 DIO API 的方式以避免出现问题。如果这不是您的程序,或者您没有直接使用 API,那么除了针对问题程序提交错误报告外,您可能没有太多办法。

值得注意的是,此警告的发生频率限制为每天一次,因此它不会填满您的日志。

相关内容