Chinaunix首页 | 论坛 | 博客
  • 博客访问: 564431
  • 博文数量: 201
  • 博客积分: 7734
  • 博客等级: 少将
  • 技术积分: 1994
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-09 19:18
文章分类

全部博文(201)

文章存档

2011年(28)

2010年(173)

分类: LINUX

2010-07-10 15:41:52

[文章作者:曾庆华 转载请注明原文链接:http://linscora.cublog.cn]
 
内存地址分为物理地址和虚拟地址:它们之间存在转换的关系。

x86最多支持4GiB内存。

x86_64系统最多支持1Tib的内存。但redhat的系统只支持256GiB的内存。

X86支持的内存地址空间的计算方法为
2^32
4294967296 Bytes
2^32/1024/1024/1024   KiB   MiB   GiB
4

那么64位操作系统理论因该为
2^64/1024/1024/1024
17179869184 GiB

但是我们说他只支持1TiB的内存寻址空间呢?
因为我们64位系统并没有用到64位寻址。
只用到了40位寻址空间
2^40/1024/1024/1024
1024
而红帽只支持38位
2^38/1024/1024/1024
256

查看本机内存大小:
[linscora@linscora ~]$ /usr/bin/sudo /bin/grep Memory /var/log/messages
口令:
Mar 28 14:54:23 linscora kernel: Memory for crash kernel (0x0 to 0x0) notwithin permissible range
Mar 28 14:54:23 linscora kernel: Memory: 1550440k/1572224k available (2154k kernel code, 20432k reserved, 899k data, 232k init, 654720k highmem)
Mar 28 14:54:24 linscora kernel: pcmcia: parent PCI bridge Memory window: 0xc0200000 - 0xcfffffff
Mar 28 14:54:24 linscora kernel: pcmcia: parent PCI bridge Memory window: 0xe8000000 - 0xefffffff
Mar 28 14:54:24 linscora kernel: pcmcia: parent PCI bridge Memory window: 0xc0200000 - 0xcfffffff
Mar 28 14:54:24 linscora kernel: pcmcia: parent PCI bridge Memory window: 0xe8000000 - 0xefffffff

Swap 我们的系统都会为一个swap分区,它是当我们的内存不足的时候。把数据给Swap处理。还有一种情况就是我们系统内存中长期不调用或数据内容不变的数据也放在swap中。减少内存的占用。

虚拟地址空间:虚拟地址空间它并不是虚拟内存。它是一个不存在的东西。没有任何实际意义。在32位的操作系统为每一个进程都分配了一个4GiB的虚拟地址空间

物理地址空间: 包括物理内存和虚拟内存
1、虚拟地址(就是4GiB的虚拟地址空间)必须转换成物理页桢
2、它是通过硬件上的内存管理单元来完成的。
3、物理页可能是不连续的。程序申请的虚拟内存是连续的,但是映射的时候可能并不是连续的。
4、物理内存可是RAM或者是swap,物理内存跟虚拟内存是一一对应的关系。

加注:32位的cpu说明该cpu的寄存器是32位,数据总线是32位,虚拟地址空间是32位,而其可寻址的物理地址的地址空间却不一定是32位,这取决于cpu的引脚上有多少条地址线,也取决于这些地址线连接了多大的内存。MUU > Memory ManagerMent Unit.是负责映射虚拟地址和物理地址的。

查看进程耗用的物理地址空间:
[linscora@linscora ~]$ /usr/bin/sudo /bin/cat /proc/1/status
口令:
Name:   init
State:  S (sleeping)
SleepAVG:       98%
Tgid:   1
Pid:    1
PPid:   0
TracerPid:      0
Uid:    0       0       0       0
Gid:    0       0       0       0
FDSize: 32
Groups:
VmPeak:     2076 kB  这个进程在峰值的时候用了2076个KiB的物理内存
VmSize:     2072 kB  这个进程当现的使用数大小
VmLck:         0 kB
VmHWM:       652 kB
VmRSS:       652 kB   真实内存
VmData:      196 kB   数据区耗用的内存
VmStk:        84 kB
VmExe:        32 kB
VmLib:      1712 kB
VmPTE:        24 kB
StaBrk: 08dce000 kB
Brk:    08def000 kB
StaStk: bf97f6d0 kB
ExecLim:        08050000
Threads:        1
SigQ:   1/24566
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: fffffffe57f0d8fc
SigCgt: 00000000280b2603
CapInh: 0000000000000000
CapPrm: 00000000ffffffff
CapEff: 00000000fffffeff
Cpus_allowed:   00000001
Mems_allowed:   1

这个进程的总共使用内存是用pmap来查:
[linscora@linscora proc]$ /usr/bin/pmap 4097
4097:   /usr/lib/scim-1.0/scim-launcher -d -c simple -e all -f socket --no-stay
00110000     64K r-x--  /usr/lib/libchewing.so.3.0.0
00120000     20K rwx--  /usr/lib/libchewing.so.3.0.0
00125000   3100K rwx--    [ anon ]
0042c000     12K r-x--  /usr/lib/gconv/EUC-CN.so
0042f000      8K rwx--  /usr/lib/gconv/EUC-CN.so
00431000     64K r-x--  /usr/lib/gconv/libGB.so
00441000      8K rwx--  /usr/lib/gconv/libGB.so
00448000     36K r-x--  /lib/libnss_files-2.5.so
00451000      4K r-x--  /lib/libnss_files-2.5.so
00452000      4K rwx--  /lib/libnss_files-2.5.so
00453000     96K r-x--  /usr/lib/scim-1.0/IMEngine/chinese-standard-im.so
0046b000      4K rwx--  /usr/lib/scim-1.0/IMEngine/chinese-standard-im.so
0046c000    472K r-x--  /usr/lib/scim-1.0/1.4.0/IMEngine/pinyin.so
004e2000      8K rwx--  /usr/lib/scim-1.0/1.4.0/IMEngine/pinyin.so
004e4000    296K r-x--  /usr/lib/scim-1.0/1.4.0/IMEngine/table.so
0052e000      4K rwx--  /usr/lib/scim-1.0/1.4.0/IMEngine/table.so
0052f000     84K r-x--  /usr/lib/scim-1.0/1.4.0/FrontEnd/socket.so
00544000      4K rwx--  /usr/lib/scim-1.0/1.4.0/FrontEnd/socket.so
0072d000     60K r-x--  /usr/lib/scim-1.0/1.4.0/IMEngine/chewing.so
0073c000      4K rwx--  /usr/lib/scim-1.0/1.4.0/IMEngine/chewing.so
00822000     40K r-x--  /usr/lib/scim-1.0/1.4.0/Config/simple.so
0082c000      4K rwx--  /usr/lib/scim-1.0/1.4.0/Config/simple.so
009bb000    104K r-x--  /lib/ld-2.5.so
009d5000      4K r-x--  /lib/ld-2.5.so
009d6000      4K rwx--  /lib/ld-2.5.so
009d9000   1276K r-x--  /lib/libc-2.5.so
00b18000      4K --x--  /lib/libc-2.5.so
00b19000      8K r-x--  /lib/libc-2.5.so
00b1b000      4K rwx--  /lib/libc-2.5.so
00b1c000     12K rwx--    [ anon ]
00b21000      8K r-x--  /lib/libdl-2.5.so
00b23000      4K r-x--  /lib/libdl-2.5.so
00b24000      4K rwx--  /lib/libdl-2.5.so
00b27000    148K r-x--  /lib/libm-2.5.so
00b4c000      4K r-x--  /lib/libm-2.5.so
00b4d000      4K rwx--  /lib/libm-2.5.so
00b7e000     44K r-x--  /lib/libgcc_s-4.1.2-20080825.so.1
00b89000      4K rwx--  /lib/libgcc_s-4.1.2-20080825.so.1
00c4d000      4K r-x--    [ anon ]
00cb0000    852K r-x--  /usr/lib/libscim-1.0.so.8.1.0
00d85000     56K rwx--  /usr/lib/libscim-1.0.so.8.1.0
00d93000      4K rwx--    [ anon ]
0300d000    896K r-x--  /usr/lib/libstdc++.so.6.0.8
030ed000     16K r-x--  /usr/lib/libstdc++.so.6.0.8
030f1000      4K rwx--  /usr/lib/libstdc++.so.6.0.8
030f2000     24K rwx--    [ anon ]
08048000     16K r-x--  /usr/lib/scim-1.0/scim-launcher
0804c000      8K rw---  /usr/lib/scim-1.0/scim-launcher
080f3000   3404K rw---    [ anon ]
b6eba000    516K rw---    [ anon ]
b6f9d000   1056K rw---  /usr/share/scim/tables/Wubi.bin
b70a5000   3528K rw---    [ anon ]
b7479000     16K r----  /usr/share/locale/zh_CN/LC_MESSAGES/scim-tables.mo
b747d000   1056K r----  /usr/lib/locale/locale-archive
b7585000   1032K rw---    [ anon ]
b76a8000    900K r----  /usr/lib/locale/locale-archive
b7789000    232K r----  /usr/lib/locale/zh_CN/LC_CTYPE
b77c3000      8K r----  /usr/lib/locale/locale-archive
b77c5000      8K r----  /usr/lib/locale/locale-archive
b77c7000   1092K r----  /usr/lib/locale/locale-archive
b78d8000     16K r----  /usr/share/locale/zh_CN/LC_MESSAGES/scim-pinyin.mo
b78dc000     28K r--s-  /usr/lib/gconv/gconv-modules.cache
b78e3000      4K r----  /usr/lib/locale/locale-archive
b78e4000    620K r----  /usr/lib/locale/locale-archive
b797f000      4K r----  /usr/lib/locale/locale-archive
b7980000   1044K r----  /usr/lib/locale/locale-archive
b7a85000      4K r----  /usr/lib/locale/locale-archive
b7a86000    944K r----  /usr/lib/locale/locale-archive
b7b72000      4K r----  /usr/lib/locale/locale-archive
b7b73000    816K r----  /usr/lib/locale/locale-archive
b7c3f000   1048K r----  /usr/lib/locale/locale-archive
b7d45000      4K r----  /usr/lib/locale/locale-archive
b7d46000     72K r----  /usr/share/locale/zh_CN/LC_MESSAGES/libc.mo
b7d58000    244K r----  /usr/lib/locale/locale-archive
b7d95000   2048K r----  /usr/lib/locale/locale-archive
b7f95000     12K rw---    [ anon ]
b7fa6000     20K r----  /usr/share/locale/zh_CN/LC_MESSAGES/scim.mo
bf96f000     84K rw---    [ stack ]
 total    27776K


[linscora@linscora ~]$ /usr/bin/sudo /bin/cat /proc/1/statm
518 163 139 8 0 70 0

[linscora@linscora proc]$ /usr/bin/sudo /usr/bin/yum install glibc-utils
口令:
Loaded plugins: rhnplugin, security
This system is not registered with RHN.
RHN support will be disabled.
rpmforge                                                 | 1.1 kB     00:00
Setting up Install Process
Package glibc-utils-2.5-42.i386 already installed and latest version

[linscora@linscora proc]$ /usr/bin/memusage /bin/ls
1     2568  3376  3640  4049  4140  7437         interrupts  scsi
10    2585  3386  3641  4050  4142  7451         iomem       self
109   2594  3399  3711  4097  415   7452         ioports     slabinfo
11    2597  3400  3716  4102  4150  777          irq         stat
112   2617  3408  3717  4103  4231  acpi         kallsyms    swaps
114   2643  3421  3718  4105  452   asound       kcore       sys
171   2649  3429  3719  4107  5     buddyinfo    keys        sysrq-trigger
172   2673  3432  3720  4110  6     bus          key-users   sysvipc
173   2741  3462  3721  4112  6156  cmdline      kmsg        tty
174   3     3487  3722  4114  6157  cpuinfo      loadavg     uptime
1902  322   3507  373   4119  6190  crypto       locks       version
1903  324   3516  3823  4121  6191  devices      mdstat      vmcore
1928  3257  3530  3825  4122  6258  diskstats    meminfo     vmnet
1936  3262  3539  3828  4124  6675  dma          misc        vmstat
1938  3266  3548  384   4126  6676  driver       modules     zoneinfo
1946  3283  358   3963  4129  7     execdomains  mounts
2     3293  3581  3965  4130  7342  fb           mtrr
2100  3329  359   3977  4132  7380  filesystems  net
2176  334   3598  4     4137  7408  fs           partitions
2566  3341  364   4016  4139  7421  ide          schedstat

Memory usage summary: heap total: 72489, heap peak: 62289, stack peak: 9696
         total calls   total memory   failed calls
 malloc|        256          59377              0
realloc|          8          13112              0  (nomove:6, dec:6, free:0)
 calloc|          0              0              0
   free|         28          41020
Histogram for block sizes:
    0-15            195  73% ==================================================
   16-31              8   3% ==
   32-47              9   3% ==
   48-63             14   5% ===
   64-79              1  <1%
   80-95              1  <1%
   96-111            21   7% =====
  112-127             2  <1%
  208-223             1  <1%
  304-319             1  <1%
  352-367             3   1%
  384-399             1  <1%
  480-495             1  <1%
 1392-1407            1  <1%
 1520-1535            1  <1%
 4096-4111            1  <1%
12800-12815           1  <1%
25600-25615           1  <1%
32784-32799           1  <1%

在/etc/security/limits.conf调整用户使用的内存空间大小。这个功能它是由pam_limits.so提供的。
****user1不能运行pro1,user1运行pro2提示警告信息****

1、[root@linscora ~]# /bin/cat /etc/security/limits.conf |grep user1
user1   hard as 1000
[root@linscora ~]# /bin/su - user1
-bash: error while loading shared libraries: libc.so.6: failed to map segment from shared object: Cannot allocate memory

2、[root@linscora ~]# /bin/cat /etc/security/limits.conf |grep user1
user1   hard as 100
[root@linscora ~]# /bin/su - user1
[root@linscora ~]#        登录不进出,而且连提示都没有,上面还有提示。说明100KiB的内存连提示都不够。

3、[root@linscora ~]# /bin/cat /etc/security/limits.conf |grep user1
user1   soft as 5000  一个应用程序的最大的峰值
user1   hard as 6000  全部程序程序不能超过5000KiB
[root@linscora ~]# /bin/su - user1
[user1@linscora ~]$ dd if=/dev/zero of=hello bs=1M count=5
段错误
[user1@linscora ~]$

[user1@linscora ~]$ dd if=/dev/zero of=he bs=1M count=1
dd: 内存用尽

[user1@linscora ~]$ dd if=/dev/zero of=he bs=1k count=10
10+0 records in
10+0 records out
10240 bytes (10 kB) copied, 0.000226286 seconds, 45.3 MB/s

[user1@linscora ~]$ ulimit -a   #查看自己用户能使用系统内存的多少,而且可以手动调节用户自己的soft限制数。
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 24566
max locked memory       (kbytes, -l) 32
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 24566
virtual memory          (kbytes, -v) 5000     #########   user1   soft as 5000       
file locks                      (-x) unlimited

而且可以手动调节用户自己的soft限制数。
[root@linscora ~]# ulimit -v 4000
[root@linscora ~]# ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 24566
max locked memory       (kbytes, -l) 32
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 24566
virtual memory          (kbytes, -v) 4000
file locks                      (-x) unlimited


物理地址空间:
内存的最小单位是页,一个页面数在32位系统中为4KiB

TLB: Translation lookaside buffer,即旁路转换缓冲,或称为页表缓冲;里面存放的是一些页表文件(虚拟地址到物理地址的转换表)
对于虚拟地址叫page(页面);对于物理地址叫frame(页框)

[root@linscora ~]# /usr/sbin/x86info -c
x86info v1.20.  Dave Jones 2001-2006
Feedback to .

Found 1 CPU
--------------------------------------------------------------------------
Family: 6 Model: 9 Stepping: 5 Type: 0 Brand: 6
CPU Model: Pentium M (Banias) Original OEM
Processor name string: Intel(R) Pentium(R) M processor 1700MHz

Feature flags:
 fpu vme de pse tsc msr mce cx8 sep mtrr pge mca cmov pat clflsh ds acpi mmx fxsr sse sse2 tm pbe est tm2
Extended feature flags:

Cache info
 L1 Instruction cache: 32KB, 8-way associative. 64 byte line size.
 L1 Data cache: 32KB, 8-way associative. 64 byte line size.
 L2 unified cache: 1MB, 8-way associative. 64 byte line size.
TLB info
 Instruction TLB: 4K pages, 4-way associative, 128 entries.   ## 用来缓存一般页表的指令页表缓存
 Instruction TLB: 4MB pages, fully associative, 2 entries     ## 用来缓存大尺寸页表的指令页表缓存
 Data TLB: 4K pages, 4-way associative, 128 entries.          ## 用来缓存一般页表的数据页表缓存
 Data TLB: 4MB pages, 4-way associative, 8 entries            ## 用来缓存大尺寸页表的数据页表缓存


提升内存的性能:
SRAM   保持数据不更新。
DRAM   每隔一段时间会刷新数据。

在64位系统中。没有高位内存这一说。所有的高位内存都为0。这样可以减少MMU的访问数据,减少CPU的访问时间。


提高TLB的性能:
就是提高TLB的大小。首先查看大TLB的大小。
[root@linscora ~]# /bin/cat /proc/meminfo  |grep -i hugepagesize
Hugepagesize:     4096 kB

[root@linscora ~]# sysctl -a |grep hugepage
vm.nr_hugepages = 0

[root@linscora ~]# /usr/bin/vim /etc/sysctl.conf
[root@linscora ~]# sysctl -w vm.nr_hugepages=20  ##单位为个数,/usr/sbin/x86info -c查看到每个大页的大小为4MiB。所以这里大页就为80MiB。
vm.nr_hugepages = 20
[root@linscora ~]# sysctl -p
[root@linscora ~]# sysctl -a |grep hugepa
vm.nr_hugepages = 20

把一个文件系统挂载成大页的形式,因为有的应用程序可能不读到这个内核参数。所以在这个应用程序访问这个目录的时候。就开启了大页的功能。
root@linscora ~]# /bin/mkdir /my-hugepages

[root@linscora ~]# mount -t hugetlbfs none /my-hugepages/

查看系统调用数据情况:
[root@linscora ~]# /usr/bin/strace elinks -dump

调整内存在半虚拟化动态的范围:在xen的配置文件里可调。
阅读(1299) | 评论(1) | 转发(2) |
0

上一篇:养生98条

下一篇:linux下连接windows3389

给主人留下些什么吧!~~

royleong2011-08-04 10:06:23

作者, 很久没看到更新rhca筆記了, 請問還會繼續更新嗎 ?