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


    文章转自微信公众号“麻辣软硬件”: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:UsersSOMEONE>wmic memphysical get maxcapacity
    MaxCapacity
    16777216

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

    内存等待时间


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

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

    目前业界优化的方式有:
    • 多级缓存和预取技术
    • 多线程及乱序执行技术
    • 集成式内存控制器
    • 内存集成到处理器中

    内存带宽

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

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

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

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

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

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

    总结

    从开发角度看

    在性能要求高的情况下编程,我们应该注意:
    1. 尽量使用内存池,避免频繁地申请和释放内存;
    2. 热度比较高的内容应缓存在内存中,避免频繁地从磁盘中读取。

    从测试的角度看

    磁盘的性能测试过程中,进程读取的数据有可能在磁盘,也有可能在内存,导致测试结果时好时坏,所以在测试过程中应该注意:
    1. 在不要求精确的情况下,尽量让读写的数据大小远大于内存容量;
    2. 在要求精确的情况下,应使用特定的工具如iozone、fio等,开启从磁盘直接读取的模式进行测试;
    3. 在进行分布式系统的性能测试时,应该注意分析清楚服务端和客户端双方的内存缓存带来的影响,然后再设置相应的测试方案。
  • 相关阅读:
    C++开发人脸性别识别教程(12)——加入性别识别功能
    Java数组实现循环队列的两种方法
    开源 免费 java CMS
    Android必知必会-Stetho调试工具
    初中级DBA必需要学会的9个Linux网络命令,看看你有哪些还没用过
    fputs与fgets
    一个使用命令行编译Android项目的工具类
    SpringMVC @RequestBody接收Json对象字符串 demo
    spring 事件(Application Event)
    spring Aop的一个demo
  • 原文地址:https://www.cnblogs.com/wyf0518/p/12105797.html
Copyright © 2020-2023  润新知