性能分析基础知识(2):内存

上篇文章介绍了CPU相关的知识,本章介绍内存相关的知识。


本文的主要内容:

  1. 操作系统中的内存管理是怎样的
  2. 物理内存的性能指标的影响因素

从free说起

以centos7为例,free命令结果如下:

[root@lh ~]# free -w
              total        used        free      shared     buffers       cache   available
Mem:       24473612      482400    23777212       17532        2108      211892    23665672
Swap:      12320764           0    12320764

从结果中,我们可以看出:
total = used + free + buffers + cache
其中
shared:多进程共享内存数
buffers/cache:缓存内存数,物理内存不足时,系统会释放一部分缓存
free:空余内存数
available:可用内存数
swap: 交换分区,将不常用的数据置换到磁盘
为了进一步理解这几个概念,就从内存的空间模型说起。

操作系统中的内存

内存的空间模型

在这里插入图片描述
在内存中运行的每个进程都需要使用到内存,但是不是每个进行都需要每时每刻都使用系统分配的内存空间。

当系统所需内存超过实际的物理内存时,内核会释放某些进程所"占用但未使用"的物理内存,把这些资料存储在磁盘上,并将释放出来的内存提供给有需要的进程使用。直到下一次调用该进程时,重新分配空闲内存,将磁盘中的数据再次加载到物理内存中。

进程的空间模型展示的是进程所使用的逻辑内存。换句话说,如果你的程序每sleep一段时间后打印一次内存的地址空间,就会发现,进程的地址空间并未改变,但对应的物理内存内存地址可能已经改变很多次了。

虚拟内存管理与周边系统关系

在这里插入图片描述

  • 内存管理系统负责文件 Cache 的分配和回收,同时虚拟内存管理系统(VMM)则允许应用程序和文件 Cache 之间通过 memory map的方式交换数据
  • 虚拟文件系统VFS负责在应用程序和文件 Cache 之间通过 read/write 等接口交换数据
    具体文件系统,如 ext2/ext3、jfs、ntfs 等,负责在文件 Cache和存储设备之间交换数据
Cache、文件及磁盘间关系

在这里插入图片描述

  • 文件Cache分为两个层面,Page Cache和Buffer Cache,每一个 Page Cache 包含若干 Buffer Cache。
  • 内存管理系统和 VFS 只与 Page Cache 交互,内存管理系统负责维护每项 Page Cache 的分配和回收,同时在使用 memory map 方式访问时负责建立映射;VFS 负责 Page Cache 与用户空间的数据交换。
  • 具体文件系统一般只与 Buffer Cache 交互,它们负责在外围存储设备和 Buffer Cache 之间交换数据。
交换分区

为了满足物理内存不足而利用磁盘空间虚拟出一块逻辑内存,用作虚拟内存的空间。

交换机制如下:

  • Linux系统会不时的进行页面交换操作,以保持尽可能多的空闲物理内存,即使并没有什么需要内存,Linux也会交换出暂时不用的内存页面,这样的可以避免等待交换所需的时间。
  • Linux内存管理中,通过调页paging和交换swapping来完成上述的内存调度。调页算法是把内存中最近不常使用的页面换到磁盘中,把活动页面保留在内存中供进程使用。
  • 分页写入磁盘的过程为:page-out,分页从硬盘重新回到内存的过程被称为page-in,内核需要一个分页的时候,发现此分页不再内存中,,就会发生page fault。

内存性能指标

在这里插入图片描述

内存容量

容量越大,性能越好。但也需要和主板、操作系统等配套。
在Windows中我们可以通过命令行查看出当前系统支持的最大内存是多少:

C:\Users\SOMEONE>wmic memphysical get maxcapacity
MaxCapacity
16777216

命令结果的单位为KB,因此,此电脑支持的最大内存为16GB

内存等待时间

在这里插入图片描述
内存等待时间,表示系统进入数据存取操作就绪状态前等待内存响应的时间。
目前业界优化的方式有:

  • 多级缓存和预取技术
  • 多线程及乱序执行技术
  • 集成式内存控制器
  • 内存集成到处理器中
内存带宽

内存带宽=(传输倍率×总线位宽×工作频率)÷8
内存总线位宽:受内存引脚数量的限制,可将内存集成到处理器中,摆脱限制
内存工作频率:受芯片发热和工艺限制
内存传输倍率:DDR是SDRAM的2倍
在这里插入图片描述

总结

从开发角度看

在性能要求高的情况下编程,我们应该注意:

  1. 尽量使用内存池,避免频繁地申请和释放内存;
  2. 热度比较高的内容应缓存在内存中,避免频繁地从磁盘中读取。
从测试的角度看

磁盘的性能测试过程中,进程读取的数据有可能在磁盘,也有可能在内存,导致测试结果时好时坏,所以在测试过程中应该注意:

  1. 在不要求精确的情况下,尽量让读写的数据大小远大于内存容量;
  2. 在要求精确的情况下,应使用特定的工具如iozone、fio等,开启从磁盘直接读取的模式进行测试;
  3. 在进行分布式系统的性能测试的时候,应该注意分析清楚服务端和客户端双方的内存缓存带来的影响,然后再设置相应的测试方案。

关注麻辣软硬件,获取更多有料的软硬件知识

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值