性能案例分析 | 内存基础知识

文章转自微信公众号“麻辣软硬件”:https://www.toutiao.com/i6704524697280709133/



本文的主要内容:

  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


total、used自不必说,其他字段意义如下:


shared:多进程共享内存数


buffers/cache:缓存内存数,物理内存不足时,系统会释放一部分缓存


free:空余内存数


available:可用内存数


swap: 交换分区,将不常用的数据置换到磁盘


为了进一步理解这几个概念,就从内存的空间模型说起。


操作系统中的内存


内存的空间模型


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

在内存中运行的每个进程都需要使用到内存,但是不是每个进行都需要每时每刻都使用系统分配的内存空间。


当系统所需内存超过实际的物理内存时,内核会释放某些进程所"占用但未使用"的物理内存,把这些资料存储在磁盘上,并将释放出来的内存提供给有需要进程使用。


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


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


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


  • 内存管理系统负责文件 Cache 的分配和回收,同时虚拟内存管理系统(VMM)则允许应用程序和文件 Cache 之间通过 memory map的方式交换数据

  • 虚拟文件系统VFS负责在应用程序和文件 Cache 之间通过 read/write 等接口交换数据

  • 具体文件系统,如 ext2/ext3、jfs、ntfs 等,负责在文件 Cache和存储设备之间交换数据


Cache、文件及磁盘间关系


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


  • 文件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。


内存性能指标


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

内存容量


容量越大,性能越好。但也需要和主板、操作系统等配套。


在Windows中我们可以通过命令行查看出当前系统支持的最大内存是多少:


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

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


内存等待时间




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



内存等待时间,表示系统进入数据存取操作就绪状态前等待内存响应的时间。


目前业界优化的方式有:

  • 多级缓存和预取技术

  • 多线程及乱序执行技术

  • 集成式内存控制器

  • 内存集成到处理器中


内存带宽


内存带宽=(传输倍率×总线位宽×工作频率)÷8


内存总线位宽:受内存引脚数量的限制,可将内存集成到处理器中,摆脱限制


内存工作频率:受芯片发热和工艺限制


内存传输倍率:DDR是SDRAM的2倍


目前各代内存的指标如下:


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



总结


从开发角度看


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

  1. 尽量使用内存池,避免频繁地申请和释放内存;

  2. 热度比较高的内容应缓存在内存中,避免频繁地从磁盘中读取。


从测试的角度看


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

  1. 在不要求精确的情况下,尽量让读写的数据大小远大于内存容量;

  2. 在要求精确的情况下,应使用特定的工具如iozone、fio等,开启从磁盘直接读取的模式进行测试;

  3. 在进行分布式系统的性能测试时,应该注意分析清楚服务端和客户端双方的内存缓存带来的影响,然后再设置相应的测试方案。


猜你喜欢

转载自www.cnblogs.com/wyf0518/p/12105797.html