Linux性能优化实战
倪朋飞
微软资深工程师,Kubernetes项目维护者
立即订阅
23395 人已学习
课程目录
已完结 64 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (2讲)
开篇词 | 别再让Linux性能问题成为你的绊脚石
免费
01 | 如何学习Linux性能优化?
CPU 性能篇 (13讲)
02 | 基础篇:到底应该怎么理解“平均负载”?
03 | 基础篇:经常说的 CPU 上下文切换是什么意思?(上)
04 | 基础篇:经常说的 CPU 上下文切换是什么意思?(下)
05 | 基础篇:某个应用的CPU使用率居然达到100%,我该怎么办?
06 | 案例篇:系统的 CPU 使用率很高,但为啥却找不到高 CPU 的应用?
07 | 案例篇:系统中出现大量不可中断进程和僵尸进程怎么办?(上)
08 | 案例篇:系统中出现大量不可中断进程和僵尸进程怎么办?(下)
09 | 基础篇:怎么理解Linux软中断?
10 | 案例篇:系统的软中断CPU使用率升高,我该怎么办?
11 | 套路篇:如何迅速分析出系统CPU的瓶颈在哪里?
12 | 套路篇:CPU 性能优化的几个思路
13 | 答疑(一):无法模拟出 RES 中断的问题,怎么办?
14 | 答疑(二):如何用perf工具分析Java程序?
内存性能篇 (8讲)
15 | 基础篇:Linux内存是怎么工作的?
16 | 基础篇:怎么理解内存中的Buffer和Cache?
17 | 案例篇:如何利用系统缓存优化程序的运行效率?
18 | 案例篇:内存泄漏了,我该如何定位和处理?
19 | 案例篇:为什么系统的Swap变高了(上)
20 | 案例篇:为什么系统的Swap变高了?(下)
21 | 套路篇:如何“快准狠”找到系统内存的问题?
22 | 答疑(三):文件系统与磁盘的区别是什么?
I/O 性能篇 (10讲)
23 | 基础篇:Linux 文件系统是怎么工作的?
24 | 基础篇:Linux 磁盘I/O是怎么工作的(上)
25 | 基础篇:Linux 磁盘I/O是怎么工作的(下)
26 | 案例篇:如何找出狂打日志的“内鬼”?
27 | 案例篇:为什么我的磁盘I/O延迟很高?
28 | 案例篇:一个SQL查询要15秒,这是怎么回事?
29 | 案例篇:Redis响应严重延迟,如何解决?
30 | 套路篇:如何迅速分析出系统I/O的瓶颈在哪里?
31 | 套路篇:磁盘 I/O 性能优化的几个思路
32 | 答疑(四):阻塞、非阻塞 I/O 与同步、异步 I/O 的区别和联系
网络性能篇 (13讲)
33 | 关于 Linux 网络,你必须知道这些(上)
34 | 关于 Linux 网络,你必须知道这些(下)
35 | 基础篇:C10K 和 C1000K 回顾
36 | 套路篇:怎么评估系统的网络性能?
37 | 案例篇:DNS 解析时快时慢,我该怎么办?
38 | 案例篇:怎么使用 tcpdump 和 Wireshark 分析网络流量?
39 | 案例篇:怎么缓解 DDoS 攻击带来的性能下降问题?
40 | 案例篇:网络请求延迟变大了,我该怎么办?
41 | 案例篇:如何优化 NAT 性能?(上)
42 | 案例篇:如何优化 NAT 性能?(下)
43 | 套路篇:网络性能优化的几个思路(上)
44 | 套路篇:网络性能优化的几个思路(下)
45 | 答疑(五):网络收发过程中,缓冲区位置在哪里?
综合实战篇 (13讲)
46 | 案例篇:为什么应用容器化后,启动慢了很多?
47 | 案例篇:服务器总是时不时丢包,我该怎么办?(上)
48 | 案例篇:服务器总是时不时丢包,我该怎么办?(下)
49 | 案例篇:内核线程 CPU 利用率太高,我该怎么办?
50 | 案例篇:动态追踪怎么用?(上)
51 | 案例篇:动态追踪怎么用?(下)
52 | 案例篇:服务吞吐量下降很厉害,怎么分析?
53 | 套路篇:系统监控的综合思路
54 | 套路篇:应用监控的一般思路
55 | 套路篇:分析性能问题的一般步骤
56 | 套路篇:优化性能问题的一般方法
57 | 套路篇:Linux 性能工具速查
58 | 答疑(六):容器冷启动如何性能分析?
加餐篇 (4讲)
加餐(一) | 书单推荐:性能优化和Linux 系统原理
加餐(二) | 书单推荐:网络原理和 Linux 内核实现
用户故事 | “半路出家 ”,也要顺利拿下性能优化!
用户故事 | 运维和开发工程师们怎么说?
结束语 (1讲)
结束语 | 愿你攻克性能难关
Linux性能优化实战
登录|注册

31 | 套路篇:磁盘 I/O 性能优化的几个思路

