转自:https://blog.csdn.net/san_77227487/article/details/87938546

https://blog.csdn.net/zxcc1314/article/details/86751559

内存映射

Linux内核给每个进程提供了一个独立的连续虚拟地址空间(独立!可以将进程内存隔离)。

每个进程的虚拟地址分为内核空间和用户空间。但内核空间,其实关联的都是相同的物理内存。进程用户态只能访问用户空间内存;内核态可以访问内核空间内存。

内存映射就是将虚拟内存地址映射到物理内存地址,内核为每个进程都维护了一张页表,记录映射关系。
页表实际存储在CPU的内存管理单元MMU中,页表还有一个缓冲TLB(Translation Lookaside Buffer,转译后备缓冲器)。

页的大小为4KB,为了解决页过多,Linux提供了两种机制多级页表和大页(HugePage)。
多级页表就是把内存分成区块来管理,将原来的映射关系改成区块索引和区块内的偏移,这样可以大大减少页表的项数。(其实也可以直接映射正使用的页,但这会导致页不连续,不能使用偏移量查找)
Linux使用四级页表管理内存页。

大页就是比普通页更大的内存块。

当访问虚拟地址在页表中找不到时,会产生缺页异常,进入内核空间分配物理内存、更新进程页表,最后再返回用户空间,恢复进程的运行。

虚拟内存空间分布

上图为32位系统虚拟内存空间分布。
除内核空间外,用户空间内存,从低到高分别是五种不同内存段。

只读段,包括代码和常量等。
数据段,包括全局变量等。
堆,包括动态分配的内存,从低地址开始向上增长。
文件映射段,包括动态库、共享内存等,从高地址开始向下增长。
栈,包括局部变量和函数调用的上下文等。栈的大小是固定的,一般是 8 MB。
比如说,使用 C 标准库的 malloc() 或者 mmap() ,就可以分别在堆和文件映射段动态分配内存。

内存分配
malloc()两种实现方式:

对小块内存(小于 128K),C 标准库使用 brk() 来分配,通过移动堆顶的位置来分配内存。这些内存释放后并不会立刻归还系统,而是被缓存起来,这样就可以重复使用。
大块内存(大于 128K),使用内存映射 mmap()在文件映射段找一块空闲内存分配。释放时直接归还给系统。
在内核空间,Linux 则通过 slab 分配器来管理小内存。可以把 slab 看成构建在伙伴系统上的一个缓存,主要作用就是分配并释放内核中的小对象。

malloc() 申请内存后,内存并不会立即分配,而是在首次访问时,才通过缺页异常陷入内核中分配内存。

理解内存中的Buffer和Cache
man free ,可以看到buffer 和 cache 的说明:

Buffers 是内核缓冲区用到的内存,对应的是 /proc/meminfo 中的 Buffers 值。
Cache 是内核页缓存和 Slab 用到的内存,对应的是 /proc/meminfo 中的 Cached与 SReclaimable 之和。
man proc,关于meminfo 说明:

Buffers 是对原始磁盘块的临时存储,也就是用来缓存磁盘的数据,通常不会特别大(20MB 左右)。
Cached 是从磁盘读取文件的页缓存,也就是用来缓存从文件读取的数据。
SReclaimable 是 Slab 的一部分。Slab 包括两部分,其中的可回收部分,用 SReclaimable 记录;而不可回收部分,用 SUnreclaim 记录。

一、IO性能指标

二、IO性能工具

三、基本思路

1. 先用 iostat 发现磁盘 I/O 性能瓶颈;

2. 再借助 pidstat ,定位出导致瓶颈的进程;

3. 分析进程的 I/O 行为;

4. 结合应用程序的原理,分析这些 I/O 的来源。

转载于:https://www.cnblogs.com/yanwei-wang/p/10739808.html

