输出速率怎么可能高于硬盘写入速率呢?
Update 1: 我更改了以下内容:
关闭了防病毒软件。不用找了。
插入新的物理磁盘并使用第一个分区
为了测试。 (初始测试的磁盘位于
最后一个分区,与系统分区分开,但是
在同一物理磁盘上。)。结果:有相同的
循环模式,但系统是不再
反应迟钝测试期间。写入速度为
稍高一些(可能是由于使用第一个
分区和/或不再干扰系统
分割)。初步结论:存在某种
来自系统分区的干扰。
安装了 64 位 Perl。循环消失了
一切在 2 秒时间范围内都很稳定:CPU 利用率为 55%
单核,写入速度约65MB/s。
尝试在原始驱动器上使用 64 位 Perl。结果:
中间某个地方。 8 秒周期,CPU 20-50%,
35 - 65 MB/秒(而不是 0-100% 的深度循环,0 -
120 MB/秒)。系统只是轻微无响应。
写入速度为 50 MB/秒。这支持了干扰理论。
在 Perl 脚本中刷新。还没试过。
好吧,我已经过去了第一关 https://stackoverflow.com/questions/1373372。我写了一个Perl
可以生成非常大的文本文件(例如 20 GB)的脚本
本质上只是一些:
print NUMBERS_OUTFILE $line;
其中 $line 是一个长字符串,末尾带有“\n”。
Perl 脚本启动时写入速率约为 120 MB/s
(与脚本计算的内容一致,流程浏览器 http://en.wikipedia.org/wiki/Process_Explorer和进程 Perl 的“IO 写入字节/秒”
在性能监视器中。)并且单核上的 CPU 为 100%
正在运行。我相信这个速度比 write 还要高
硬盘的速度。
然后一段时间后(例如 20 秒,写入 2.7 GB)
整个系统变得非常无响应,CPU 下降到
0%。这最后例如30秒。平均写入速度
这两个阶段的写入速度是一致的
硬盘。本文提到的时间和尺寸
每次运行的段落差异很大。范围 1 GB
到目前为止,第一阶段已观测到 4.3 GB。
这里有一个4.3 GB 运行记录 http://www.pil.sdu.dk/1/until2039-12-31/PerlPerfTranscript_2009-09-07b.txt.
对于 9.2 GB 的文本文件,有几个这样的周期
测试中生成:
到底是怎么回事?
Full Perl脚本 http://pmortensen.eu/1/until2039-12-31/generate_2009-09-07.pl.html and BAT驱动脚本 http://pmortensen.eu/1/until2039-12-31/generate_2009-09-07.bat.html(HTML 格式为
预标记)。如果两个环境变量 MBSIZE 和
OUTFILE 已设置,然后 Perl 脚本应该能够运行
在 Windows 以外的其他平台上保持不变。
平台:ActiveState 的 Perl 5.10.0;
(最初是32位,后来是64位);建造1004。
Windows XP x64 SP2,无页面文件,8 GB RAM,AMD 四核 CPU,
500 GB Green Caviar 硬盘(写入速度 85
MB/秒?)。
我和其他人一样认为问题是缓冲区填充然后清空。尝试打开自动冲洗 http://perldoc.perl.org/IO/Handle.html避免有缓冲区(在 Perl 中):
#!/usr/bin/perl
use strict;
use warnings;
use IO::Handle;
my $filename = "output.txt";
open my $numbers_outfile, ">", $filename
or die "could not open $filename: $!";
$numbers_outfile->autoflush(1);
#each time through the loop should be 1 gig
for (1 .. 20) {
#each time though the loop should be 1 meg
for (1 .. 1024) {
#print 1 meg of Zs
print {$numbers_outfile} "Z" x (1024*1024)
}
}
如果您要打印一点、做一些工作等,缓冲区可能会很好。但是如果您只是要将数据写入磁盘,它们可能会导致奇怪的行为。您可能还需要禁用文件系统正在执行的任何写入缓存。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)