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);
return
0;
}
# 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...