当我注意到iostat -dxk 3显示非常慢的读取速度,介于5 MB / s和10 MB / s之间,磁盘利用率为100%时,我正在使用GNU排序对一些大文件(27个文件中的91GB)进行排序.我试过猫大文件> / dev / null,并获得了类似的性能,仅略高一些.对于cp large-file / tmp /,在单独的磁盘上使用/ tmp也是如此.
vim体验相同,以及我在
Ruby阅读文件中编写的脚本,如果有帮助的话.写入速度虽然快但是很快.
编辑:看起来这些操作只对某个目录中的文件很慢.对兄弟目录(同一磁盘分区)中的其他文件执行相同操作,最终速度很快,读取速度超过90 MBPS.这对我没有意义.可能是由于这些文件的构建方式?我通过读入许多其他文件来创建它们,并将每行写入适当的“存储桶文件”,具体取决于行中的第一个字符(所以a-z和其他文件的单个文件).所以我几乎同时在27个文件中添加行,一次一个,通过8个进程,同时读取几千个文件.这会导致代表文件的块顺序排序而不是顺序吗?因此之后的慢顺序读取?
但是,我尝试使用fio来测量顺序读取性能,它的时钟速度为73 MB / s.另外值得注意的是,当我从同一台机器上通过FTP下载某些文件时,我的老板得到了正确的读取速度.
所以我猜这是某个配置问题,但我不知道在哪里.原因是什么,我该如何解决?
编辑:此计算机在Citrix Xen虚拟化下运行.
编辑:输出iostat -dxk,而sort将大文件加载到其缓冲区中(获取cat / cp的类似输出):
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util xvdb 0.00 0.00 1000.00 0.00 6138.61 0.00 12.28 24.66 24.10 0.99 99.41 xvdb1 0.00 0.00 1000.00 0.00 6138.61 0.00 12.28 24.66 24.10 0.99 99.41 xvda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 xvda1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
编辑:几个小时后进一步性能下降(处理排序时磁盘中断).它几乎看起来像随机IO,但只有一个排序操作正在进行,没有其他进程在执行任何IO,因此读取应该是顺序= /:
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util xvdb 0.00 0.00 638.00 0.00 2966.67 0.00 9.30 25.89 40.62 1.57 100.00 Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util xvdb 0.33 0.00 574.67 0.00 2613.33 0.00 9.10 27.82 47.55 1.74 100.00 Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util xvdb 0.00 0.00 444.33 0.00 1801.33 0.00 8.11 28.41 65.27 2.25 100.00
解决方法
您的慢速文件是否高度分散?运行/usr/sbin / filefrag -vfilename查找.你会得到如下输出:
Checking big.file Filesystem type is: ef53 Filesystem cylinder groups is approximately 4272 Blocksize of file big.file is 4096 File size of big.file is 96780584 (23629 blocks) First block: 88179714 Last block: 88261773 Discontinuity: Block 6 is at 88179742 (was 88179719) Discontinuity: Block 12233 is at 88192008 (was 88191981) Discontinuity: Block 17132 is at 88197127 (was 88196911) Discontinuity: Block 17133 is at 88255271 (was 88197127) big.file: 5 extents found,perfection would be 1 extent
或者更糟糕的是.
您提到系统正在虚拟化下运行.这是访问虚拟磁盘映像文件?