Linux下試驗大頁面對映(MAP HUGETLB

2021-07-25 17:19:00 字數 2451 閱讀 4136

linux對大頁面記憶體的引入對減少tlb的失效效果不錯,特別是記憶體大而密集型的程式,比如說在資料庫中的使用。innodb引擎就支援大頁面記憶體,具體使用可參見 這裡。

大頁面更詳細的資料可以參考: documentation/vm/hugetlbpage.txt

過去使用大頁面記憶體主要透過hugetlbfs需要mount檔案系統到某個點去,部署起來很不方便,我們只想要點匿名頁面,要搞的那麼麻煩嗎?

新的2.6.32核心通過支援map_hugetlb方式來使用記憶體,避免了煩瑣的mount操作,對使用者更友好。

參見man mmap:

這樣明顯會方便些,但是大記憶體頁面預留的操作還是要做的,我們來演示下,先來準備環境:

# uname -a

linux dr4000 2.6.32-131.17.1.el6.x86_64#1 smp wed oct 5 17:19:54 cdt 2011 x86_64 x86_64 x86_64 gnu/linux

# cat /proc/meminfo |grep -i huge

anonhugepages:      2048 kb

hugepages_total:       0

hugepages_free:        0

hugepages_rsvd:        0

hugepages_surp:        0

hugepagesize:       2048 kb

# sysctl vm.nr_hugepages=192

vm.nr_hugepages = 192

# cat /proc/meminfo |grep -i huge

anonhugepages:      2048 kb

hugepages_total:     192

hugepages_free:      192

hugepages_rsvd:        0

hugepages_surp:        0

hugepagesize:       2048 kb

從上面輸出可以看到我們的核心是2.6.32, 我用的是rhel 6u2發行版本,同時保留了192*2m頁面。

再來看演示**如下:

# cat huge.c

#include

#include

#include

int main(int argc, char *argv)

memset(m, 0, s);

printf("map_hugetlb ok, press enter to quit!\n");

getchar();

munmap(m, s);

return0;

}

# gcc huge.c

# ./a.out

map_hugetlb ok, press enter to quit!

我們成功用大頁面申請了8m記憶體,4個大頁面,同時進行清零操作成功,再munmap之前,我們需要確認記憶體確實是被我們使用了。

好,切換到另外乙個視窗來看下:

# cat /proc/meminfo |grep -i huge

anonhugepages:      2048 kb

hugepages_total:     192

hugepages_free:      188

hugepages_rsvd:        0

hugepages_surp:        0

hugepagesize:       2048 kb

是不是不費吹灰之力就成功了,這也說明核心天天在進步。

祝玩得開心!

Linux下多執行緒試驗(一)

今天練習linux下的多執行緒 將inculde後面的改為 不然部落格顯示不出來 include pthread.h include stdio.h include sys time.h include string.h void thread void int main void for i 0 ...

Linux下的位址對映

在cpu中設定四個 段暫存器 cs ds ss es 分別用於可執行 即指令,資料,堆疊和其他 每個段暫存器都是16位,對應位址匯流排的高16位。每條 訪內指令 的內部位址都是16位。訪內 的內部位址 16位 轉化成實際位址 20位 段暫存器中內基位址 4 內部位址 對於每乙個由段暫存器的內容確定的...

Linux下新增Windows磁碟對映

兩台windows機器下要共享檔案,可以很方便的通過對映網路驅動器實現。那麼,linux下怎麼像讀硬碟一樣讀取另一台windows機器的網路對映呢?其實,只需要幾條命令就可以了 首先,需要windows進行網路對映。將windows的乙個資料夾共享即可 共享 高階共享,輸入乙個共享名即可 然後,在l...