Unit 10 Memory Addressing and Allocation 内存地址及分配

学习目标:

A. 虚拟地址与物理地

B. 调整内存地址分配

C. 解析内存溢出

 
 10.1 Overview of memory addressing 内存地址概述
                A. 虚拟地址空间
        a. 每个进程都有自己线性连续的地址空间
        b. 地址空间范围从0到最大地址空间值:
          X86: 2^32=4G
          X86_64: 2^64=1TiB (redhat 最大支持256GiB)
B. 物理地址空间
                a. 虚拟地址必须转换成物理页框才能被进程访问
                b. 这种转换在硬件上是通过内存管理单元(MMU)来完成的
                   物理页面必须是连续的
                   页面可以是内存或虚拟内存
                   页框映像到虚拟地址空间
                  查看内存大: grep Memory /var/log/dmesg
 
 
 10.2      Virlual address space (32-bit)虚拟地址空间(32)
32bit--à2^32=4G
3G--àProcess 用户空间
1G--àshare/kernel 内核空间
 
10.3      Viewing process address space 进程地址空间概述
                A.      Proc file
                      cat /proc/PID/status
                      cat /proc/PID/statm
                B.      查看命令:
                       Gnome-system-monitor
                       pmap
                       memusage (安装前须安装glibc-utils)
 
10.4      Tuning process address space 进程地址空间调整
               A.      启用登录认证和pam_limits.so模块来限制进程空间访问
                      a.       更新/etc/security/limits.conf
                            bart       hard as 15
                            @finance   hard as 20
                            @jre       hard stack 100
                         注: as: address space limit 虚拟地址空间
                                as 单位:KiB
                              不能限制rss常驻内存。
                      b.       重新登录看看效果如何?
              B.      对管理员用户可以做如下限制:
                      a.       查看它们的权限
                      b.       调整它们的soft限制
                      c.       命令:ulimit
              PS:
              Limit type:有 soft,hard 和 -,soft 指的是当前系统生效的设置值。hard 表明系统中所能设定的最大值。soft 的限制不能比har 限制高。用 - 就表明同时设置了 soft 和 hard 的值。可以超出软规则的限制(警告),但不能超过硬规则的限制
要使 limits.conf 文件配置生效,必须要确保 pam_limits.so 文件被加入到启动文件中。
查看 /etc/pam.d/login 文件中有:session required /lib/security/pam_limits.so

10.5      Physical address space 物理地址空间

A.      内核通过使用页表项(PTE)把虚拟地址转换成物理地址

a.       PTE被缓存在TLB里面,以提高转换速度。

b.       PTE的大小决定了数据和指令页的页面大小

x86info –c
dmesg
getconf –a | grep SIZE
B.      内枋内存是不分页的
C.      追踪页面的使用情况
每个页框指向内存中的一页。
内核用页表来追踪页框的使用
每个进程都有自己的页表结构
每个页表都映射虚拟地址到物理地址。
 
10.6      Mapping virtual addresses(x86) 虚拟地址映射
()
10.7      Uniform memory architecture(x86)统一内存架构
A.   内核把物理内存的第一个GiB映射到进程地址空间的最后一个GiB
B.    ZONE_NORMAL 这个区包含的都是可以正常映射的页.
a.       内核使用低端内存    
C.   ZONE_HIGHMEM 这个区包含“高端内存”,其中的页不能永久映射到内核地址空间
a.       32位系统上位于内存896MiB以上
b.       PAE支持访问大于4GiB
c.       在64位架构中,ZONE_HIGHMEM的值是0
             注:
              ZONE_DMA 这个区包含的页用来执行DMA操作。
             ZONE_DMA             DMA使用的页         <16MB       硬件
             ZONE_NORMAL         正常可寻址的页        16~896MB    内核
             ZONE_HIGHMEM        动态映射的页          >896MB      用户
 
 10.8      Overview of memory allocation 内存分配概述
            A.   父进程使用fork()复制当前进程创进一个子进程,exec()负责读取可执行 文件并载入地址空间运行.
                a.   写时拷贝:内核并不复制整个进程地址空间,而是让父进程与子进程共享同一个拷贝。只有在需要写入的时候,数据才会被复制,从而使各个进程有自己的拷贝。
            B.新进程如何请求内存空间
                 a.当新进程运行后,内核会分配一段虚拟地址空间给新进程。
           C. 新进程如何使用内存
                a. 新进程开始运行时,数据尚未调入内存,所以会触发缺页例程:
                    1)次要:内核会通过MMU分配一个新的页框给新进程
                    2) 主要: 当所需的页面数据从磁盘调入内存时,内核会阻塞进程.
               查看缺页:ps axo pid,comm.,min_flt,maj_flt <PID>
                          ps –o minflt,majflt <PID>
           D.   进程如何释放内存
                a.       进程结束后,内核会回收页面。
 
 
