认识当前系统内存速度?

   memtest86

   yum install memtest86

   memtest-setup主板BIOS的Advanced Chipset Features(高级芯片组特性)设置页面中一般包含以下内存设置项:

   Set SDRAM Timing By SPD(根据SPD确定内存时序) 可选项:Disabled,Enabled。SPDSerial Presence Detect )是内存条上一个很小的芯片,它存储了内存条的工作参数信息。

如果使用优质的品牌内存,则可以将DRAM Timing By SPD设置成Enabled,此时,就无需对下面介绍的BIOS内存参数进行设置了,系统会自动根据SPD中的数据确定内存的运行参数。

有些兼容内存的SPD是空的或者感觉某些品牌内存的SPD参数比较保守,想充分挖掘其潜能,则可以将该参数设置成Disabled,这时,就可以对以下的内存参数进行

调整了。

   SDRAM CAS Latency Time(内存CAS延迟时间) 可选项:2,3。内存CAS(Column Address Strobe,列地址选通脉冲)

延迟时间控制SDRAM内存接收到一条数据读取指令后要等待多少个时钟周期才实际执行该指令。同时该参数也决定了在一次内存突发传送过程中完成第一部分传送所需要的时钟周期数。

这个参数越小,则内存的速度越快。在133MHz频率下,品质一般的兼容内存大多只能在CAS=3下运行,在CAS=2下运行会使系统不稳定、丢失数据甚至无法启动。CAS延迟时间是一个非常重要的内存参数,

对电脑性能的影响比>较大,Intel与VIA就PC133内存规范的分歧也与此参数有关,Intel认为PC133内存应能稳定运行于133MHz频>率、CAS=2下,而VIA认为PC133内存能稳定运行于133MHz频率即可,

并未特别指定CAS值,因此Intel的规范更加严格,一般只有品牌内存才能够满足此规范,所以大家感觉Intel的主板比较挑内存。

   SDRAM Cycle Time Tras/Trc(内存Tras/Trc时钟周期)可选项:5/7,7/9。该参数用于确定SDRAM内存行激活时间和行周期时间的时钟周期数。Tras代表SDRAM行激活时间(Row Active Time),

它是为进行

数据传输而开启行单元所需要的时钟周期数。Trc代表SDRAM行周期时间(Row Cycle Time),它是包括行单元开启和行单元刷新在内的整个过程所需要的时钟周期数。出于最佳性能考虑可将该参数设为5/7,

这时内存的速度较快,但有可能出现因行单元开启时间不足而影响数据传输的情况,在SDRAM内存的工作频率高于100MHz时尤其是这样,即使是品牌内存大多也承受不了如此苛刻的设置。

   SDRAM RAS-TO-CAS Delay(内存行地址传输到列地址的延迟时间)可选项:2,3。该参数可以控制SDRAM行地址选通脉冲(RAS,Row Address Strobe)信号与列地址选通脉冲信号之间的延迟

。对SDRAM进行>读、写或刷新操作时,需要在这两种脉冲信号之间插入延迟时钟周期。出于最佳性能考虑可将该参数设为2,如果系统无法稳定运行则可将该参数设为3。SDRAM RAS Precharge Time

(内存行地址选通脉冲预充电时间)可选项:2,3。该参数可以控制在

进行SDRAM刷新操作之前行地址选通脉冲预充电所需要的时钟周期数。将预充电时间设为2可以提高SDRAM的性能,但是如果2个时钟周期的预充电时间不足,

则SDRAM会因无法正常完成刷新操作而不能保持数据。  

内存扩展中遇到的问题?


    32bit    4294967296~~4G
            地址空间,例如PCI设备等等
            
            如果CPU指令中pae字样,32+4~36
            2^36 ~~~~64G
    64bit
            2^64 ~~~~18446744073709551616
大内存:
    PAE内核支持
        kernel-PAE.i686
系统中内存信息?
    free
    /proc/meminfo
BUFFER    缓存 (存)
CACHE    快取 (读)
=====================
CACHE:
    内存页    一页尺寸4kB
    对象文件系统 块block 1kB 2kB 4kB
                 扇区sectors 512b
