新版Linux內核的內存管理函數vmalloc可帶來更快的執行速度
據phoronix的報導,在Linux Kernel 5.2版本中,其用於內存管理的vmalloc函數具有更快的執行速度,特別是在嵌入式設備上。vmalloc用於在虛擬地址空間中分配連續內存,合併了代碼的Andrew Morton說道:
“新版本中vmalloc 發生的改變為其帶去了巨大的性能優勢。”據了解,vmalloc 代碼的主要變更集中在追踪用於分配的空閒塊。 現在,Linux內核的機制是在擁堵的列表迭代中完成新VA區域的分配,直到在兩個擁堵的區域之間找到合適的空隙。因此,每次新分配都會導致列表增長。而由於長列表和不同的許可參數,分配在嵌入式設備上可能需要很長時間(毫秒)。 最新提交的補丁將vmalloc內存佈局組織到VMALLOC_START-VMALLOC_END範圍的空閒區域中。它使用一個紅黑樹,以保持這些塊按其偏移量進行排序,以及為了增加的地址而與鍊錶一起保持一定的空閒空間。
根據測試,使用了Uladzislau Rezki 的補丁並執行同樣的行為,再與Linux Kernel 5.1 及之前的版本進行對比,調用vmalloc() 可節省多達67% 的時間—— 至少根據開發者在QEMU 上進行的測試顯示如是。