10.9      Improving RAM performance 提高RAM的性能
            A.   静态内存(SRAM)
                 a.       读完数据后不需要刷新。
            B.动态内存(DRAM)
                 a. 读完数据后因为要写回数据,所以必须要更新。
                 b. DRAM(SDRAM)需与CPU时钟频率同步。
                 c. DDR 可以读取两面时钟信号。
                 d.RDRAM使用高速度,窄总线架构。
 
10.10 Improving MMU performance 提高MMU性能
              A. NUMA:非一致性内存访问架构(只支持64位)
              B. 在NUMA架构中,内存是结点中的一部份。
                 a.每个结点分配一个CPU.
                     cat /proc/PID/numa_maps
                 b.       每个结点中的内存都是一个区。
                       1) 所有内存都在ZONE_NORMAL 或ZONE_DMA中    
                       2) ZONE_HIGHMEM 总是为0.
               C.结论
    提升MMU性能可以通过:
a.       减少MMU访问次数
b.       减少CPU服务时间
c.       内存寻址时间决定等待时间
1)      可以在远距离结点处理数据.
 
查看系统是否支持NUMA
grep –i numa /boot/config-$(uname -r)
 
 
10.11          Tuning theNUMA NUMA资源分配调整
A.   禁用NUMA
a.       在BIOS里面设置结点为interleaving
b.       使用内核命令: numa=off
B.    基于每个进程的个性化设置
numactl
a.       调整每个结点中内存的访问
b.       为特别的进程交错使用内存
C.   使用cpusets
a.       把进程隔离出低延时区域
 
 
10.12          Improving TLB performance 提高TLB性能
A.      内核必须根据文件交换经常更新TLB项
B.      使用空闲的,连续的物理页面
a.       内核会通过buddy算法自动分配和释放内存。
cat /proc/buddyinfo
b.       使用大页(hugepages)技术提高TLB性能
C.      结论
a.       大页可以提高TLB缓存命中率
b.       减少PTE访问次数.    
 
 
10.13          Tuning TLB performance 调整TLB性能
               A.      查看大页大小
x86info 
dmesg
cat /proc/meminfo
              B 启用hugepages
                        a. 配置/etc/sysctl.conf,须重启
                                 vm.nr_hugepages=integer
                        b. 配置内核参数
                                hugepages=integer
               C.      如果应用需要的话配置hugetlbfs
                       a.       mmap 系统调用需要挂载hugetlbfs
mkdir /my-hugepages
mount –t hugetlbfs none /my-hugepages
                        b. shmat ,shmget 系统调用不需要hugetlbfs
                           查看: x86info –a
 
 
10.14          Viewing system calls 系统调用概述
A.      追踪程序的每一个系统调用情况
strace –o /tmp/outfile ep links -dump http://127.0.0.1
grep mmap /tmp/outfile
B.      系统调用
strace –c elinks –dump http://127.0.0.1
C.      strace的其它应用
a.       可以分析锁的连接数情况
b.       可以鉴识因为文件权限引起的问题
c.       可以精确地找到IO问题
例:strace –c uname
 
 
10.15          Virtual domain memory 虚拟机内存
A.      domain需要为用户操作系统提供足够的内存
建议最小512MB内存
B.      domain开始启动时从dom0获得内存
a.       默认情况下,dom0不可以将内存收缩到低于256MB
b.       当domain损坏后,domain所用的内存会被标识为未分配
c.       Domain在未从dom0获得内存前使用未分配的内存.
C.      Hypervisor不支持NU MA
导致了不可预知的潜在因素。
                        D.在dom0上面可以静态或动态的对内存进行调整
 
 
10.16          Tuning memory at domain creation domain创建时调整内存  大小
A.      在配置文件中修改/etc/xen/domain
B.      分配最大内存
maxmem=amt_in_MebiBytes
C.      设置初始内存
Memory=amt_in_MebiBytes
 
 
10.17          Tuning domain memory dynamically 动态调整domain内存
A.      命令行方式:
virsh setmem domain amt_in_KibiBytes
B.      图形界面方式:
a.       选中domain单击右键,选择details
b.       点击Hardware选项
c.       选择Memory
                                注:只支持半虚拟化
 
 
10.18          Recovering unassigned memory 恢复未分配内存
A.      查看未分配内存数量
virsh nodeinfo
B.      调整dom0的内存
virsh setmem 0 amt_in_KibiBytes

