# [resolu][MEMOIRE] Page Allocation Failure et Jumbo Frames

## thejack

Bonjour,

Je me suis rendu compte d'un problème quelque peu fâcheux sur mon serveur, au début je pensais que cela venait de ma carte réseau, mais un changement de modèle n'a rien changé, les erreurs sont les mêmes, juste le nom du driver réseau qui change dans le dump ...

Des que j'utilise au niveau du réseau des trames étendues (type 7000Ko ... 9000 ...) je me retrouve avec des erreurs d'allocation mémoire de ce type :

```
May 17 11:34:47 SERVEUR swapper: page allocation failure. order:3, mode:0x20

May 17 11:34:47 SERVEUR Pid: 0, comm: swapper Not tainted 2.6.28-gentoo-r5 #1

May 17 11:34:47 SERVEUR Call Trace:

May 17 11:34:47 SERVEUR [<c014488b>] __alloc_pages_internal+0x372/0x38a

May 17 11:34:47 SERVEUR [<c015a83f>] cache_alloc_refill+0x278/0x477

May 17 11:34:47 SERVEUR [<c0428db7>] tcp_v4_do_rcv+0x22/0x153

May 17 11:34:47 SERVEUR [<c015aaa2>] __kmalloc+0x64/0x9e

May 17 11:34:47 SERVEUR [<c03eee00>] __alloc_skb+0x45/0xf2

May 17 11:34:47 SERVEUR [<c03ef661>] __netdev_alloc_skb+0x14/0x2f

May 17 11:34:47 SERVEUR [<c036105a>] e1000_alloc_rx_buffers+0x7a/0x27c

May 17 11:34:47 SERVEUR [<c0361627>] e1000_clean_rx_irq+0x3cb/0x3ef

May 17 11:34:47 SERVEUR [<c03631b6>] e1000_clean+0x2ac/0x439

May 17 11:34:47 SERVEUR [<c0427576>] tcp_delack_timer+0x14f/0x1a2

May 17 11:34:47 SERVEUR [<c03f1f6f>] net_rx_action+0x65/0x15b

May 17 11:34:47 SERVEUR [<c0123254>] __do_softirq+0x83/0x11e

May 17 11:34:47 SERVEUR [<c0123321>] do_softirq+0x32/0x36

May 17 11:34:47 SERVEUR [<c0104c4e>] do_IRQ+0x6e/0x80

May 17 11:34:47 SERVEUR [<c010373b>] common_interrupt+0x23/0x28

May 17 11:34:47 SERVEUR [<c01075a4>] mwait_idle+0x2f/0x32

May 17 11:34:47 SERVEUR [<c0101d9d>] cpu_idle+0x5e/0x75

May 17 11:34:47 SERVEUR Mem-Info:

May 17 11:34:47 SERVEUR DMA per-cpu:

May 17 11:34:47 SERVEUR CPU    0: hi:    0, btch:   1 usd:   0

May 17 11:34:47 SERVEUR CPU    1: hi:    0, btch:   1 usd:   0

May 17 11:34:47 SERVEUR Normal per-cpu:

May 17 11:34:47 SERVEUR CPU    0: hi:  186, btch:  31 usd: 169

May 17 11:34:47 SERVEUR CPU    1: hi:  186, btch:  31 usd:  49

May 17 11:34:47 SERVEUR HighMem per-cpu:

May 17 11:34:47 SERVEUR CPU    0: hi:   42, btch:   7 usd:  35

May 17 11:34:47 SERVEUR CPU    1: hi:   42, btch:   7 usd:  14

May 17 11:34:47 SERVEUR Active_anon:7911 active_file:7561 inactive_anon:15351

May 17 11:34:47 SERVEUR inactive_file:208795 unevictable:0 dirty:8260 writeback:1869 unstable:0

May 17 11:34:47 SERVEUR free:2752 slab:9766 mapped:2211 pagetables:341 bounce:0

May 17 11:34:47 SERVEUR DMA free:3488kB min:64kB low:80kB high:96kB active_anon:0kB inactive_anon:176kB active_file:3320kB inactive_file:2856kB unevictable:0kB present:15868kB pages_scanned:0 all_unreclaimable? no

May 17 11:34:47 SERVEUR lowmem_reserve[]: 0 861 992 992

May 17 11:34:47 SERVEUR Normal free:7252kB min:3720kB low:4648kB high:5580kB active_anon:7164kB inactive_anon:34116kB active_file:16316kB inactive_file:768920kB unevictable:0kB present:881880kB pages_scanned:0 all_unreclaimable? no

May 17 11:34:47 SERVEUR lowmem_reserve[]: 0 0 1047 1047

May 17 11:34:47 SERVEUR HighMem free:268kB min:128kB low:268kB high:408kB active_anon:24480kB inactive_anon:27112kB active_file:10608kB inactive_file:63404kB unevictable:0kB present:134056kB pages_scanned:0 all_unreclaimable? no

May 17 11:34:47 SERVEUR lowmem_reserve[]: 0 0 0 0

May 17 11:34:47 SERVEUR DMA: 0*4kB 22*8kB 15*16kB 0*32kB 0*64kB 0*128kB 0*256kB 0*512kB 1*1024kB 1*2048kB 0*4096kB = 3488kB

May 17 11:34:47 SERVEUR Normal: 1637*4kB 36*8kB 4*16kB 1*32kB 1*64kB 0*128kB 1*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB = 7252kB

May 17 11:34:47 SERVEUR HighMem: 1*4kB 1*8kB 0*16kB 6*32kB 1*64kB 0*128kB 0*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB = 268kB

May 17 11:34:47 SERVEUR 216685 total pagecache pages

May 17 11:34:47 SERVEUR 185 pages in swap cache

May 17 11:34:47 SERVEUR Swap cache stats: add 194, delete 9, find 853/853

May 17 11:34:47 SERVEUR Free swap  = 1003276kB

May 17 11:34:47 SERVEUR Total swap = 1004052kB

May 17 11:34:47 SERVEUR 260080 pages RAM

May 17 11:34:47 SERVEUR 33778 pages HighMem

May 17 11:34:47 SERVEUR 3752 pages reserved

May 17 11:34:47 SERVEUR 108061 pages shared

May 17 11:34:47 SERVEUR 159127 pages non-shared

```

