标签: hard-drive

Perl:写速度之谜?

输出速率如何高于硬盘写入速率?

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

  1. 关掉杀毒软件.没变.

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

  3. 安装64位Perl.循环消失,一切都在2秒的时间范围内保持稳定:单核上55%的CPU,写入速度约为65 MB/s.

  4. 尝试使用64位Perl的原始驱动器.结果:介于两者之间.循环8秒,CPU 20-50%,35-65 MB /秒(而不是0-100%的深循环,0-120 MB /秒).该系统只是略微没有反应.写入速度为50 MB /秒.这支持干涉理论.

  5. 刷新Perl脚本.尚未尝试过.


好的,我已经超越了第一道障碍.我编写了一个Perl脚本,可以生成一个非常大的文本文件(例如20 GB),基本上只是一些:

print NUMBERS_OUTFILE $line;
Run Code Online (Sandbox Code Playgroud)

其中$ line是一个长字符串,末尾带有"\n".

当Perl脚本启动时,写入速率大约为120 MB/s(在脚本,Process Explorer和"性能监视器"中的进程Perl的"IO写入字节数/秒" 之间保持一致 .)和单核上的100%CPU它正在运行.我认为,这个速率高于硬盘的写入速度.

然后经过一段时间(例如20秒和2.7 GB写入),整个系统变得非常无响应,CPU降至0%.这最后持续例如30秒.这两个阶段的平均写入速度与硬盘的写入速度一致.本段中提到的时间和大小因运行而异.到目前为止,已观察到第一阶段的1 GB至4.3 GB范围.这是4.3 GB的运行记录.

对于测试中生成的9.2 GB文本文件,有几个周期:

在此输入图像描述

到底是怎么回事?


完整的Perl脚本BAT驱动程序脚本(使用pre标签格式化的HTML).如果设置了两个环境变量MBSIZE和OUTFILE,则Perl脚本应该能够在除Windows之外的其他平台上保持不变.

平台:ActiveState的Perl 5.10.0; (最初是32位,后来是64位); 构建1004.Windows XP x64 SP2,没有页面文件,8 GB RAM,AMD四核CPU,500 GB绿色鱼子酱硬盘(写入速度85 MB/s?).

perl performance hard-drive

9
推荐指数
2
解决办法
2075
查看次数

在JS写一个非常慢的cookie?

我需要在客户端更快地建立我的网站.我想知道我过多的Javascript cookie操作是否会降低浏览器的速度.它使用硬盘驱动器,它是计算机中最慢的组件.在一个严重分散的硬盘上,cookie操作会冻结浏览器吗?

JS是否对cookie写入/读取(缓存等)进行了任何优化.我可以利用这些优化来改进我的网站吗?

用服务器端数据库替换客户端cookie是不可能的,因为我的服务器已经过载了.

javascript cookies hard-drive

9
推荐指数
2
解决办法
2848
查看次数

如何使用C++在Linux中获取硬件信息

我需要在Win和*nix机器上获得硬盘规格.我<hdreg.h>在Linux上使用过这样的:

   static struct hd_driveid hd;
   int device;
   if ((device = open("/dev/sda", O_RDONLY | O_NONBLOCK)) < 0)
   {
      cerr << "ERROR: Cannot open device /dev/sda \n";
      exit(1);
   }

   if (!ioctl(device, HDIO_GET_IDENTITY, &hd))
   {
      cout << hd.model << endl;
      cout << hd.serial_no << endl;
      cout << hd.heads << endl;
   }
Run Code Online (Sandbox Code Playgroud)

我需要hd_driveid告诉我一些关于磁盘的更多信息.我想知道:

  • 分区数量
  • 每个分区的规格(格式,标签,标志,大小,起点,轨道数等)
  • 每个气缸的磁道数量
  • 总曲目数
  • 最大块大小
  • 最小块大小
  • 默认块大小
  • 设备总大小

我的问题是:

  1. 是否有一种通用(独立于平台)的方式来连接硬件?我想为win和*nix使用相同的代码.(即使除了将汇编代码嵌入到cpp之外没有别的办法)
  2. 如果没有,我如何获得*nix中的上述信息?

c++ linux hardware hard-drive

9
推荐指数
2
解决办法
1万
查看次数

知道硬盘驱动器在Delphi中的速度有多快

我正在编写一个诊断程序(比如珠穆朗玛峰,但更简单),我需要知道HardDrive的速度有多快.我想知道的事情如下:

1 - 每秒字节数(读取)
2 - 每秒字节数(写入)
3 - SMART数据

我想我可以使用WMI来查询这样的事情,但我不知道如何.如果我需要购买组件或获得开源组件并不重要.我也知道Windows Perfmoon能够做到这一点,但我无法使用它.

hardware delphi wmi winapi hard-drive

