Iは、組み込みシステム上たshmgetを使用して共有メモリの大きなブロックを割り当てている:"shmget"を使用して大量のメモリブロックを割り当てる場合、System V IPCはどのように断片化を処理しますか?
shmid = shmget(key, 16777216, IPC_CREAT | 0666)
システムは、スラブ・アロケータを使用してuClinuxを(2.6.28 Linuxカーネル)を実行しています。私はCPU上にMMUを持っていません。
上記のshmgetコマンドを実行すると、しばらくしてページの割り当てに失敗します。私は利用可能なRAMが不足しているときにもこれが発生しますが、これはRAAが十分に利用可能になってからしばらくしています。
私は、IPCサブシステムがこの手順で連続した物理16Mbセグメントを必要とし、フラグメント化されているために1つを見つけることができないため、このエラーが発生する可能性があることを確信しています。メモリが不足していたり、割り当てが失敗したり、他の場所に問題がありますか?
これは断片化によるもので、カーネルログに 'page allocation failure:order x'の行に何かがあり、空きメモリチャンクのリストの下に数行あります。' x * 4Kb y * 8Kb z * 16Kb ...などとなります。 "Order"は、割り当てのサイズを取得するためにページサイズをシフトするビットの数です。 – ninjalj
@ ninjaljええ、それは私が受け取っているエラーです。 – lxe