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:写入速度之谜? 的相关文章

  • 与更具可读性的方法相比,C++ 中按位异或的效率

    我最近正在为我正在进行的一个研究项目编写一些代码 其中效率非常重要 我一直在考虑放弃一些常用的方法并使用按位异或来代替 我想知道这是否会产生差异 如果我执行此操作说数百万次 或者在我在 g 中使用 03 后是否相同 我想到的两个例子 我有一
  • 如何使用 python 子进程杀死性能记录?

    我正在尝试使用性能实用程序 https www brendangregg com perf html监视我的系统 它将在 python 脚本中启动和终止 我创建了一个沙箱 如下所示 extra params F 99 g a record
  • 合并 Perl Hashref 和 unique

    我有两个 Perl 哈希值 内容如下 First VAR1 name1 gt adam bob name2 gt Miller Schumacher Second VAR1 name1 gt tina jason jeff
  • 加快 pandas groupby 中的滚动总和计算

    我想按组计算大量组的滚动总和 但我很难快速地完成它 Pandas 内置了滚动和展开计算器的方法 这是一个例子 import pandas as pd import numpy as np obs per g 20 g 10000 obs g
  • SQL Server 2005存储过程性能问题

    我遇到以下问题 当从我的应用程序调用存储过程时 时不时地 例如 1000 次调用中的 1 次 需要 10 30 秒才能完成 通常 存储过程的运行时间不到一秒 这是一个相当简单的过程 只需一个选择即可将几个表连接在一起 所有表名都设置有 NO
  • 如何从 Hudson CI API 获得更好的性能?

    我正在尝试为自己编写一个与 Hudson 构建服务器集成的小工具 我目前遇到的障碍是性能 我想做一件简单的事情 比如列出所有作业和上次成功构建的时间 hudson API 提供了此信息 但我要么必须查询所有内容depth 2或者单独查询每个
  • Perl 中的布尔函数应该返回什么值?

    简短的问题 在 Perl 代码库中一致表示真假的最佳方法是什么 1 0 1 Perl 原生布尔运算符的特殊空字符串 return undef 即空列表 问题背景 我们都知道 Perl 在布尔值方面非常灵活 就像大多数事情一样 例如 Perl
  • 如何加快编辑距离计算速度

    我正在尝试运行模拟来测试平均值编辑距离 http en wikipedia org wiki Levenshtein distance之间随机 二进制字符串 我的程序是用 python 编写的 但我正在使用这个C扩展 https githu
  • 如何防止Googlebot淹没网站?

    我正在中间的专用服务器上运行一个内容很多但流量很少的网站 有时 Googlebot 会踩踏我们 导致 Apache 耗尽内存 导致服务器崩溃 我怎样才能避免这种情况 在谷歌网站管理员工具上注册 验证您的网站并限制谷歌机器人 提交站点地图 阅
  • 为什么在我的例子中 For 循环比 Map、Reduce 和 List 理解更快

    我编写了一个简单的脚本来测试速度 这就是我发现的结果 实际上 for 循环在我的例子中是最快的 这真的让我感到惊讶 请查看下面 正在计算平方和 这是因为它在内存中保存列表还是有意为之 谁能解释一下这一点 from functools imp
  • 样式组件如何影响性能?

    使用样式组件是否比样式表更会降低 Web 应用程序的速度 如果我关心性能并且没有任何依赖于 props 的样式 我是否应该放弃样式组件并使用样式表 当您有很多小组件时 同时使用样式化组件渲染 性能开销可能会很有意义 绝对值得测试以删除小元素
  • 使用perl,在每行都有相同单词的情况下如何选择最后两行?

    Bini 21 89753 20 47853 20 27835 18 34952 16 23454 Bini 16 89753 14 47853 13 27835 12 34952 11 23454 Bini 10 09014 我的文件有一
  • 慢 Eclipse Spring STS 插件

    我是 Spring 新手 安装了 Eclipse STS 插件 使用服务似乎非常慢 CPU 使用率激增 笔记本电脑只会变热 实际上风扇就像喷气发动机一样运行 直接响应服务的启动 停止 虽然下面的内容确实为我解决了 Spring STS 的所
  • 如何使用 Net::SSH::Perl 和公钥?

    我正在尝试使用Net SSH Perl使用公钥与此代码进行连接 my ssh Net SSH Perl gt new host debug gt 1 die 我将密钥放在 root ssh id rsa 和 root ssh identit
  • isinstance(foo,types.GeneratorType)还是inspect.isgenerator(foo)?

    Python中似乎有两种方法来测试一个对象是否是生成器 import types isinstance foo types GeneratorType or import inspect inspect isgenerator foo 本着
  • MySQL InnoDB 查询性能

    我正在尝试优化一个简单的 sql 查询 该查询将多次运行大量数据 这是场景 MySQL 与 InnoDB 表 where 和 join 中使用的所有字段都已索引 表有 FK 我不需要查询的整个缓存 但每个表的缓存是可能的 表有更多的更新 插
  • 如何比较两个文件中的多列并在找​​到匹配时从另一列检索相应的值

    我有两个文件 File1 txt 和 File2 txt 我需要将 File1 中的三列 1 2 和 3 分别与 File2 的 4 5 和 6 进行比较 如果找到匹配项 我想从 File2 的第 2 列中检索相应的值并将其粘贴到输出中 T
  • IEnumerable 作为 DataTable 性能问题

    我有以下扩展 它生成一个DataTable从一个IEnumerable public static DataTable AsDataTable
  • 对于双核手机,availableProcessors() 返回 1

    我最近购买了一部 Moto Atrix 2 手机 当我尝试查看手机中的处理器规格时 Runtime getRuntime availableProcessors 返回 1 proc cpuinfo 也仅包含有关处理器 0 的信息 出于好奇
  • unix df 上的正则表达式帮助

    我需要一些帮助来调整我的代码以查找此 UNIX 中的另一个属性df output Ex Filesystem Size Used Avail Capacity Mounted on dev ad4s1e 61G 46G 9 7G 83 ho

随机推荐

  • 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 我更改了以下内容 关闭了防病毒软件 不用找了 插入新的物理磁盘并使用第一个分区 为了测试 初始测试的磁盘位于 最后一个分区 与系统分区分开 但是 在同一物理磁盘上 结果 有相同的 循环模