倪朋飞 2019-01-30
你好,我是倪朋飞。
上一节,我们一起回顾了常见的文件系统和磁盘 I/O 性能指标,梳理了核心的 I/O 性能观测工具,最后还总结了快速分析 I/O 性能问题的思路。
虽然 I/O 的性能指标很多,相应的性能分析工具也有好几个,但理解了各种指标的含义后,你就会发现它们其实都有一定的关联。
顺着这些关系往下理解,你就会发现,掌握这些常用的瓶颈分析思路,其实并不难。
找出了 I/O 的性能瓶颈后,下一步要做的就是优化了,也就是如何以最快的速度完成 I/O 操作,或者换个思路,减少甚至避免磁盘的 I/O 操作。
今天,我就来说说,优化 I/O 性能问题的思路和注意事项。

I/O 基准测试

按照我的习惯,优化之前,我会先问自己, I/O 性能优化的目标是什么?换句话说,我们观察的这些 I/O 性能指标(比如 IOPS、吞吐量、延迟等),要达到多少才合适呢?
事实上,I/O 性能指标的具体标准,每个人估计会有不同的答案,因为我们每个人的应用场景、使用的文件系统和物理磁盘等,都有可能不一样。
为了更客观合理地评估优化效果,我们首先应该对磁盘和文件系统进行基准测试,得到文件系统或者磁盘 I/O 的极限性能。
fio(Flexible I/O Tester)正是最常用的文件系统和磁盘 I/O 性能基准测试工具。它提供了大量的可定制化选项,可以用来测试,裸盘或者文件系统在各种场景下的 I/O 性能,包括了不同块大小、不同 I/O 引擎以及是否使用缓存等场景。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《Linux性能优化实战》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(21)

  • ninuxer
    打卡day32
    找io问题,有了一定的套路,但是针对这节写的优化的东西,吸收起来还是比较费劲,比如:为什么要调这个参数,而不是其他参数?为什么参数设置这个值而不是其他值?
    关于设置值可以通过fio去测试,io性能提升了,满足要求,就可以了,但是io好了,会不会带来其他方面的影响?
    综上所述,还是基础不牢,最近已经开始啃《深入Linux内核架构》,不忘初心,砥砺前行!

    作者回复: 嗯嗯,是的,并且这些东西也没法在这儿展开来讲,每一块涉及的东西都比较多。实际在操作之前,还需要去了解背后的原理,特别是要注意会不会带来其他不好的影响(比如优化了I/O,CPU和内存使用可能上升)。

    2019-01-30
    7
  • JohnT3e
    现在越来越多系统使用SSD,它和HDD相比还是有较大差异的。经常看到某某系统针对于SSD优化,那这边的有哪些优化点?之前看过一个系列的文章(http://codecapsule.com/2014/02/12/coding-for-ssds-part-1-introduction-and-table-of-contents/),从硬件架构到编程设计比较详细的介绍了如何优化,配合这里的思路看,加深了理解。

    作者回复: 赞,谢谢分享

    2019-01-30
    3
  • 风动草
    老师好!我们最近发生了一件非常诡异的问题,mysql从普通票迁移到ssd后,内存使用一直飙升,迁回普通票又正常,mysql内存配置是操作系统的20%。希望老师能给个分析建议,给你发个大红包,实在没办法了。

    作者回复: 飙升到多少?超过20%吗?可以考虑检查buffer的配置项、临时表大小等看看内存都耗费在哪里了 https://dev.mysql.com/doc/refman/5.7/en/memory-summary-tables.html

    2019-04-29
    2
  • 我来也
    [D31打卡]
    平常没机会从系统层面优化磁盘性能参数。
    能做的就是减少磁盘写入,以及错峰操作磁盘。
    比如在凌晨或业务低谷时,压缩备份日志,减少对正常业务的影响。
    文中的这么多底层参数,只能望而生叹。😄

    作者回复: 嗯嗯,一般来说,从应用层优化可以满足大部分需求了

    2019-01-31
    1
  • 梁中华
    针对Ssd 的特性和注意事项可以考虑单开一章

    作者回复: 嗯嗯,其实抠细节的话,每一条都可以单独开一章了。篇幅有限,只能大略介绍一下

    2019-01-30
    1
  • xfan
    谢谢@ninuxer推荐 《深入Linux内核架构》,我也去补一补

    作者回复: 👍

    2019-01-30
    1
  • Ender0224
    所以请问如何安全的使用fio呢, 是单独使用一个device用来测试fio么?

    作者回复: 安全的使用fio是什么意思?一般来说,测试时别在系统盘或者存有重要的磁盘中来操作

    2019-01-30
    1
    1
  • 小老鼠
    整理磁盘碎块
    2019-01-30
    1
  • loser
    干货满满
    2019-11-15
  • 李明华
    大神好:
    我在生产的一台新上架的服务器上,测试了随机读的磁盘指标
     sudo fio -name=randread -direct=1 -iodepth=64 -rw=randread -ioengine=libaio -bs=4k -size=2G -numjobs=1 -runtime=1000 -group_reporting -filename=/dev/sda
    ---------------------------------------------------------------------------
    结果
        slat (usec): min=2, max=151, avg=13.73, stdev= 7.29
        clat (usec): min=37, max=948718, avg=20301.72, stdev=27583.37
         lat (usec): min=44, max=948725, avg=20315.79, stdev=27583.38
        clat percentiles (usec):
         | 1.00th=[ 109], 5.00th=[ 2040], 10.00th=[ 3163], 20.00th=[ 5080],
         | 30.00th=[ 6783], 40.00th=[ 8455], 50.00th=[ 10552], 60.00th=[ 14222],
         | 70.00th=[ 19268], 80.00th=[ 28181], 90.00th=[ 47449], 95.00th=[ 70779],
         | 99.00th=[137364], 99.50th=[170918], 99.90th=[252707], 99.95th=[287310],
         | 99.99th=[367002]
       bw ( KiB/s): min=10184, max=17664, per=99.73%, avg=12564.09, stdev=1256.26, samples=332
       iops : min= 2546, max= 4418, avg=3141.02, stdev=314.09, samples=332
    从而可以看出 ,随机读的极限也就在 iops:4418 读吞吐量在 17.25M IO使用率也差不多极限了

    同时iostat 也观察了磁盘的指标
    Device r/s w/s rkB/s wkB/s rrqm/s wrqm/s %rrqm %wrqm r_await w_await aqu-sz rareq-sz wareq-sz svctm %util
    sda 3876.00 0.00 15504.00 0.00 0.00 0.00 0.00 0.00 16.48 0.00 55.94 4.00 0.00 0.26 100.00

    Device r/s w/s rkB/s wkB/s rrqm/s wrqm/s %rrqm %wrqm r_await w_await aqu-sz rareq-sz wareq-sz svctm %util
    sda 3846.00 5.00 15384.00 1064.00 0.00 0.00 0.00 0.00 16.46 2521.40 68.18 4.00 212.80 0.26 100.00

    读IOPS在3800-3900 吞吐量在15.5M IO使用率已经100%

    而我生产(大量小文件场景,应该是随机IO)使用promethes的node_exporter采集的指标中 读吞吐量 可以达到73M+ 这个感觉差的有点大 ??? 这个是哪里不对吗??? iops 不高 最多两千多
    +++++++++++++++++++++++++++++++++++++++++++++++++++
    另外就是
    我通过监控发现 IO使用率 有时候iops和吞吐量不多 范围100% 而多的反问不到100% cpu也正常 不搞
    我还能通过其他方面查看问题吗

    作者回复: 检查一下是不是指标的计算方法有问题?

    2019-10-18
  • 404
    能否详解一下 队列长度 的意思和对磁盘的影响
    2019-09-12
  • Darrykinger.com
    你像fio和blkstrace 的工具,这个是在批量采购之前进行磁盘的性能的评估吧,在生产环境中用并不是很多吧?有点像是产品上线的设备选购。。

    作者回复: 嗯嗯,在采购之后一般也要测评一下,看看是不是跟预期一样

    2019-08-24
  • 风动草
    不止超过20%,比如所有全局和线程级别的加起来,用你给的链接算最大使用内存是8g,但还是使用能达到12g,最后oom。但迁移到普通票这个现象就消失了。。。迁移到ssd就是有这个问题,迁移了几次,结果都这样。
    2019-06-24
  • InfoQ_686548eeb0d8
    磁盘可以收缩具体指的什么?
    2019-06-15
  • Geek_96e358
    老师,新购的服务器是不是应该做一个基准测试,方便以后作为性能问题定位的基准?

    作者回复: 嗯嗯,推荐测试一下,也可以顺便确认新机器的性能没有问题(同配置的性能应该大致相同)

    2019-04-11
  • 如果
    DAY31,打卡
    2019-03-19
  • 苦行僧
    老师 我们经常会出现写文件出现0k文件 这种一般是什么情况会出现的?
    2019-03-06
  • 苦行僧
    我们现在的问题就是并发机器下载远程ftp视频文件写本地存储,这个本地存储是共享存储,目前的情况是读快写慢,导致数据落盘很慢,老师有没有好的优化方法吗?

    作者回复: 磁盘I/O已经是瓶颈的话,可以考虑优化存储,比如更快的磁盘、RAID 等

    2019-03-04
  • 小橙子
    slat指的是II从创建到提交到内核的时间吧
    clat的指的是每个收到到完成的时间吧
    感觉这里解释的有点没看明白
    请教下同步IO为啥ClAT为0

    作者回复: 看英文注释,一个是Submission,一个是Completion。

    同步ClAT为0是因为两个操作算作是一个(第一个),第二个当然数值上就是0了

    2019-02-22
  • 2xshu
    老师好,如何修改磁盘的io调度算法哇?

    作者回复: 修改 /sys/block/{DEVICE-NAME}/queue/scheduler

    2019-01-30
收起评论
21
返回
顶部