huge page

使用大页面最大的好处是提高TLB的命中率。对于单个进程,它可以一部分内存是4K的大小page,一部分内存是2M大小的page。操作系统本身在kernel mode下已经很广泛的使用大页面。

windows下在C/C++程序中使用大页面:
http://msdn.microsoft.com/en-us/library/aa366720(VS.85).aspx

要让linux支持大页面,需要在编译kernel的时候打开CONFIG_HUGETLBFS和CONFIG_HUGETLB_PAGE (在file systems下)
具体参见:http://www.mjmwired.net/kernel/Documentation/vm/hugetlbpage.txt

linux/windows下在java中使用大页面:
http://java.sun.com/javase/technologies/hotspot/largememory.jsp

freebsd对大页面的支持是从7.2开始的。用sysctl设置vm.pmap.pg_ps_enabled=1,操作系统会自动选择page size。因为这个也是最近一两年新加进来的,所以文档比较少。

至于数据库中的PAGE_SIZE为什么通常是4K,这个是为了保持和文件系统的block size保持一致。在class PageFile中使用pread/pwrite读写文件的时候,操作系统首先会去文件系统的cache里面查找。如果db.h的PAGE_SIZE小于文件系统的block size而这部分文件内容又不在cache中,可能会导致操作系统必须先执行一次read操作把数据读出来,然后modify一部分,然后写入磁盘。如果db.h的PAGE_SIZE大于文件系统的block size,会导致单个page的读写在kernel中需要执行多次read/write。

在linux下用xfs_info可以查看xfs的block size,bsize字段就是。

此博客中的热门博文

少写代码,多读别人写的代码

在windows下使用llvm+clang

tensorflow distributed runtime初窥