Linux性能优化之磁盘优化 磁盘优化有什么用

前言
关于本章内容,设计的东西比较多 。这里会有关于文件系统、磁盘、CPU等方面的知识,以及涉及到关于这方面的性能排查等 。
术语
文件系统通过缓存和缓冲以及异步I/O等手段来缓和磁盘的延时对应用程序的影响 。为了更详细的了解文件系统,以下就简单介绍一些相关术语:

  • 文件系统:一种把数据组织成文件和目录的存储方式,提供了基于文件的存取接口,并通过文件权限控制访问 。另外,一些表示设备、套接字和管道的特殊文件类型,以及包含文件访问时间戳的元数据 。
  • 文件系统缓存:主存(通常是DRAM) 的一块区域,用来缓存文件系统的内容,可能包含各种数据和元数据 。
  • 操作:文件系统的操作是对文件系统的请求,包括读、写、打开、关闭、创建以及其他操作 。
  • I/O:输入/输出 。文件系统I/O有多种定义,这里仅指直接读写(执行I/O)的操作,包括读、写、状态统计、创建 。I/O不包括打开文件和关闭文件 。
  • 逻辑I/O:由应用程序发给文件系统的I/O 。
  • 物理I/O:由文件系统直接发给磁盘的I/O 。
  • 吞吐量:当前应用程序和文件系统之间的数据传输率,单位是B/S 。
  • inode:一个索引节点时一种含有文件系统对象元数据的数据结构,其中有访问权限、时间戳以及数据指针 。
  • VFS:虚拟文件系统,一个为了抽象与支持不同文件系统类型的内核接口 。
磁盘相关术语:
  • 存储设备的模拟 。在系统看来,这是一块物理磁盘,但是,它可能由多块磁盘组成 。
  • 传输总线:用来通信的物理总线,包括数据传输以及其他磁盘命令 。
  • 扇区:磁盘上的一个存储块,通常是512B的大小 。
  • I/O:对于磁盘,严格地说仅仅指读、写,而不包括其他磁盘命令 。I/O至少由方向(读或写)、磁盘地址(位置)和大小(字节数)组成 。
  • 磁盘命令:除了读写之外,磁盘还会被指派执行其他非数据传输的命令(例如缓存写回) 。
  • 带宽:存储传输或者控制器能够达到的最大数据传输速率 。
  • I/O延时:一个I/O操作的执行时间,这个词在操作系统领域广泛使用,早已超出了设备层 。
相关概念
文件系统延时
文件系统延时是文件系统性能一项主要的指标,指的是一个文件系统逻辑请求从开始到结束的时间 。它包括消耗在文件系统、内核磁盘I/O子系统以及等待磁盘设备——物理I/O的时间 。应用程序的线程通常在请求时阻塞,等地文件系统请求的结束 。这种情况下,文件系统的延时与应用程序的性能直接和成正比关系 。在某些情况下,应用程序并不受文件系统的直接影响,例如非阻塞I/O或者I/O由一个异步线程发起 。
缓存
文件系统启动之后会使用主存(RAM)当缓存以提供性能 。缓存大小随时间增长而操作系统的空余内存不断减小,当应用程序需要更多内存时,内核应该迅速从文件系统缓存中释放一些内存空间 。文件系统用缓存(caching)提高读性能,而用缓冲(buffering)提高写性能 。文件系统和块设备子系统一般使用多种类型的缓存 。
随机I/O与顺序I/O
一连串的文件系统逻辑I/O,按照每个I/O的文件偏移量,可以分为随机I/O与顺序I/O 。顺序I/O里每个I/O都开始于上一个I/O结束的地址 。随机I/O则找不出I/O之间的关系,偏移量随机变化 。随机的文件系统负载也包括存取随机的文件 。由于存储设备的某些性能特征的缘故,文件系统一直以来在磁盘上顺序和连续的存放文件数据,以努力减小随机I/O的数目 。当文件系统未能达到这个目标时,文件的摆放变得杂乱无章,顺序的逻辑I/O被分解成随机的物理I/O,这种情况被称为碎片化 。
提示:关于文件系统更多内容,还请自行查阅相关理论 。比如你还需要了解文件系统的预读、预取、写回缓存、同步写、裸I/O、直接I/O、内存映射文件、元数据等相关知识 。
性能分析
具备背景知识是分析性能问题时需要了解的 。比如硬件 cache;再比如操作系统内核 。应用程序的行为细节往往是和这些东西互相牵扯的,这些底层的东西会以意想不到的方式影响应用程序的性能,比如某些程序无法充分利用 cache,从而导致性能下降 。比如不必要地调用过多的系统调用,造成频繁的内核 / 用户切换等 。如果想深入了解Linux系统,建议购买相关书籍进行系统的学习 。下面我们介绍如何分析磁盘性能工具(其实准确来说,不只是磁盘):
iostat
汇总了单个磁盘的统计信息,为磁盘负载、使用率和饱和度提供了指标 。默认显示一行系统总结信息,包括内核版本、主机名、日志、架构和CPU数量等,每个磁盘设备都占一行 。