Ce problème arrive des lors que la mémoire virtuelle est "pleine", lorsque je dis pleine je parle du cache qui au fur et à mesure s'étale sur la mémoire vive disponible. Cela donne au final des paquets droppé ...

Des que je regle la MTU a 1500 le problème disparait. Bon ce n'est pas bien grave, je perds juste 20% de performance en transfert ... 

Cependant si quelqu'un aurait un debut de solution ça m'aiderait  :Very Happy: Last edited by thejack on Wed Jun 10, 2009 3:17 pm; edited 1 time in total

----------

## thejack

Bon bah je crois avoir trouvé le pourquoi du comment ...

Apres avoir regardé pour la *je ne sais combien de* fois le log ... j'ai tilté sur lowmem_reserve.

J'ai fait la liaison entre ça et mes "tweaks" tcp que sont :

```
net.core.rmem_max = 16777216

net.core.wmem_max = 16777216

net.ipv4.tcp_rmem = 4096 87380 16777216

net.ipv4.tcp_wmem = 4096 65536 16777216
```

En fait c'est la mémoire minimale réservée par defaut par le noyau (environ 3Mo) qui est a priori trop faible pour certains essais d'allocation qu'entreprends le driver réseau.

J'ai donc integré la ligne suivante a sysctl.conf :

```
vm.min_free_kbytes = 20480
```

J'ai remis ma MTU a 9000Ko ....  je suis en train de tester tout ça ... pour l'instant pas d'erreur en vue. Je vais laisser ça en suspend, si après une a deux semaines je n'ai aucune erreur je vous le signalerais.

----------

## El_Goretto

Bonjour,

Je suis preneur si tu as des liens documentant ces paramètres noyaux (leur application concrète en environnement 1Gb m'intéresse aussi).

----------

## thejack

http://www.acc.umu.se/~maswan/linux-netperf.txt

Voici un lien qui decrit le probleme .... plus l'effet secondaire que j'ai rencontré. Bien sur je le trouve seulement au moment ou je trouve le bon parametre a changer  :Very Happy: 

----------

## thejack

Apres une semaine sans erreur je viens d'en avoir quelques unes avec un reglage de 20Mo ... je monte a 32Mo (pour 16Ko d'allocation par trames de 9000o, ceci etant une particularité du driver e1000, et 2 queue de 1000 pour le RX et TX).

----------

## thejack

J'ai fini a 64Mo ... pas de warning depuis une semaine ... je considere donc le probleme resolu  :Very Happy: 

----------

## El_Goretto

Franchement, ce thread mérite d'être en post-it... ou plutôt dans la section astuce de chez nous.

Il y a très, mais alors très peu de référence sur le net à ce problème, et il arrive très vite pourtant. Certains l'associent apparemment à tort à un problème avec leur driver réseau.

J'en ai encore souffert hier, la mémoire était full, et 50%du swap utilisée. Les problèmes d'allocation semblent venir du fait que l'allocation des tampons réseau doit être faite sans aucun délais, contrairement à une appli.

----------

