我在安装 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,那么除了针对问题程序提交错误报告外,您可能没有太多办法。
值得注意的是,此警告的发生频率限制为每天一次,因此它不会填满您的日志。