LTP測驗中的fork系統呼叫測驗,首先要回圈mmap 16TB的記憶體空間,每次mmap 1GB,但是超過1TB后mmap回傳ENOMEM錯誤,最終找到問題出在內核代碼中mmap.c檔案中的unmapped_area_topdown函式中:
...
vma = rb_entry(mm->mm_rb.rb_node, struct vm_area_struct, vm_rb);
if (vma->rb_subtree_gap < length)
return -ENOMEM;
...
根據代碼看是因為紅黑樹節點中無法分配length長度的記憶體,涉及到紅黑樹相關,之前沒有詳細了解過,不知道可不可以擴展之類的,對于16TB來說虛擬地址空間是一定夠用的,第一次發帖,希望有大佬回答,謝謝!
uj5u.com熱心網友回復:
除錯發現TASK_SIZE只有1TB,檢查發現是支持高位地址的內核編譯選項沒有打開,但是打開編譯以后又報出來“Micro-assembler field overflow”,嘗試增加為TLB例外的處理函式預留的空間,但是還是報同樣的錯,bug應該不在這里,沒有頭緒。轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/29546.html
標籤:內核源代碼研究區
上一篇:如何找到libgazebo_ros_openni_kinect.so插件的源代碼?
下一篇:shell小白求助