RHCA442学习笔记-Unit10内存地址及分配的更多相关文章

  1. RHCA442学习笔记-Unit11内存缓存

      Unit 11 Memory Caches 内存缓存           学习目标:                 A. 使用内存来改善运行慢的子系统的服务时间.   11.1 Strategi ...

  2. RHCA442学习笔记-Unit11内存回收

       Unit 12 Memory Reclamation 内存回收            学习目标:                    A. 了解和调整内存回收                  ...

  3. linux kernel学习笔记-5内存管理_转

    void * kmalloc(size_t size, gfp_t gfp_mask); kmalloc()第一个参数是要分配的块的大小,第一个参数为分配标志,用于控制kmalloc()的行为. km ...

  4. XV6学习笔记(2) :内存管理

    XV6学习笔记(2) :内存管理 在学习笔记1中,完成了对于pc启动和加载的过程.目前已经可以开始在c语言代码中运行了,而当前已经开启了分页模式,不过是两个4mb的大的内存页,而没有开启小的内存页.接 ...

  5. MySQL学习笔记-数据库内存

    数据库内存 InnoDB存储引擎内存由以下几个部分组成:缓冲池(buffer pool).重做日志缓冲池(redo log buffer)以及额外的内存池(additional memory pool ...

  6. C语言学习笔记--动态内存分配

    1. 动态内存分配的意义 (1)C 语言中的一切操作都是基于内存的. (2)变量和数组都是内存的别名. ①内存分配由编译器在编译期间决定 ②定义数组的时候必须指定数组长度 ③数组长度是在编译期就必须确 ...

  7. Linux内核学习笔记——内核内存管理方式

    一 页 内核把物理页作为内存管理的基本单位:内存管理单元(MMU)把虚拟地址转换为物理 地址,通常以页为单位进行处理.MMU以页大小为单位来管理系统中的也表. 32位系统:页大小4KB 64位系统:页 ...

  8. ubuntu linux c学习笔记----共享内存(shmget,shmat,shmdt,shmctl)

    shmget int shmget(key_t key, size_t size, int flag); key: 标识符的规则 size:共享存储段的字节数 flag:读写的权限 返回值:成功返回共 ...

  9. 《C#高级编程》学习笔记----c#内存管理--栈VS堆

    本文转载自Netprawn,原文英文版地址 尽管在.net framework中我们不太需要关注内存管理和垃圾回收这方面的问题,但是出于提高我们应用程序性能的目的,在我们的脑子里还是需要有这方面的意识 ...

随机推荐

  1. 绕过kernel模块版本校验检测

    kernel module version check bypass . 举例说明 . 内核是怎么实现的 . 怎样去突破 . 总结 . 举例说明 Linux内核版本很多,升级很快,2个小内核版本中内核 ...

  2. 在电脑上装ubuntu12.04系统,内核文件是那个?

    在电脑上装ubuntu12.04系统,我们能看到的是根文件系统,那么内核文件(zlmage)是那个? ???

  3. Styles and Themens(5)样式文件Style.xml中各元素的含义

    Style Resource See also Styles and Themes A style resource defines the format and look for a UI. A s ...

  4. C#中如何生成矢量图

    主要的功能就是使用C#画矢量图,然后导出到Word.Excel.Powerpoint中,并且能够再次被编辑.以下是解决过程: 首先应该确定在Office文档中可编辑图形使用的格式:学习了相关资料,了解 ...

  5. 【Python】代码行数统计

    两级目录,可扩展为N级. # Count the line of dir or file import os, fnmatch, fileinput def ChkFileType(lst): tmp ...

  6. Spring的annotation用在set方法上 hibernate的annotation用get方法上

    1.Spring的annotation用在set方法上 2.hibernate的annotation用在get方法上

  7. sougou输入法小技巧

  8. Axis2联接WCF(比较完整的版本)

    Axis2联接WCF(比较完整的版本) 分basicHttpBinding和wsHttpBinding两种情况: 一.basicHttpBinding比较简单一点,先来看看它所要求的HTTP包:POS ...

  9. 点这里进入ABP系列文章总目录

    基于DDD的现代ASP.NET开发框架--ABP系列之1.ABP总体介绍 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称. ASP.NET Boi ...

  10. Android图片上传,可以选择多张图片,缩放预览,拍照上传等

    仿照微信,朋友圈分享图片功能 .可以进行图片的多张选择,拍照添加图片,以及进行图片的预览,预览时可以进行缩放,并且可以删除选中状态的图片 .很不错的源码,大家有需要可以下载看看 . 微信 微信 微信 ...