alloc_hugepages() - Unix,Linux系統呼叫
廣告
名稱
alloc_hugepages, free_hugepages - 分配或釋放巨頁
概要
void *alloc_hugepages(int key, void *addr, size_t len,
int prot, int flag);
int free_hugepages(void *addr);
|
描述
系統呼叫alloc_hugepages() 和 free_hugepages() 在 Linux 2.5.36 中引入,並在 2.5.54 中再次移除。它們僅存在於 i386 和 ia64 上(當使用 CONFIG_HUGETLB_PAGE 構建時)。在 Linux 2.4.20 中,系統呼叫號存在,但呼叫返回 ENOSYS。
在 i386 上,記憶體管理硬體知道普通頁面 (4 KiB) 和巨頁 (2 或 4 MiB)。類似地,ia64 知道幾種大小的巨頁。這些系統呼叫用於將巨頁對映到程序的記憶體中或再次釋放它們。巨頁被鎖定在記憶體中,不會被交換。
key 引數是一個識別符號。當為零時,頁面是私有的,不會被子程序繼承。當為正數時,頁面與使用相同 key 的其他應用程式共享,並被子程序繼承。
free_hugepages() 的 addr 引數指示正在釋放哪個頁面:它是對 alloc_hugepages() 的呼叫的返回值。(當所有使用者都釋放了記憶體後,記憶體才會真正被釋放。)alloc_hugepages() 的 addr 引數是一個提示,核心可能會也可能不會遵循。地址必須正確對齊。
len 引數是所需段的長度。它必須是巨頁大小的倍數。
prot 引數指定段的記憶體保護。它是 PROT_READ、PROT_WRITE、PROT_EXEC 之一。
flag 引數被忽略,除非 key 為正數。在這種情況下,如果 flag 為 IPC_CREAT,則當不存在具有給定鍵的巨頁段時,將建立一個新的巨頁段。如果未設定此標誌,則當不存在具有給定鍵的段時,將返回 ENOENT。
返回值
成功時,alloc_hugepages() 返回分配的虛擬地址,free_hugepages() 返回零。發生錯誤時,返回 -1,並適當地設定 errno。
錯誤
符合標準
這些呼叫僅存在於 Linux 2.5.36 到 2.5.54。這些呼叫特定於英特爾處理器上的 Linux,不應在旨在可移植的程式中使用。實際上,系統呼叫號被標記為可重用,因此使用這些呼叫的程式在未來的核心上可能會執行隨機操作。
檔案
/proc/sys/vm/nr_hugepages 已配置的 hugetlb 頁面的數量。這可以讀取和寫入。
/proc/meminfo 提供有關已配置 hugetlb 頁面數量及其在 HugePages_Total、HugePages_Free、Hugepagesize 三個變數中的大小的資訊。
備註
系統呼叫已消失。現在可以使用 hugetlbfs 檔案系統代替。透過使用 mmap() 來對映此虛擬檔案系統中的檔案,可以獲得由巨頁支援的記憶體(如果 CPU 支援它們)。
可以使用 hugepages= 啟動引數指定巨頁的最大數量。
廣告
|