我可以模拟慢速硬盘吗?


19

我有预感,某个间歇性错误可能仅在磁盘读取速度较慢时才会显现出来。故障排除很困难,因为我无法可靠地重现它。

除了通过优先级高的进程简单吞噬IO之外,还有什么方法可以让我模拟慢速硬盘驱动器?


我记得曾经看到一个命令来告诉硬盘驱动器以某些总线速度运行。我看看是否可以将其挖掘出来。
杰里米

man hdparm看一下-X选项吗?您可以使用其中的许多功能来降低驱动器的速度,但是其中一些可能会对数据造成讨厌的后果!
杰里米

另外,请尝试将网络共享安装为文件夹(Google是您的朋友),甚至可以通过wifi挂载(如果可行)。
杰里米

1
这不是一个直接的答案,但是:如果我有一个类似的间歇性错误,我可能会尝试在Valgrind下运行该进程(如果使用的是编译语言),因为那样可能会捕获IO竞争条件。
poolie

1
您是在谈论应用程序,内核或设备驱动程序中的错误吗?还是根本不知道?如果您进行更多说明,可能会有所帮助。
poolie

Answers:


15

使用nbd(网络阻止设备),然后使用say限制访问它的速率trickle

sudo apt-get install nbd-client nbd-server trickle

+1是一个很酷的解决方案。但是,这不是真正的测试,因为您不会使用真正的硬盘设备驱动程序,而这可能是问题所在。
Unix管理员

1
我不认为他在谈论驱动程序错误,但这只是一个假设。让我们来看看。
Poolie 2010年

10
是否可以在此答案中添加实际命令?目前,您仅显示如何安装所需的工具:)
Rich

5
#回声1> / proc / sys / vm / drop_caches

那会让你慢下来:)

这将迫使您从磁盘读取数据,而不是利用缓存的页面。

如果您真的想变得复杂,可以使用scsi故障注入框架每n次执行一次伪造读取错误的操作。

http://scsifaultinjtst.sourceforge.net/


1
注意:这只会删除一次缓存。然后它将立即再次开始缓存。您可能想将其包装成一个循环。
Androbin '18年

@Androbin我喜欢这个主意。您甚至可以在循环中添加一个睡眠间隔。谢谢!
ppetraki

4

有USB 1.1集线器吗?还是慢速的SD卡?他们会让您的带宽降至10Mbps以下。


不错... + 1的技术不够,但是不错
RobotHumans

3

这绝不是一个完整的解决方案,但它可能与其他措施结合使用:有一个I / O调度程序,非常类似于流程调度程序,可以对其进行调整。

最值得注意的是,您实际上可以在不同的调度程序中进行选择:

~# cat /sys/block/sda/queue/scheduler 
noop anticipatory deadline [cfq] 
~# echo "deadline" > /sys/block/sda/queue/scheduler
~# cat /sys/block/sda/queue/scheduler 
noop anticipatory [deadline] cfq 
~# 

deadline 可以帮助您获得更强的可重复性结果。

noop顾名思义,它是愚蠢的,可以让您毫不费力地破坏I / O性能。

anticipatorycfq都试图要聪明一点,但cfq通常是两个聪明。(我记得,anticipatory实际上是内核开始支持多个调度程序之前的传统调度程序。)



2

您可以尝试运行一个大文件的副本,例如Ubuntu install cd的iso,然后运行两次。那会大大降低您的驱动器速度。


正如问题所言,“简单吞噬IO的
短缺

2

除了尝试降低硬盘驱动器本身的速度之外,您还可以尝试使用文件系统基准测试工具,例如bonnie ++,它可能会导致大量的磁盘I / O。

sudo apt-get install bonnie++

1
正如问题所言,“简单吞噬IO的
短缺

0

怎么样make -j64?在描述新的200line性能补丁的文章中,这make -j64是一项占用大量计算机资源的任务


2
您应该解释该命令的实际作用。
papukaija 2011年

正如问题所言,“简单吞噬IO的
短缺

0

为什么不运行iotop,看看您尝试调试的过程是否引起大量磁盘读/写?


3
我认为此答案无济于事,因为仅知道该进程正在执行大量IO的事实,或本身就不是问题。问题在于,处理这些IO的方式中存在某种与时序相关的错误。
poolie

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.