码迷,mamicode.com
首页 > 系统相关 > 详细

linux性能优化实战-内存性能指标

时间:2019-04-20 10:03:39      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:lin   malloc   ide   src   直接映射   地址   映射   RoCE   ati   

转自: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 的来源。

技术图片

linux性能优化实战-内存性能指标

标签:lin   malloc   ide   src   直接映射   地址   映射   RoCE   ati   

原文地址:https://www.cnblogs.com/yanwei-wang/p/10739808.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!