RHCA442学习笔记-Unit10内存地址及分配
Posted zengkefu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RHCA442学习笔记-Unit10内存地址及分配相关的知识,希望对你有一定的参考价值。
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内存地址及分配的主要内容,如果未能解决你的问题,请参考以下文章
RHCA442 UNIT 6 Compensating for Physical Disk Characteristics