alloc_hugepages() - Unix,Linux系統呼叫 - 技術教學
Tutorials Point


  Unix入門
  Unix Shell程式設計
  高階Unix
  Unix有用參考
  Unix有用資源
  精選閱讀

版權所有 © 2014 tutorialspoint



  首頁     參考資料     討論論壇     關於TP  

alloc_hugepages() - Unix,Linux系統呼叫


previous next AddThis Social Bookmark Button

廣告

名稱

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

錯誤

標籤描述
ENOSYS 此核心不支援系統呼叫。

符合標準

這些呼叫僅存在於 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= 啟動引數指定巨頁的最大數量。



previous next Printer Friendly

廣告


  

廣告



廣告
© . All rights reserved.