/proc/sys/vm/drop_caches 
     手动清空buffer+cache 
# echo <n> > /proc/sys/vm/drop_caches 
       n == 1 : 释放page cache 
            2 : 释放dentries和inodes占用的 
            3 : 释放page cache和dentries、inodes 
=====================
BUFFER:
ps aux | grep [pdflush] 
   中括号代表内核线程 负责同步数据 
    /proc/sys/vm/nr_pdfush_threads
过期时间    
dirty_expire_centisecs
    2999    ~~30秒
巡检的时间
dirty_writeback_centisecs
    499        ~~5秒
当某一个进程占用BUFFER内存达到内存总量的40%。
dirty_ratio
    40
当进程占用BUFFER内存使得剩余内存低于内存总量10%。
dirty_background_ratio
    10
=================    
Hugepages On Linux

    每个进程都有独立的地址空间 0~4G    虚地址
        Kernel(TLB)
    物理内存的真实地址才是真正能用的。

    虚地址"AAABBBCCC"            真实物理地址
        40MB                    一页(4kB)
                                要满足要求10000页
                                
                                如果说一页(4MB)
                                满足要求10页
    数据库Mysql \ ORACLE ...

设置出来:
echo "10" > /proc/sys/vm/nr_hugepages
设置允许使用进程的GID:
cat /proc/sys/vm/hugetlb_shm_group
[root@teacher blues]# mount -t hugetlbfs hugetlbfs /opt/
hugetlbfs on /opt type hugetlbfs (rw)
=================
当内存不够用的时候,交换分区开使应用
交换分区喜好度
/proc/sys/vm/swappiness
    60
swapon -s
Filename                                Type            Size       Used    Priority
/dev/sda3                               partition       4192956    132     -1
优先级
    数字越小优先级越高
    1~......
如果你有两块硬盘
    添加两块SWAP分区,并且优先级相同。轮询使用
交换分区大小?
    2G mem     4G swap
    ---------------------------    
    64G mem  MEMCACHED   Swap 2G
    64G mem  ORACLE    Swap 128G
添加交换分区?
[root@teacher blues]# fdisk /dev/sda
[root@teacher blues]# partprobe /dev/sda
[root@teacher blues]# mkswap /dev/sda5 
Setting up swapspace version 1, size = 1011671 kB
[root@teacher blues]# swapon /dev/sda5
[root@teacher blues]# swapon -s
交换文件 
dd if=/dev/zero of=/tmp/swapfile bs=1024 count=1024000 
mkswap /tmp/swapfile 
swapon /tmp/swapfile 
swapon ­-s
=================
内存相关命令
功能全面的瑞士军刀:
vmstat 1 2
r: CPU 运行队列中等待运行进程的数量.
b: 在等待 I/O 的进程数
swpd:当前使用的交换区大小,单位KB。
free:当前的空闲内存,单位KB。
buff:当前用于Buffer 的内存大小,单位KB。
cache:当前用于Cache 的内存大小,单位KB。
si:从磁盘换页到内存的数量,简称页入。单位,KB/s。
so:从内存换页到磁盘的数量,简称页出。单位,KB/s。
bi:发送到块设备的块数,单位:块/s。
bo:从块设备收到的块数,单位:块/s。
in:每秒的中断数,包括时钟中断。
cs:每秒的上下文切换数。
us:用户占用CPU。
sy:系统占用CPU。
id:空闲CPU。
wa:等待I/O 的CPU 时间。
内存跟交换分区使用情况:
sar ­-r
交换分区,交换情况。
sar -W
内存页进出磁盘的情况。
sar -­B
=================
如何知道内存不足?!!!
    内存使用            Free大小来判断     
    SWAP空间的使用    使用大小,SWAP交换频率
                不光内存中程序变慢,还有Disk I/O 也受影响
    交换空间都没有啦    杀进程换取内存
