gpt4 book ai didi

performance - Perl:写入速度之谜?

转载 作者:行者123 更新时间:2023-12-03 07:37:57 27 4
gpt4 key购买 nike

输出速率怎么可能高于硬盘写入速率?

更新 1:我更改了以下内容:

  1. 关闭防病毒软件。没有变化。

  2. 插入新的物理磁盘并使用第一个分区为了测试。 (初始测试的磁盘位于最后一个分区,与系统分区分开,但是在同一物理磁盘上。)。结果:有相同的循环模式,但系统不再测试期间无响应。写入速度为稍高一些(可能是由于使用第一个分区和/或不再干扰系统分割)。初步结论:存在某种系统分区的干扰。

  3. 已安装 64 位 Perl。循环消失了一切在 2 秒时间范围内都很稳定:CPU 利用率为 55%单核,写入速度约65MB/s。

  4. 在原始驱动器上尝试过 64 位 Perl。结果:中间某个地方。 8 秒周期,CPU 20-50%,35 - 65 MB/秒(而不是 0-100% 的深度循环,0 -120 MB/秒)。系统只是轻微无响应。写入速度为 50 MB/秒。这支持了干扰理论。

  5. 在 Perl 脚本中刷新。还没试过。

<小时/>

好的,我已经通过了 first hurdle 。我写了一个Perl可以生成非常大的文本文件(例如 20 GB)的脚本本质上只是一些:

print NUMBERS_OUTFILE $line;

其中 $line 是一个长字符串,末尾带有“\n”。

当 Perl 脚本启动时,写入速率约为 120 MB/s(与脚本计算的内容一致, Process Explorer和进程 Perl 的“IO 写入字节/秒”在性能监视器中。)并且单核上的 CPU 为 100%正在运行。我相信这个速度比 write 还要高硬盘速度。

一段时间后(例如 20 秒,写入 2.7 GB)整个系统变得非常无响应,CPU 下降到0%。这最后例如30秒。平均写入速度这两个阶段的写入速度是一致的硬盘。本文提到的时间和尺寸每次运行的段落差异很大。范围 1 GB到目前为止,第一阶段已观测到 4.3 GB。这是transcript for the run with 4.3 GB .

9.2 GB 文本文件有多个这样的循环测试中生成:

Enter image description here

这是怎么回事?

<小时/>

完整Perl scriptBAT driver script (HTML 格式为预标记)。如果两个环境变量 MBSIZE 和OUTFILE 已设置,然后 Perl 脚本应该能够运行在 Windows 以外的其他平台上保持不变。

平台:ActiveState 的 Perl 5.10.0; (最初是32位,后来是64位); build 1004。 Windows XP x64 SP2,无页面文件,8 GB RAM,AMD 四核 CPU, 500 GB Green Caviar 硬盘(写入速度 85 MB/秒?)。

最佳答案

我和其他人一样认为问题是缓冲区填充然后清空。尝试打开autoflush避免有缓冲区(在 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)
}
}

如果您要打印一点、做一些工作等,缓冲区可能会很好。但如果您只是要将数据写入磁盘,它们可能会导致奇怪的行为。您可能还需要禁用文件系统正在执行的任何写入缓存。

关于performance - Perl:写入速度之谜?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1391015/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com