Perl:写入速度之谜?

2024-03-16

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

Update 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 脚本中刷新。还没试过。


好吧,我已经过去了第一关 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(使用前将#替换为@)

Perl:写入速度之谜? 的相关文章

  • 如何使用 Perl 分割文本文件并将其存储到二维数组中?

    230215 01 16 2000 57533 0 1045403 0 0 217623 230215 01 18 2000 77659 0 1045403 0 0 217624 230215 01 25 2000 76583 0 1045
  • JavaFX 中 WebView 的性能

    我有一个 HTML5 UI 和一个 Java 后端 并且希望避免在纯 java 中重建 HTML ui 所以我的想法是运行本地 Web 服务器并使用 WebView 在 本机 窗口中呈现它 解决方案似乎是使用可以嵌入到 swing 中的 J
  • Android 性能:SharedPreferences 的成本

    当我的应用程序启动时 我使用分片首选项中的值填充容器类 这个想法是处理 SharedPreferences 和 PreferenceManager 一次 因为我猜它们很重 这是一个示例 SharedPreferences prefs Pre
  • .pdbs 会减慢发布应用程序的速度吗?

    如果 dll 中包含 pdb 程序调试 文件 则行号将出现在引发的任何异常的堆栈跟踪中 这会影响应用程序的性能吗 这个问题与发布与调试 即优化 无关 这是关于拥有 pdb 文件的性能影响 每次抛出异常时都会读取 pdb 文件吗 加载程序集时
  • 如何将会话管理添加到简单的 Perl CGI 网页?

    我有一个简单的网页 到目前为止不需要任何登录 它是用 Perl CGI 编程的 我想知道添加会话支持以便获得登录信息的步骤 我不需要非常复杂的方法 因为网页非常简单 另外 我想要一些关于支持 Perl 会话所需的技术 库的建议 我在很多很多
  • Pandas dataframe:每批行的操作

    我有一个熊猫数据框df我想计算每批行的一些统计信息 例如 假设我有一个batch size 200000 对于每批batch sizerows 我想要一列的唯一值的数量ID我的数据框 我怎样才能做这样的事情呢 这是我想要的一个例子 prin
  • Rails Windows Vagrant 响应时间非常慢

    我在跑 Vagrant 1 7 1 Rails 4 1 4 Thin 1 6 1 Windows 7 每个静态文件的发送时间都超过一秒 在我的 PC 上加载一个页面可能需要大约 20 秒 而在同事的 Linux 机器上则只需瞬间 有一些帖子
  • 文件修改时间检查的成本

    对于Linux下包含少量字节的文件 我只需要处理自上次处理以来发生更改的时间 我通过调用 PHP 检查文件是否被更改clearstatcache filemtime 定期 由于整个文件总是很小 因此删除对 filemtime 的调用并通过将
  • 添加冗余赋值可以在未经优化的情况下编译时加快代码速度

    我发现一个有趣的现象 include
  • 检查两个数是否是彼此的排列?

    给定两个数字 a b 使得 1 例如 123 是 312 的有效排列 我也不想对数字中的数字进行排序 如果您指的是数字的字符 例如 1927 和 9721 则 至少 有几种方法 如果允许排序 一种方法是简单地sprintf将它们放入两个缓冲
  • linux perf:如何解释和查找热点

    我尝试了linux perf https perf wiki kernel org index php Main Page今天很实用 但在解释其结果时遇到了困难 我习惯了 valgrind 的 callgrind 这当然是与基于采样的 pe
  • 使用 Cygwin 安装 CPAN GD 模块失败

    我已经尝试解决为什么 CPAN GD 模块无法使用 Cygwin 安装 2 天了 任何帮助深表感谢 谢谢 cpan install GD Going to read home xxxxxxxxxx cpan Metadata Databas
  • Javascript 定时通知 - setTimeout、setInterval

    我正在创建一个网络应用程序 允许用户管理日历 CRUD 事件 任务 提醒等 我正在尝试实现一个功能 他们将在事件 任务前 x 分钟收到弹出提醒 根据我的理解 使用 javascript 确实只有一种方法可以做到这一点 登录时 检查数据库中是
  • getItem 与 getItemAtPosition

    有两种方法可以获取列表视图中的选定项目 list getAdapter getItem position list getItemAtPosition position 我的问题是 哪一种是首选的做法 我见过人们同时使用这两种方法 您可以使
  • PHP 脚本不断执行 mmap/munmap

    我的 PHP 脚本包含一个循环 它只不过是回显和取消引用指针 如 tab othertab i gt 中的内容 直到昨天 这个脚本开始变得非常慢 比以前慢了 50 倍 之前 它一直运行良好 使用 strace 后 我发现 90 的情况下 脚
  • Swift 使用哪种通用排序算法?它在排序数据上表现不佳

    我一直在挑选和探索 Swift 标准库sort 其函数为Array类型 令我惊讶的是 我注意到它在已经排序的数据上表现不佳 对数组进行排序Int打乱顺序似乎比对已经排序的同一个数组进行排序快 5 倍 对已打乱顺序的对象数组进行排序比对已按排
  • 为什么改变对象的 [[prototype]] 会降低性能?

    来自 MDN 文档standard setPrototypeOf功能 https developer mozilla org en US docs Web JavaScript Reference Global Objects Object
  • 为什么同样的算法在 Scala 中运行比在 C# 中慢得多?以及如何让它更快?

    该算法根据序列中每个成员的变体创建序列的所有可能变体 C 代码 static void Main string args var arg new List
  • C++ Exp 与 Log:哪个更快?

    我有一个 C 应用程序 需要比较两个值并决定哪个值更大 唯一的复杂之处是一个数字在对数空间中表示 而另一个则不是 例如 double log num 1 log 1 23 double num 2 1 24 如果我想比较num 1 and
  • 在 MySQL 数据库中保持 TEXT 字段唯一的最佳方法

    我想让 TEXT 字段的值在我的 MySQL 表中唯一 经过小型研究 我发现由于性能问题 每个人都不鼓励在 TEXT 字段上使用 UNIQUE INDEX 我现在想用的是 1 创建另一个字段来包含 TEXT 值的哈希值 md5 text v

随机推荐

  • Monotouch 4.0.6:使用 WCF 服务时出现序列化错误

    我正在运行 Mono 2 10 并且刚刚升级到 Monotouch 4 0 我的应用程序发生错误 System NullReferenceException Object reference not set to an instance o
  • SSIS 将百分比转换为小数

    我正在尝试获取在数据库中显示为小数的百分比 我进行了以下设置以将百分比列转换为小数 excel source gt data conversion gt db output 我尝试将输入严格转换为十进制和数字 这些都没有改变我的结果 在数据
  • 添加输入变量以在 Python 中绘制标题/图例

    我想在绘图标题 图例 注释文本中显示用于绘制某个函数的参数的当前值 举个简单的例子 我们拿一条直线 import numpy import matplotlib pyplot as plt def line m c x numpy lins
  • 如何连接 Windows 中的其他程序?

    谁能解释一个程序如何挂钩并修改 Windows 中其他程序的行为 这怎么可能呢 Windows 程序是否不会保护自己免受其他程序进入其内存等的影响 我不知道它的内部结构是如何工作的 所以我只是说 进入他们的记忆 我敢打赌它比这更复杂 另外
  • select2 中的 Angular ng-options - 设置值属性

    我有一系列国家 var countriesList name Israel code IL name India code IN name Andorra code AD 以及一系列选定的国家 地区 selectedCountries co
  • 如何在 Flutter 中创建按钮表并从中随机选择任何按钮?

    我正在尝试在 Flutter 中创建一个自定义的 Housie 游戏门票生成器 其中我必须从 4X3 按钮表中随机选择一个按钮 并显示一个否 在那个按钮上 单击按钮后 它的颜色从绿色变为红色 我通过对所有单元格进行硬编码创建了一个 4X3
  • 如何解决最大数量限制的杆切割问题允许削减多少?

    我知道如何使用动态规划解决杆切割问题 但是 当我们限制允许的最大切割次数时 动态规划无法给出正确的答案 即使我也无法想到该问题的递归解决方案 帮助 问题是这样的 确定通过切割杆并出售碎片可获得的最大收入 给定长度为 N 的杆 以及长度为 i
  • 高性能串联二维数组存储为子数组[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 想象一下 我们有几个由 X Y 坐标标识的 3x3 2D 数组 伪代码 Array 0 0 Array 1 0 1 2 1 1 2 1
  • GUID:varchar(36) 与 uniqueidentifier

    我正在使用一个将 GUID 值存储为 varchar 36 数据类型的旧数据库 CREATE TABLE T Rows RowID VARCHAR 36 NOT NULL PRIMARY KEY RowValue INT NOT NULL
  • 如何在 XSLT 处理器中使用 HTML5 的“about:”协议

    HTML5 草案指定 http dev w3 org html5 spec Overview html about 3alegacy compat 至少目前 URIabout legacy compat可用于依赖于符合 XML 的文档类型
  • 非虚拟和抽象方法的命名约定[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我经常发现自己创建使用这种形式 A 的类 abstract class Animal public void Walk TODO do some
  • FastAPI异步后台任务会阻塞其他请求吗?

    我想在 FastAPI 中运行一个简单的后台任务 其中涉及一些计算 然后将其转储到数据库中 但是 计算会阻止它接收更多请求 from fastapi import BackgroundTasks FastAPI app FastAPI db
  • Swings ImageIcon 构造函数非常慢

    编辑 请参阅对此答案的评论以获取此问题的答案 TLDR 瓶颈是缩放图像 但分析显示这是 ImageIcon 构造函数中的问题 java version Picked up JAVA OPTIONS Dswing aatext true Da
  • 为什么我在安装 gem 时收到“权限被拒绝”错误?

    我正在尝试安装 Jekyll 运行后gem install jekyll我收到此错误 ERROR While executing gem Errno EACCES Permission denied usr local lib ruby g
  • Firebase 实时数据库 API 中的“set”和“update”有什么区别?

    正如标题所说 我无法理解之间的区别update and set 此外 文档也无法帮助我 因为如果我使用 set 代替 更新示例的工作原理完全相同 The update文档中的示例 function writeNewPost uid user
  • Android getsupportedvideosizes 在模拟器上返回 null

    我尝试在模拟器中获取支持的视频大小 如下所示 但它总是返回 null 为什么会这样 我在 4 03 中尝试过 提前致谢 Camera camera Camera open android hardware Camera Parameters
  • 无法从 $injector.get() 获取服务实例

    我定义了一个名为 greeting 的客户服务 但无法从 injector get greeting 获取该实例 它会抛出这样的错误 未知提供者 greetingProvider 那么哪种方式才是正确的获取方式呢 以下是代码 var app
  • 更改 y 对数刻度 imshow()

    我正在尝试根据周期绘制 y 尺度的频谱图 所以我想要一个反转的对数尺度 事情是 我找到了如何使用pcolormesh 不是通过使用imshow imshow 似乎比pcolormesh 这对我来说 是一个非常喜欢它的理由 我错过了什么 我不
  • 如何在 SQL Server 和 C# 中加快读取大量数据的速度

    我的数据库中有一个包含大约 200k 条目的视图 我正在使用以下代码阅读它 using SqlConnection conn new SqlConnection conn Open string query SELECT FROM SP3D
  • Perl:写入速度之谜?

    输出速率怎么可能高于硬盘写入速率呢 Update 1 我更改了以下内容 关闭了防病毒软件 不用找了 插入新的物理磁盘并使用第一个分区 为了测试 初始测试的磁盘位于 最后一个分区 与系统分区分开 但是 在同一物理磁盘上 结果 有相同的 循环模