2
我使用的嵌入式系統上的shmget分配共享存儲器的大數據塊:當使用「shmget」分配大塊內存時,System V IPC如何處理碎片?
shmid = shmget(key, 16777216, IPC_CREAT | 0666)
該系統使用slab分配器運行的uClinux(2.6.28 Linux內核)。我在CPU上沒有MMU。
偶爾,在運行上述shmget命令時,頁面分配失敗。當我耗盡可用內存時也會發生這種情況,但這種情況也會在我有足夠的RAA時發生。
我懷疑罪魁禍首是碎片,但我不太確定 - 所以我的問題是,是否可能導致此錯誤,因爲IPC子系統需要連續物理16Mb段用於此過程,並且由於碎片而無法找到一個記憶,拋出分配失敗,還是這個問題在別處?
如果這是由碎片造成的,你的內核日誌將會出現`page allocation failure:order x`和幾行下面的空閒內存塊列表:`x * 4Kb y * 8Kb z * `16Kb ...`等等。 「順序」是您移動頁面大小以獲取分配大小的位數。 – ninjalj 2011-01-31 23:05:51
@ninjalj yup,這是我收到的錯誤。 – lxe 2011-02-02 22:28:09