首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

在 Linux on POWER 上利用透明大内存页(4)设置 libhugetlbfs

在 Linux on POWER 上利用透明大内存页(4)设置 libhugetlbfs

设置 libhugetlbfs本节介绍下载、安装和设置        libhugetlbfs 的步骤。
要用 libhugetlbfs 设置系统并定义系统大内存页,需要对此系统具有根访问权限。我还将介绍几种方法,一旦系统设置完毕,借助这些方法,非根用户也可以使用大内存页。
要安装 libhugetlbfs,可以通过如下方式:
  • 如果您已经注册了 SUSE 支持,就可以从 Novell SUSE maintweb 支持站点访问最新的          libhugetlbfs rpms(注意:该站点只面向注册用户)。在本文编写之时,针对 SLES 10 所建议(和支持)的最新的 rpm 如下:
    • libhugetlbfs-1.0.1-1.4.ppc.rpm
    • libhugetlbfs-64bit-1.0.1-1.4.ppc.rpm
    在 SLES 10 最初刚刚可用的时候所提供的默认 libhugetlbfs 库已经过时,我建议最好不要使用它们,包括:
    • libhugetlbfs-1.0-16.2.ppc.rpm
    • libhugetlbfs-64bit-1.0-16.2.ppc.rpm
    安装了建议的库之后,可继续到本文的  一节。
  • 在 RHEL 5,需要安装如下 5 个 rpm:
    • libhugetlbfs-1.0.1-1.el5.ppc.rpm
    • libhugetlbfs-devel-1.0.1-1.el5.ppc.rpm
    • libhugetlbfs-devel-1.0.1-1.el5.ppc64.rpm
    • libhugetlbfs-lib-1.0.1-1.el5.ppc.rpm
    • libhugetlbfs-lib-1.0.1-1.el5.ppc64.rpm
  • 作为一种替代方案,您也可以从 SourceForge(参见 )获得副本并构建和安装此版本。我接下来就会介绍这种方法。
从 SourceForge 安装从 SourceForge,单击 Download libhugetlbfs 按钮,如  所示,并遵循如下操作指导来下载 tar ball。对于本文而言,Version 1.0.1 级是经测试的且可由 SUSE 和        Red Hat 支持。
图 1. SourceForge libhugetlbfs          页将 tar ball 下载到系统。libhugetlbfs        make install 过程会将所需的文件复制到系统中合适的位置。我建议通过指定 make install PREFIX=/usr 在系统的 /usr  子目录安装 libhugetlbfs,如  所示。您需要根访问权限才能安装。
清单 4. 安装 libhugetlbfs
1
2
3
4
5
6
7
8
9
10
# tar -zxf libhugetlbfs-1.0.1.tar.gz
# cd libhugetlbfs-1.0.1
# make
     ...               <---- not showing "make" messages here ...
# make install PREFIX=/usr
     VERSION
     INSTALL32 /usr/lib
     INSTALL64 /usr/lib64
     OBJSCRIPT ld.hugetlbfs
     INSTALL




如果察看 /usr/share/libhugetlbfs/ 目录,您会发现 ld,它是新的链接器命令。参看 。ld 命令被软链接到 ld.hugetlbfs 以方便 GNU Compiler Collection (GCC) 和 IBM 编译器调用此链接器。
清单 5. /usr/share/libhugetlbfs/ 显示 ld 命令
1
2
3
4
5
# ls -l /usr/share/libhugetlbfs
total 8
lrwxrwxrwx 1 root root   12 2006-11-26 12:42 ld -> ld.hugetlbfs
-rwxr-xr-x 1 root root 1321 2006-11-26 12:42 ld.hugetlbfs
drwxr-xr-x 2 root root 4096 2006-11-26 12:42 ldscripts




中所示的 ldscripts 子目录包含所有修改后的链接器脚本,这些脚本是处理重链接 .bss、.data 和 .text 段所必需的。
清单 6.  /usr/share/libhugetlbfs/ 的 ldscripts 子目录
1
2
3
/usr/share/libhugetlbfs/ldscripts # ls
elf32ppclinux.xB    elf64ppc.xB    elf_i386.xB    elf_x86_64.xB
elf32ppclinux.xBDT  elf64ppc.xBDT  elf_i386.xBDT  elf_x86_64.xBDT




