随笔 - 303  文章 - 0  评论 - 3  阅读 - 15万

Linux性能优化之磁盘I/O调优

  I/O指标已介绍,那么如何查看系统的这些指标呢?

  一、根据工具查性能

    

  二、根据性能找工具

    

   三、磁盘I/O观察实例

    iostat 是最常用的磁盘 I/O 性能观测工具,它提供了每个磁盘的 使用率 IOPS 吞吐量 等各种常见的性能指标。这些指标实际上来自 /proc/diskstats
    

    1)%util ,就是我们前面提到的磁盘 I/O 使用率;

    2)r/s+ w/s ,就是 IOPS
    3)rkB/s+wkB/s ,就是吞吐量;
    4)r_await+w_await ,就是响应时间。
    5)iostat 并不能直接得到磁盘饱和度。可以把观测到的,平均请求队列长度或者读写请求完成的等待时间,跟基准测试的结果进行对比,综合评估磁盘的饱和情况。
  四、进程I/O观察实例

    可以使用 pidstat iotop 这两个工具。
      

       

   五、I/O优化策略

    1.应用程序优化策略
      第一,可以用追加写代替随机写,减少寻址开销,加快 I/O 写的速度。
      第二,可以借助缓存 I/O ,充分利用系统缓存,降低实际 I/O 的次数。
      第三,可以在应用程序内部构建自己的缓存,或者用 Redis 这类外部缓存系统。
      第四,需要频繁读写同一块磁盘空间时,可以用 mmap 代替 read/write,减少内存的拷贝次数。
      第五,在需要同步写的场景中,尽量将写请求合并,而不是让每个请求都同步写入磁盘。
      第六,在多个应用程序共享相同磁盘时,为了保证 I/O 不被某个应用完全占用,推荐你使用 cgroups I/O 子系统,来限制进程 进程组的 IOPS 以及吞吐量。
    2.文件系统优化策略
      第一,可以根据实际负载场景的不同,选择最适合的文件系统。比如 Ubuntu 默认使用 ext4 文件系统
      第二,在选好文件系统后,还可以进一步优化文件系统的配置选项 。
      第三,可以优化文件系统的缓存 。

    3.磁盘优化策略
      磁盘也是整个 I/O 栈的最底层。从磁盘角度出发,自然也有很多有效的性能优化方法
      第一,最简单有效的优化方法,就是换用性能更好的磁盘,比如用 SSD 替代 HDD
      第二,可以使用 RAID ,把多块磁盘组合成一个逻辑磁盘,构成冗余独立磁盘阵列。这样做既可以提高数据的可靠性,又可以提升数据的访问性能。
      第三,针对磁盘和应用程序 I/O 模式的特征,我们可以选择最适合的 I/O 调度算法。比方说,SSD 和虚拟机中的磁盘,通常用的是 noop 调度算法。而数据库应用,我更推荐使用 deadline 算法。
      第四,可以对应用程序的数据,进行磁盘级别的隔离 。
      第五,在顺序读比较多的场景中,可以增大磁盘的预读数据 。
      第六,可以优化内核块设备 I/O 的选项。比如,可以调整磁盘队列的长度,以提升磁盘的吞吐量 。


posted on   池塘里洗澡的鸭子  阅读(1364)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示