加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – 在正常运行30分钟后调用sync / fsync会降低IO速度

发布时间:2020-12-13 16:36:22 所属栏目:Linux 来源:网络整理
导读:使用带有ext4 hybrid SSD的Ubuntu 14.04运行30分钟后,我看到很多进程使用iotop阻止了IO. 这种减速的根本原因可以追溯到Unix系统调用同步. 重复从终端运行同步可能需要1 – 2秒,但仅在30分钟正常运行时间. 为了证明这一点,我制作了一个脚本,可以在几秒钟内输
使用带有ext4 hybrid SSD的Ubuntu 14.04运行30分钟后,我看到很多进程使用iotop阻止了IO.

这种减速的根本原因可以追溯到Unix系统调用同步.

重复从终端运行同步可能需要1 – 2秒,但仅在30分钟正常运行时间.

为了证明这一点,我制作了一个脚本,可以在几秒钟内输出正常运行时间与执行同步所需的时间,并且每秒运行一次:

while true;
do
cat /proc/uptime | awk '{printf "%f ",$1}'; /usr/bin/time -f '%e' sync;
sleep 1;
done;

我运行了上面的脚本,等待了大约一个小时(系统处于空闲状态)并将结果绘制在gnuplot中(y =以秒为单位执行同步的时间,x =以秒为单位的正常运行时间):

图形拍摄的时间点大约是1780(1780/60 =大约30分钟).

除了脚本之外,此时不应该写入磁盘,因此在第一次同步之后页面缓存中应该没有任何内容,每个后续同步将准确写入正在写入脚本的内容,大约100个字节或所以.

当我检查cat / proc / meminfo脏行(页面缓存中需要保存到磁盘的数据?)和写回行(HD磁盘缓冲区?)都为零时.我的想法是调用同步刷新这些磁盘缓存但它仍然冻结,即使这些缓存中没有任何东西,所以它还做了别的什么?

重新启动后此问题仍然存在;例如 – 如果我等待30分钟减速然后重新启动,那么减速仍将存在.如果我断电然后重新启动问题将消失,直到30分钟后.

另一个好奇心是,当我检查上面的图表并放大了发生减速的区域时,我得到了这个:

波峰和波谷重复 – 从波谷到波谷每隔10秒发生一次.

我还在减速之前运行了hdparm测试(hdparm -t / dev / sda和hdparm -T / dev / sda):

/dev/sda:
Timing cached reads:   23778 MB in  2.00 seconds = 11900.64 MB/sec
/dev/sda:
Timing buffered disk reads: 318 MB in  3.01 seconds = 105.63 MB/sec

在减速期间:

/dev/sda:
 Timing cached reads:     2 MB in  2.24 seconds = 915.50 kB/sec
/dev/sda:
Timing buffered disk reads: 300 MB in  3.01 seconds =  99.54 MB/sec

显示实际的磁盘读取没有受到影响但是缓存读取是否意味着这与系统总线有关,而不是HD呢?

这是我尝试过的解决方案:

>更改HD的spindown设置(可能是HD进入省电模式?):

hdparm /dev/sda -S252 #(set it to 5 hours before spindown)

>将文件系统的日志记录类型更改为回写而不是订购,以便我们获得性能改进 – 这不能解决问题,因为它没有解释30分钟无法减速的正常运行时间,当我尝试这个没有变化时.
>禁用CRON,因为它似乎在30分钟后出现.
> CPU使用率很好,并且完全空闲,所以没有任何进程可以归咎于我,但是我已经尝试关闭包括会话管理器(lightdm)在内的每个服务,这没有任何作用,因为我认为问题是较低级别.
>分析在30分钟进入的任何新进程表明没有变化 – 我已经在前后差分输出PS,并且没有区别.

这仅在大约2周前开始发生,没有安装任何内容,并且在此期间没有进行任何更新.我认为这个问题的水平要低得多,所以我真的很感激一些帮助,因为我很无能为力,即使把我指向正确的方向也会有所帮助.

在相关磁盘上启用了写入缓存,我也尝试禁用写入障碍. HD上的SMART数据表明HD本身没有任何问题,但是我怀疑这是HD在重新启动后仍然存在的神秘感.

解决方法

这是因为有问题的驱动器启用了 SMART data.

禁用SMART数据解决了这个问题:

sudo smartctl --smart=off /dev/sda

有趣的是,为驱动器重新启用SMART数据并不能使问题返回,这表明SMART处于不一致状态(自检运行时可能发生崩溃?)并将其关闭然后再次重置该状态.

据推测,在磁盘旋转并进入循环后30分钟,它仍然会重新运行某种内部自检;因为这是在硬件层,计算机的其余部分没有意识到它正在进行,因此我看不到特别是负责IO阻塞的进程,也没有任何进程占用资源.

我会在尝试找出错误的同时运行SMART自检,但即使没有重置状态 – 它必须先关闭然后再显示.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读