FAQ : SLAB: Unable to allocate memory on node 0 (gfp=0x20) の Warning が出たら

対象製品: Armadillo-IoT G3Armadillo-IoT G3LArmadillo-X1Armadillo-IoT G1/G2Armadillo-Box WS1Armadillo-EVA 1500Armadillo-840Armadillo-810Armadillo-800 EVAArmadillo-500 FXArmadillo-500Armadillo-460Armadillo-440Armadillo-420Armadillo-410

大きなサイズのファイルをSDメモリカードにwgetした時などに、以下のワーニングが出ることがあります。

SLAB: Unable to allocate memory on node 0 (gfp=0x20)
  cache: size-2048, object size: 2048, order: 0
  node 0: slabs: 526/526, objs: 1052/1052, free: 0
swapper: page allocation failure: order:0, mode:0x20
Backtrace:
[<80011108>] (dump_backtrace+0x0/0x10c) from [<803ef078>] (dump_stack+0x18/0x1c)
 r6:00000000 r5:00000020 r4:00000002 r3:8056e240
[<803ef060>] (dump_stack+0x0/0x1c) from [<80083214>] (warn_alloc_failed+0x100/0x120)
[<80083114>] (warn_alloc_failed+0x0/0x120) from [<800854e4>] (__alloc_pages_nodemask+0x578/0x5fc)
 r3:80555cb4 r2:00000000
 r7:00000000 r6:80554000 r5:80554000 r4:00000020
[<80084f6c>] (__alloc_pages_nodemask+0x0/0x5fc) from [<803f0328>] (cache_alloc_refill+0x2d4/0x5a8)
[<803f0054>] (cache_alloc_refill+0x0/0x5a8) from [<800acc2c>] (__kmalloc+0x98/0xec)
[<800acb94>] (__kmalloc+0x0/0xec) from [<80359464>] (__alloc_skb+0x50/0xec)

このワーニングは min_free_kbytes を大きくする事で改善します。

2,493 KByte を 16,384 KByte にする例


[armadillo ~]# cat /proc/sys/vm/min_free_kbytes
2493
[armadillo ~]# echo 16384 > /proc/sys/vm/min_free_kbytes
[armadillo ~]# cat /proc/sys/vm/min_free_kbytes
16384

min_free_kbytes を大きくすると、ある単位時間に発生するアトミックなメモリー確保(割り込みハンドラー内でのメモリーアロケーションなど) に対応できるメモリの総量が増加します。ただし、大きくしすぎるとシステムで自由に使えるメモリ量が相対的に減ります。

仮想メモリの設定に関する詳細は、Linuxカーネルソースファイル内の Documentation/sysctl/vm.txt を参照ください。

Armadillo-800 シリーズの v3.4-at17以前のカーネルには不具合があります。カーネルをアップデートしてください。
(動作中カーネルのバージョン確認方法は「FAQ : カーネルのバージョンを確認するには 」を参照ください。)

上記対応を行っても改善しない場合は、未知の不具合の可能性が有ります。 Armadilloフォーラム でご連絡ください。