随笔分类 - Linux
摘要:磁盘 I/O 性能指标 性能工具 从 I/O 角度来分析,最开始的分析思路基本上类似,都是: 先用 iostat 发现磁盘 I/O 性能瓶颈; 再借助 pidstat ,定位出导致瓶颈的进程; 随后分析进程的 I/O 行为; 最后,结合应用程序的原理,分析这些 I/O 的来源。
阅读全文
摘要:同 CPU、内存一样,磁盘和文件系统的管理,也是操作系统最核心的功能。 磁盘为系统提供了最基本的持久化存储。 文件系统则在磁盘的基础上,提供了一个用来管理文件的树状结构。 那么,磁盘和文件系统是怎么工作的呢?又有哪些指标可以衡量它们的性能呢? 索引节点和目录项 文件系统,本身是对存储设备上的文件,进
阅读全文
摘要:内存性能指标 为了分析内存的性能瓶颈,首先你要知道,怎样衡量内存的性能,也就是性能指标问题。 首先,你最容易想到的是系统内存使用情况,比如已用内存、剩余内存、共享内存、可用内存、缓存和缓冲区的用量等。 已用内存和剩余内存很容易理解,就是已经使用和还未使用的内存。 共享内存是通过 tmpfs 实现的,
阅读全文
摘要:在内存资源紧张时,Linux 通过直接内存回收和定期扫描的方式,来释放文件页和匿名页,以便把内存分配给更需要的进程使用。 文件页的回收比较容易理解,直接清空缓存,或者把脏数据写回磁盘后,再释放缓存就可以了。 而对不常访问的匿名页,则需要通过 Swap 换出到磁盘中,这样在下次访问的时候,再次从磁盘换
阅读全文
摘要:系统的内存资源紧张时,系统又会如何应对呢? 这其实会导致两种可能结果,内存回收和 OOM 杀死进程。 我们这里重点看第一个可能的结果,内存回收,也就是系统释放掉可以回收的内存,比如我前面讲过的缓存和缓冲区,就属于可回收内存。它们在内存管理中,通常被叫做文件页(File-backed Page)。 文
阅读全文
摘要:文件系统的功能规划 对于运行的进程来说,内存就像一个纸箱子,仅仅是一个暂存数据的地方,而且空间有限。 如果我们想要进程结束之后,数据依然能够保存下来,就不能只保存在内存里,而是应该保存在外部存储中。就像图书馆这种地方,不仅空间大,而且能够永久保存。 我们最常用的外部存储就是硬盘,数据是以文件的形式保
阅读全文
摘要:Buffer 和 Cache 的设计目的,是为了提升系统的 I/O 性能。它们利用内存,充当起慢速磁盘与快速 CPU 之间的桥梁,可以加速 I/O 的访问速度。 Buffer 和 Cache 分别缓存的是对磁盘和文件系统的读写数据。 从写的角度来说,不仅可以优化磁盘和文件的写入,对应用程序也有好处,
阅读全文
摘要:回顾一下系统的内存使用情况,比如下面这个 free 输出界面: # 注意不同版本的free输出可能会有所不同 $ free total used free shared buff/cache available Mem: 8169348 263524 6875352 668 1030472 7611
阅读全文
摘要:提问:物理的页面是如何管理的? 物理内存的组织方式 涉及物理内存的映射的时候,我们总是把内存想象成它是由连续的一页一页的块组成的。我们可以从 0 开始对物理页编号,这样每个物理页都会有个页号。 由于物理地址是连续的,页也是连续的,每个页大小也是一样的。因而对于任何一个地址,只要直接除一下每页的大小,
阅读全文
摘要:32 位系统和 64 位系统的内存布局有的地方相似,有的地方差别比较大 用户态和内核态的划分 从 task_struct 出发来看。这里面有一个 struct mm_struct 结构来管理内存。 struct mm_struct *mm; 在 struct mm_struct 里面,有这样一个成员
阅读全文
摘要:内存管理是操作系统最核心的功能之一。内存主要用来存储系统和应用程序的指令、数据、缓存等。 内存映射 我们平常所说的笔记本内存,指的是物理内存,也称主存。只有内核菜可以直接访问物理内存,那么,进程要访问内存时,该怎么操作? Linux 内核给每个进程都提供了一个独立的虚拟地址空间,并且这个地址空间是连
阅读全文