web-dev-qa-db-fra.com

AIO / DIO non aligné

Je reçois cette erreur sur mon installation Ubuntu Server:

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

Est-ce un bug du noyau? Comment je le répare?

7
Malcolm

Ce n'est pas un bogue du noyau, mais plutôt un avertissement du noyau indiquant que l'application en question utilise l'API (E/S asynchrone ou E/S directe) de manière inefficace.

De le code source :

/*
 * 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.
 */

Cela signifie donc que le programme en question tente d'utiliser les API d'E/S asynchrones ou directes avec des mémoires tampons non alignées sur les limites de bloc du système de fichiers, ce qui oblige le système de fichiers à effectuer les opérations asynchrones sur le fichier. en série pour éviter la corruption.

Si le programme qui a déclenché l'avertissement est celui que vous avez écrit, vous pouvez ajuster la façon dont il utilise les API AIO ou DIO pour éviter le problème. S'il ne s'agit pas de votre programme ou si vous n'utilisez pas directement les API, vous ne pouvez probablement rien faire d'autre que le dépôt d'un rapport de bogue sur le programme en question.

Pour ce que cela vaut, cet avertissement est limité à une fois par jour, il ne doit donc pas remplir vos journaux.

9
James Henstridge