9
推荐指数
1
解决办法
1575
查看次数

在Linux中模拟硬盘驱动器

我已经开发了一个基于FUSE的文件系统作为研究项目的一部分,现在必须研究硬盘驱动器接收的实际读/写请求.为了做到这一点,我正在寻找在linux中创建虚拟硬盘的选项,它将拦截文件系统生成的请求并记录它们.

互联网上是否有任何资源可以帮助我编写模拟器和/或开发编写模拟器所需的技能?我目前正在阅读Linux设备驱动程序3一书,以了解Linux如何管理块设备.

任何帮助表示赞赏.

谢谢

linux linux-device-driver hard-drive virtual-drive

9
推荐指数
1
解决办法
3185
查看次数

如何以编程方式防止Windows硬盘驱动器停止运转?

我的程序在硬盘可用空间上执行任务.任务很长,需要1-2个小时.

问题是,在笔记本电脑上,当用户处于非活动状态时,硬盘可能会在几分钟后关闭.

如何以编程方式防止Windows硬盘关闭(关闭电源)?

windows delphi winapi hard-drive

9
推荐指数
2
解决办法
2693
查看次数

如何检测硬盘驱动器是否正在旋转(在Windows下)?

如何以编程方式确定硬盘驱动器当前是否正在旋转(Windows 7或更高版本)?

我试过GetDevicePowerState()但它总是返回TRUE(总是1,而不是另一个非零值)我知道当前没有旋转的驱动器(内部和USB驱动器).GetDevicePowerState()返回后TRUE,如果我dir d:在控制台中发出,我会听到驱动器旋转,并且在生成目录列表之前有几秒钟的延迟.

我的代码需要检查驱动器上的目录是否存在.如果驱动器当前停止运转,则可以延迟或跳过检查.我想避免在旋转驱动器上进行检查有两个原因:1)检查当前是同步完成的,我不希望用户必须等待驱动器旋转2)我不想导致驱动器旋转只是为了进行检查(希望很明显为什么不这样做).

有没有办法做到这一点?

根据评论更新:

有人建议GetDevicePowerState使用物理设备名称但我不能让它返回除1以外的任何东西(同样,对于我已经验证的驱动器不旋转).以下是我正在使用的代码.如果GetDevicePowerState确实知道使用USB驱动器,我的论据可能有问题CreateFile吗?

for (int DriveNumber = 0; DriveNumber < 128; ++DriveNumber) {
   TCHAR Drive[128];
   _stprintf (Drive, _T("\\\\.\\PHYSICALDRIVE%d"), DriveNumber);
   HANDLE hDevice = CreateFile(Drive, 0, FILE_SHARE_READ|FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0);
   if (hDevice != INVALID_HANDLE_VALUE) {
      BOOL DeviceIsOn = FALSE;
      if (GetDevicePowerState(hDevice, &DeviceIsOn) != 0) {
         _tprintf(_T("Physical Drive %d is Powered %s (DeviceIsOn=%d)\n"), DriveNumber, DeviceIsOn?_T("On"):_T("Off"), (int)DeviceIsOn);
      }
      CloseHandle(hDevice);
   }
}
Run Code Online (Sandbox Code Playgroud)

windows winapi hard-drive

9
推荐指数
1
解决办法
2296
查看次数

如何在C/C++中获取磁盘驱动器序列号

这已经得到了回答,但它是一个C#解决方案.如何在C或C++中执行此操作?

c c++ windows serial-number hard-drive

9
推荐指数
2
解决办法
3万
查看次数

你能用Adobe Air检查可用的硬盘空间吗?

我们有一个Adobe Air应用程序,可将大量图像下载到应用程序存储中.我已经扫描了文档但没有发现任何迹象,但我想我会仔细检查:有人知道是否有可能看到用户有多少可用的存储空间,因此我们可以警告他们他们没有足够的空间?

air hard-drive

8
推荐指数
1
解决办法
1490
查看次数

用.NET创建虚拟磁盘?

我在Stack Overflow上发现了很多关于此问题的好主题,但我的问题更具体一些.很多公司正在使用这个软件来托管我们所做的相同服务......

http://memory.dataram.com/products-and-services/software/ramdisk

显然,虚拟磁盘的读/写速度非常快,而且当我们运行非常密集的I/O软件时,我想写一些东西来做同样的事情.我唯一需要的是它在虚拟驱动器上运行应用程序(用于增加的I/O速度)并每隔X分钟将数据复制到硬盘驱动器上的物理位置.

这很容易实现吗?我应该用什么来实现这一目标?

编辑

看起来我可以使用下面的Dokan Library,但Windows中的"subst"命令会产生任何I/O性能提升,或者这个库是最好的选择吗?

http://dokan-dev.net/en/about/

.net c# virtualization hard-drive

8
推荐指数
1
解决办法
2534
查看次数