linux性能优化实战-内存性能指标相关推荐

  1. linux 内存管理优化,Linux性能优化实战 内存篇 阅读笔记

    第十五讲 基础篇:Linux内存是怎么工作的(2020.6.8) 这一讲相关的内容正好之前看csapp的时候总结了一下,可以直接贴出来作为总结了. Linux的内存工作原理,这又是一个特别大的话题.一 ...

  2. Linux 性能优化实战(倪朋飞)---平均负载

    查看平均负载: $ uptime20:32:31 up 33 min, 1 user, load average: 0.72, 0.63, 0.70 结果解释: 20:32:31 // 当前时间 up ...

  3. linux性能优化实战学习笔记-(1)CPU性能分析工具与套路

    版权归Linux性能优化实战 作者倪鹏飞,本文主要是为学习.整理相关知识点,请勿用作商用,侵删. linux性能分析工具 下图来自:Brendan D. Gregg http://www.brenda ...

  4. 推荐学习-Linux性能优化实战

    学习交流加(可免费帮忙下载CSDN资源): 个人微信: liu1126137994 学习交流资源分享qq群1(已满): 962535112 学习交流资源分享qq群2: 780902027 推荐一个学习 ...

  5. Linux性能优化实战学习笔记:第四十六讲=====实战分析

    Linux性能优化实战学习笔记:第四十六讲 一.上节回顾 不知不觉,我们已经学完了整个专栏的四大基础模块,即 CPU.内存.文件系统和磁盘 I/O.以及网络的性能分析和优化.相信你已经掌握了这些基础模 ...

  6. linux性能优化实战 倪朋飞,Linux性能优化实战:系统的swap变高(09)

    一.实验环境 1.操作系统 root@openstack:~# lsb_release -a No LSB modules are available. Distributor ID:Ubuntu D ...

  7. Linux 性能优化实战(倪朋飞)---CPU 使用率

    查看 CPU 使用率 对于 CPU 使用率,top 默认 3 秒时间间隔:ps 使用的是进程的整个生命周期. top 显示系统总体的 CPU 和内存使用情况,及各个进程的资源使用情况:ps 只显示每隔 ...

  8. 学习Linux性能优化实战-1

    文章目录 前言 平均负载 命令 进程调度 命令 相关文件 CPU使用率 perf 软中断 测试工具 前言 最近在极客时间上面发现了倪鹏飞老师的Linux性能优化实战,自己感觉讲得很好,有兴趣的朋友可以 ...

  9. linux下缓存命中测试,Linux 性能优化实战(倪朋飞)---查看缓存命中情况

    cachestat 提供了整个操作系统缓存的读写命中情况. cachetop 提供了每个进程的缓存命中情况.但是,cachetop 并不把直接 I/O 算进来. 安装 cachestat.cachet ...

最新文章

  1. android屏幕分辨率详解 ldpi mdpi hdpi 程序UI自适应 《官方翻译》
  2. vue总结 08状态管理vuex
  3. 轻松看懂机器学习十大常用算法
  4. ps cs6磨皮插件_【PS插件】ps磨皮插件Portraiture
  5. ubuntu搜狗输入法突然无法使用(新解)
  6. python编程(再述rpc)
  7. juniper防火墙策略元素
  8. 容器技术Docker K8s 5 容器技术在阿里巴巴落地历程
  9. JavaScript的那些书
  10. HTML元素居中的方法
  11. 应用层协议——RADIUS
  12. 经济学常识之破窗谬论
  13. api文档 luci_openwrt中luci学习笔记
  14. linux下查看系统内存使用情况的几个命令
  15. 一份简单的车辆环视全景系统实现
  16. html+js在前端实现条码枪功能Demo
  17. 外文翻译原文附在后面_外文翻译及外原文(参考格式).doc
  18. tenda服务器端口映射,腾达(Tenda)路由器端口映射设置教程 | 192路由网
  19. 二维码报修系统的技术实现
  20. 女朋友乱用Git,差点把我代码删了。。。

热门文章

  1. print、println的区别
  2. Jenkins怎么启动和停止服务
  3. hdu 4059 The Boss on Mars
  4. 小问题(可能持续更新)
  5. android service 学习(下)
  6. mysql性能调优与架构设计_了解架构设计远远不够!一文拆解 Tomcat 高并发原理与性能调优
  7. mysql 查看主从_什么参数可以查看mysql主从复制是否正常
  8. html实现带有数字的列表,纯CSS实现雨滴形状的数字序号列表
  9. oracle rodm包,由重启引起的Oracle RAC节点宕机分析及追根溯源
  10. keil git 编译文件_keil下的STM32程序开发部署(一)