• [^] # Re: fragmentation

    Posté par (courriel, site web personnel) . En réponse au message Problème d'OOM killer sur un NAS LaCie. Évalué à 3.

    Les GFP flags de l'OOM correspondent à ceux du message XFS (0x2d0 == NOWARN | FS | IO | WAIT). Le message vient de là : http://lxr.linux.no/#linux+v2.6.12/fs/xfs/linux-2.6/kmem.c#L62

    43#define MAX_VMALLOCS 6
    44#define MAX_SLAB_SIZE 0x20000
    ..
    47void *
    48kmem_alloc(size_t size, int flags)
    49{
    50 int retries = 0;
    51 int lflags = kmem_flags_convert(flags);
    52 void *ptr;
    53
    54 do {
    55 if (size < MAX_SLAB_SIZE || retries > MAX_VMALLOCS)
    56 ptr = kmalloc(size, lflags);
    57 else
    58 ptr = __vmalloc(size, lflags, PAGE_KERNEL);
    59 if (ptr || (flags & (KM_MAYFAIL|KM_NOSLEEP)))
    60 return ptr;
    61 if (!(++retries % 100))
    62 printk(KERN_ERR "XFS: possible memory allocation "
    63 "deadlock in %s (mode:0x%x)\n",
    64 __FUNCTION__, lflags);
    65 blk_congestion_wait(WRITE, HZ/50);
    66 } while (1);
    67}
    

    Faut croire que XFS essaie d'allouer un relativement gros bloque de mémoire contigüe. Ça marche pas donc ça déclenche un OOM. XFS réessai jusqu'à ce que les OOM aient défragmenté suffisamment de mémoire où jusqu'à ce qu'il abandonne et utilise de la mémoire non contigüe.

    M'étonnerait qu'un xfs_repair change grand chose. Il y a peut-être moyen de tuner XFS pour éviter ce genre de situation mais vu l'ancienneté du noyal, il est probable qu'il s'agisse d'un bug XFS qui requiert une mise à jour du driver.

    pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.