web-dev-qa-db-ja.com

アライメントされていないAIO / DIO

Ubuntu Serverインストールでこのエラーが発生します。

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

これはカーネルのバグですか?どうすれば修正できますか?

7
Malcolm

これはカーネルのバグではありません。代わりに、問題のアプリケーションが非効率的な方法で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を直接使用していない場合、問題のあるプログラムに対してバグレポートを提出する以外にできることはほとんどありません。

価値があるのは、この警告のレートが1日1回に制限されているため、ログがいっぱいにならないことです。

9