=================
内存磁盘:
DISK -> RAMDISK
-
mount -t tmpfs tmpfs /var/www/html -o size=100000
cp -r /var/www/html_bak/* /var/www/html
service httpd start
-

=================(当前HTTPD进程占用内存?)

ps -axo "pid,comm,rss" --sort rssTLB

TLB:Translation Lookaside Buffer.

根据功能可以译为快表,直译可以翻译为旁路转换缓冲,也可以把它理解成页表缓冲。里面存放的是一些页表文件(虚拟地址到物理地址的转换表)。当处理器要在主内存寻址时,

不是直接在内存的物理地址里查找的,而是通过一组虚拟地址转换到主内存的物理地址,TLB就是负责将虚拟内存地址翻译成实际的物理内存地址,而CPU寻址时会优先在TLB中进行寻址。

处理器的性能就和寻址的命中率有很大的关系。

映射机制必须使一个程序能断言某个地址在其自己的进程空间或地址空间内,并且能够高效的将其转换为真实的物理地址以访问内存。一个方法是使用一个含有整个空间内所有页的入口(entry)的表

(即页表),每个入口包含这个页的正确物理地址。这很明显是个相当大的数据结构,因而不得不存放于主存之中。

由于CPU首先接到的是由程序传来的虚拟内存地址,所以CPU必须先到物理内存中取页表,然后对应程序传来的虚拟页面号,在表里找到对应的物理页面号,

最后才能访问实际的物理内存地址,也就是说整个过程中CPU必须访问两次物理内存(实际上访问的次数更多)。因此,为了减少CPU访问物理内存的次数,引入TLB。

====================================================


     cpu                                         内存


     TLB   <============================>    内存页表


     L1 Cache <=====>L2 Cache<=========>    内存数据


====================================================

TLB种类

TLB在X86体系的CPU里的实际应用最早是从Intel的486CPU开始的,在X86体系的CPU里边,一般都设有如下4组TLB:

第一组:缓存一般页表(4K字节页面)的指令页表缓存(Instruction-TLB);

第二组:缓存一般页表(4K字节页面)的数据页表缓存(Data-TLB);

第三组:缓存大尺寸页表(2M/4M字节页面)的指令页表缓存(Instruction-TLB);

第四组:缓存大尺寸页表(2M/4M字节页面)的数据页表缓存(Instruction-TLB);

图中可见,当CPU执行机构收到应用程序发来的虚拟地址后,首先到TLB中查找相应的页表数据,如果TLB中正好存放着所需的页表,则称为TLB命中(TLB Hit)

接下来CPU再依次看TLB中页表所对应的物理内存地址中的数据是不是已经在一级、二级缓存里了,若没有则到内存中取相应地址所存放的数据。如果TLB中没有所需的页表,

则称为TLB失败(TLB Miss),接下来就必须访问物理内存中存放的页表,同时更新TLB的页表数据。

既然说TLB是内存里存放的页表的缓存,那么它里边存放的数据实际上和内存页表区的数据是一致的,在内存的页表区里,每一条记录虚拟页面和物理页框对应关系的记录称之为一个页表条目(Entry)

,同样地,在TLB里边也缓存了同样大小的页表条目(Entry)。由于页表条目的大小总是固定不变的,所以TLB的容量越大,则它所能存放的页表条目数越多(类似于增大CPU一级、二级缓存容量的作用),

这就意味着缓存命中率的增加,这样,就能大大减少CPU直接访问内存的次数,实现了性能提升。

TLB的联合方式:

TLB内部存储空间被划分为大小相同的块(即TLB页表条目),这些块的大小=内存的页表区里页表条目的大小.

所以,就可以在TLB页表条目和内存页表条目间建立一定的相互对应关系。当CPU需要页表数据时,它必须迅速做出如下的2个判断:一个是所需要的页表是否已缓存在TLB内部(即判断TLB命中或是失败),

一个是所需要的页表在TLB内的哪个条目内。为了尽量减少CPU做出这些判断所需的时间,就必须在TLB页表条目和内存页表条目之间的对应方式上动点脑筋,下面是几种常见的对应关系。