libhugetlbfs 包附带了很多自动测试包,这些测试包可通过 make 调用。这些测试主要由 libhugetlbfs 包开发人员及内核维护人员使用,这是因为更改是对系统做出的。如果您运行的是受支持的操作系统级和内核,则无需运行这些测试,对于该包的一般用户来说更应如此,因为测试的输出对于这些用户来说过于晦涩难懂。
libhugetlbfs 提供的另一个重要文件是        libhugetlbfs.so 库,如  所示。该库在运行时调用,可控制大内存页的系统使用。这类库分别针对        32 位应用程序和 64 位应用程序提供。
清单 7. libhugetlbfs.so 库
1
2
3
4
5
# ls -l /usr/lib/libhugetlbfs.so
-rwxr-xr-x 1 root root 54785 2006-11-26 12:42 /usr/lib/libhugetlbfs.so
   
# ls -l /usr/lib64/libhugetlbfs.so
-rwxr-xr-x 1 root root 63910 2006-11-26 12:42 /usr/lib64/libhugetlbfs.so




分配大内存页要设置系统使之使用大内存页,需要首先分配大内存页。对于 Linux,就是复制(回显)想要分配进 /proc/sys/vm 控件的大内存页数量的值,如  所示。该操作系统试图分配所请求的大内存页。分配 意指将页隐藏起来并将它们保留在物理内存池外。这些页尚未使用。系统也未给出任何指示,说明它未能分配所有请求的大内存页。所以您请求完这些页后,总是需要检查实际保留了多少页。                    
清单 8. 用 /proc/sys/vm 分配大内存页
1
2
3
4
5
6
7
8
9
10
11
12
13
# cat /proc/meminfo | grep Huge
HugePages_Total:     0
HugePages_Free:      0
HugePages_Rsvd:      0
Hugepagesize:    16384 kB
     
# echo 200 > /proc/sys/vm/nr_hugepages
      
# cat /proc/meminfo | grep Huge
HugePages_Total:   200
HugePages_Free:    200
HugePages_Rsvd:      0
Hugepagesize:    16384 kB




定义 hugetlbfs        文件系统libhugetlbfs 使用虚拟的文件系统接口,hugetlbfs。要设置该接口,需要创建挂载点并挂载虚拟文件系统。文件系统可以命名为任何惟一的名称,在本例中,使用挂载点 libhugetlbfs。
您所定义的  hugetlbfs 可以控制谁有对系统大内存页的访问权,所以很有必要设置一个对系统大内存页有访问权的用户组。注意,本例在系统上创建一个特殊的组(libhuge)来控制对         hugetlbfs 的访问,参见 。您应该将授权用户添加到该组,只有这些用户可以访问由 libhugetlbfs 使用的大内存页。
清单 9. 定义 hugetlbfs 文件系统
1
2
3
4
5
6
7
8
9
# mkdir /libhugetlbfs
   
# groupadd libhuge
# chgrp libhuge /libhugetlbfs
# chmod 770 /libhugetlbfs

# usermod wmb  -G libhuge    <---- assumes "wmb" is a user on the system

# mount  -t hugetlbfs  hugetlbfs  /libhugetlbfs




Linux 操作系统使用这个特殊的文件系统来控制到与 16MB 大内存页相关的物理内存的访问和控制。您所创建的文件系统的名称是什么并不重要,对于一般的使用来说,您应当定义和使用单一的文件系统。请记住          hugetlbfs 的 “挂载” 只是暂时的,而且它不会在引导时被自动重新挂载,除非您更改了        /etc/fstab。要使此更改永久有效,需要编辑此文件并添加如下所示的可应用行:        
1
# vi /etc/fstab




                    然后将该行添加到此文件,如  所示。注意        gid=1000 假设 libhuge 组 ID 是        1000。
清单 10. 将 libhugetlbfs 挂载添加到 /etc/fstab
1
2
3
4
5
6
7
8
/dev/sda3            /                    ext3       acl,user_xattr        1 1
/dev/sda2            swap                 swap       defaults              0 0
proc                 /proc                proc       defaults              0 0
sysfs                /sys                 sysfs      noauto                0 0
debugfs              /sys/kernel/debug    debugfs    noauto                0 0
devpts               /dev/pts             devpts     mode=0620,gid=5       0 0
/dev/fd0             /media/floppy        auto       noauto,user,sync      0 0
hugetlbfs            /libhugetlbfs        hugetlbfs  mode=0770,gid=1000    0 0




libhugetlbfs 准备就绪至此,就完成了 libhugetlbfs 库的基本设置,包括:
  • 了解了对使用 libhugetlbfs 的一些考虑
  • 下载并安装了 libhugetlbfs(方法可以是从 SourceForge 安装,也可以利用 SLES 10 或 RHEL 5 发行版的最新 rpm 文件)
  • 通过创建、挂载和限制对虚拟 hugetlbfs 的访问设置 libhugetlbfs
  • 定义了可由用户使用的一个大内存页池
现在,用户就可以使用透明大内存页了。
返回列表