2024年6月3日发(作者:改晓筠)
TLB的基本概念:
TLB:Translationlookasidebuffer,即旁路转换缓冲,或称为页表缓冲;里面存放的是一
些页表文件(虚拟地址到物理地址的转换表)。
X86保护模式下的寻址方式:段式逻辑地址—〉线形地址—〉页式地址;
页式地址=页面起始地址+页内偏移地址;
对应于虚拟地址:叫page(页面);对应于物理地址:叫frame(页框);
X86体系的系统内存里存放了两级页表,第一级页表称为页目录,第二级称为页表。
TLB和CPU里的一级、二级缓存之间不存在本质的区别,只不过前者缓存页表数据,
而后两个缓存实际数据。
二:内部组成:
1:TLB在X86体系的CPU里的实际应用最早是从Intel的486CPU开始的,在X86体
系的CPU里边,一般都设有如下4组TLB:
第一组:缓存一般页表(4K字节页面)的指令页表缓存(Instruction-TLB);
第二组:缓存一般页表(4K字节页面)的数据页表缓存(Data-TLB);
第三组:缓存大尺寸页表(2M/4M字节页面)的指令页表缓存(Instruction-TLB);
第四组:缓存大尺寸页表(2M/4M字节页面)的数据页表缓存(Data-TLB);
2:TLB命中和TLB失败
果TLB中正好存放着所需的页表,则称为TLB命中(TLBHit);如果TLB中没有所
需的页表,则称为TLB失败(TLBMiss)。
3:TLB条目数
即页表条目数,Entry!
4:TLB的联合方式
1〉全联合方式:AthlonXP
2〉4路联合方式:P4
当CPU执行机构收到应用程序发来的虚拟地址后,首先到TLB中查找相应的页表数据,
如果TLB中正好存放着所需的页表,则称为TLB命中(TLBHit),接下来CPU再依次看TLB
中页表所对应的物理内存地址中的数据是不是已经在一级、二级缓存里了,若没有则到内存
中取相应地址所存放的数据。既然说TLB是内存里存放的页表的缓存,那么它里边存放的
数据实际上和内存页表区的数据是一致的,在内存的页表区里,每一条记录虚拟页面和物理
页框对应关系的记录称之为一个页表条目(Entry),同样地,在TLB里边也缓存了同样大
小的页表条目(Entry)。
1.共享内存概述
共享内存允许两个或更多进程共享一给定的存储区。因为数据不需要在各个进程之间复
制,所以这是最快的一种进程间通信方式。使用共享内存时的关键点在于如何在多个进程之
间对一给定的存储区进行同步访问。
例如若一个进程正在将数据放入共享内存区,则在它做完这一操作之前,其他进程不应
该去取这些数据。通常,信号量被用来实现对共享内存访问的同步。
我们可以修改shmmax内核参数,使SGA存在于一个共享内存段中。
通过修改/proc/sys/kernel/shmmax参数可以达到此目的。
[root@neirongroot]#echo1073741824>/proc/sys/kernel/shmmax
[root@neirongroot]#more/proc/sys/kernel/shmmax
1073741824这里设为1G。
对于shmmax文件的修改,系统重新启动后会复位。可以通过修改/etc/使更改永
久化。
在该文件内添加以下一行=1073741824这个更改在系统重新启动后生
效.
1、设置SHMMAX
SHMMAX
参数定义共享内存段的最大尺寸(以字节为单位)。在设置SHMMAX时,切记SGA的大
小应该适合于一个共享内存段。SHMMAX设置不足可能会导致以下问题:
ORA-27123:unabletoattachtosharedmemorysegment
您可以通过执行以下命令来确定SHMMAX的值:
#cat/proc/sys/kernel/shmmax
33554432
SHMMAX的默认值是32MB。我一般使用下列方法之一种将SHMMAX参数设为
2GB:
通过直接更改/proc文件系统,你不需重新启动机器就可以改变SHMMAX的默认
设置。我使用的方法是将以下命令放入/etc/启动文件中:
#>echo"2147483648">/proc/sys/kernel/shmmax
您还可以使用sysctl命令来更改SHMMAX的值:
#=2147483648
最后,通过将该内核参数插入到/etc/启动文件中,您可以使这种更改永久
有效:
#echo"=2147483648">>/etc/
2、设置SHMMNI
我们现在来看SHMMNI参数。这个内核参数用于设置系统范围内共享内存段的最
大数量。该参数的默认值是4096。这一数值已经足够,通常不需要更改。
您可以通过执行以下命令来确定SHMMNI的值:
#cat/proc/sys/kernel/shmmni
4096
3、设置SHMALL
最后,我们来看SHMALL共享内存内核参数。该参数控制着系统一次可以使用的
共享内存总量(以页为单位)。简言之,该参数的值始终应该至少为:
ceil(SHMMAX/PAGE_SIZE)
SHMALL的默认大小为2097152,可以使用以下命令进行查询:
#cat/proc/sys/kernel/shmall
2097152
SHMALL的默认设置对于我们的Oracle9iRAC安装来说应该足够使用。
注意:在i386平台上RedHatLinux的页面大小为4096字节。但是,您可以
使用bigpages,它支持配置更大的内存页面尺寸。
2024年6月3日发(作者:改晓筠)
TLB的基本概念:
TLB:Translationlookasidebuffer,即旁路转换缓冲,或称为页表缓冲;里面存放的是一
些页表文件(虚拟地址到物理地址的转换表)。
X86保护模式下的寻址方式:段式逻辑地址—〉线形地址—〉页式地址;
页式地址=页面起始地址+页内偏移地址;
对应于虚拟地址:叫page(页面);对应于物理地址:叫frame(页框);
X86体系的系统内存里存放了两级页表,第一级页表称为页目录,第二级称为页表。
TLB和CPU里的一级、二级缓存之间不存在本质的区别,只不过前者缓存页表数据,
而后两个缓存实际数据。
二:内部组成:
1:TLB在X86体系的CPU里的实际应用最早是从Intel的486CPU开始的,在X86体
系的CPU里边,一般都设有如下4组TLB:
第一组:缓存一般页表(4K字节页面)的指令页表缓存(Instruction-TLB);
第二组:缓存一般页表(4K字节页面)的数据页表缓存(Data-TLB);
第三组:缓存大尺寸页表(2M/4M字节页面)的指令页表缓存(Instruction-TLB);
第四组:缓存大尺寸页表(2M/4M字节页面)的数据页表缓存(Data-TLB);
2:TLB命中和TLB失败
果TLB中正好存放着所需的页表,则称为TLB命中(TLBHit);如果TLB中没有所
需的页表,则称为TLB失败(TLBMiss)。
3:TLB条目数
即页表条目数,Entry!
4:TLB的联合方式
1〉全联合方式:AthlonXP
2〉4路联合方式:P4
当CPU执行机构收到应用程序发来的虚拟地址后,首先到TLB中查找相应的页表数据,
如果TLB中正好存放着所需的页表,则称为TLB命中(TLBHit),接下来CPU再依次看TLB
中页表所对应的物理内存地址中的数据是不是已经在一级、二级缓存里了,若没有则到内存
中取相应地址所存放的数据。既然说TLB是内存里存放的页表的缓存,那么它里边存放的
数据实际上和内存页表区的数据是一致的,在内存的页表区里,每一条记录虚拟页面和物理
页框对应关系的记录称之为一个页表条目(Entry),同样地,在TLB里边也缓存了同样大
小的页表条目(Entry)。
1.共享内存概述
共享内存允许两个或更多进程共享一给定的存储区。因为数据不需要在各个进程之间复
制,所以这是最快的一种进程间通信方式。使用共享内存时的关键点在于如何在多个进程之
间对一给定的存储区进行同步访问。
例如若一个进程正在将数据放入共享内存区,则在它做完这一操作之前,其他进程不应
该去取这些数据。通常,信号量被用来实现对共享内存访问的同步。
我们可以修改shmmax内核参数,使SGA存在于一个共享内存段中。
通过修改/proc/sys/kernel/shmmax参数可以达到此目的。
[root@neirongroot]#echo1073741824>/proc/sys/kernel/shmmax
[root@neirongroot]#more/proc/sys/kernel/shmmax
1073741824这里设为1G。
对于shmmax文件的修改,系统重新启动后会复位。可以通过修改/etc/使更改永
久化。
在该文件内添加以下一行=1073741824这个更改在系统重新启动后生
效.
1、设置SHMMAX
SHMMAX
参数定义共享内存段的最大尺寸(以字节为单位)。在设置SHMMAX时,切记SGA的大
小应该适合于一个共享内存段。SHMMAX设置不足可能会导致以下问题:
ORA-27123:unabletoattachtosharedmemorysegment
您可以通过执行以下命令来确定SHMMAX的值:
#cat/proc/sys/kernel/shmmax
33554432
SHMMAX的默认值是32MB。我一般使用下列方法之一种将SHMMAX参数设为
2GB:
通过直接更改/proc文件系统,你不需重新启动机器就可以改变SHMMAX的默认
设置。我使用的方法是将以下命令放入/etc/启动文件中:
#>echo"2147483648">/proc/sys/kernel/shmmax
您还可以使用sysctl命令来更改SHMMAX的值:
#=2147483648
最后,通过将该内核参数插入到/etc/启动文件中,您可以使这种更改永久
有效:
#echo"=2147483648">>/etc/
2、设置SHMMNI
我们现在来看SHMMNI参数。这个内核参数用于设置系统范围内共享内存段的最
大数量。该参数的默认值是4096。这一数值已经足够,通常不需要更改。
您可以通过执行以下命令来确定SHMMNI的值:
#cat/proc/sys/kernel/shmmni
4096
3、设置SHMALL
最后,我们来看SHMALL共享内存内核参数。该参数控制着系统一次可以使用的
共享内存总量(以页为单位)。简言之,该参数的值始终应该至少为:
ceil(SHMMAX/PAGE_SIZE)
SHMALL的默认大小为2097152,可以使用以下命令进行查询:
#cat/proc/sys/kernel/shmall
2097152
SHMALL的默认设置对于我们的Oracle9iRAC安装来说应该足够使用。
注意:在i386平台上RedHatLinux的页面大小为4096字节。但是,您可以
使用bigpages,它支持配置更大的内存页面尺寸。