【转载】Linux下配置TimesTen使用HugePage

一、为何要使用HugePage
使用HugePage能够有效减少整个系统的内存页数目,从而有效高TLB(Translation Lookaside Buffer)的命中率,也就是提高从虚拟内存向物理内存映射的速度。默认情况下,Linux的一个内存页是4K,而HugePage是2M (Linux 2.4-2.6)。请参考 Linux下hugetlbpage使用详解
二、设置内核参数 kernel.shmmax 和 kernel.shmall
shmmax定义了Linux能为单一的共享内存分配最大值(单位:字节),shmall则定义了系统能够使用的共享内存的页数。所以shmall的最小值是:ceil(shmmax/PAGE_SIZE)
假设我们的TimesTen的DataStore需要 400GB的Perm Space, 400G的Temp Space, Logger Buffer的大小是1G,那么共享内存需要400G+400G+1G+20MB的 DB Header=820244MB,那么我们可以把共享内存的最大值设为1T,HugePage的值设为820244MB

# /sbin/sysctl -w kernel.shmmax=1099511627776 (1024GB)
# /sbin/sysctl -w kernel.shmall=536870912(=268435456/4096, 4096 is the page size)

另外把信号量Semaphore设为2048

# /sbin/sysctl -w kernel.sem="2048       64000   128     128"


三、设置系统的HugePage数目
根据上面的计算,需要的HugePage的内存数目是820244MB,每个HugePage的大小是2M,则需要820244/2 = 410122个HugePage。
# /sbin/sysctl -w vm.nr_hugepages = 410122
# /sbin/sysctl -w vm.hugetlb_shm_group = 501
其中501是TimesTen的DBA所属的组ID号。

$ id
uid=500(oracle) gid=501(oinstall) groups=500(dba),501(oinstall)

为了避免重启系统生效,直接执行以下命令,让操作系统立刻分配这么多HugePage的内存,这个时候会发现sysctl很忙,并且操作系统的Free的内存逐渐减少,直至分配内存的任务完成

# echo "410122" > /proc/sys/vm/nr_hugepages

在下图中我们为系统分配了270个HugePage页,目前都是空闲的。页的大小是2M

# cat /proc/meminfo |grep Huge
HugePages_Total: 270
HugePages_Free: 270
HugePages_Rsvd: 0
Hugepagesize: 2048 kB

四、设置TimesTen的Daemon参数
在$TT_HOME//info/ttendaemon.options中加入一行-linuxLargePageAlignment X,其中X是HugePage的大小,单位为MB,这里为2M

-linuxLargePageAlignment 2

五、启动TT的DataStore,并检查效果
TT设置的内存PermSize+TempSize+LogerBuffer+20MB=400+32+64(LogBuf的默认大小)+20(DB Header)=516M,这是计算的结果

[sampledb_1122]
Driver=/home/oracle/TimesTen/tt1122/lib/libtten.so
DataStore=/home/oracle/TimesTen/tt1122/info/DemoDataStore/sampledb_1122
Connections=10
PermSize=400
TempSize=32
PLSQL=1
DatabaseCharacterSet=US7ASCII

来看TT实际使用的结果,看到TT正确的使用了Large Pages,并且成功锁定了(不进行交换),共享内存的ID号是4259844

$ ttstatus
TimesTen status report as of Mon Jun 4 22:18:21 2012

Daemon pid 4266 port 53396 instance tt1122
TimesTen server pid 4275 started on port 53397
------------------------------------------------------------------------
Data store /home/oracle/TimesTen/tt1122/info/DemoDataStore/sampledb_1122
There are 12 connections to the data store
Shared Memory KEY 0x40007c13 ID 4259844 (LARGE PAGES, LOCKED)
PL/SQL Memory KEY 0x41007c13 ID 4292613 Address 0x7fa0000000

看这块共享内存的实际大小:541065216/1024/1024=516,和计算的值完全相同。

$ ipcs -m

------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x45007b1d 4227075 oracle 660 1048576 1
0x40007c13 4259844 oracle 660 541065216 2
0x41007c13 4292613 oracle 660 33554432 2

以下的数据目前还是无法解释,为什么分配出去的不到516M ?(270-56)×2=428,但如果把TT关闭,则所有的HugePage全部释放

# cat /proc/meminfo |grep Huge
HugePages_Total: 270
HugePages_Free: 52
HugePages_Rsvd: 40
Hugepagesize: 2048 kB

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值