输出速率如何高于硬盘写入速率?
更新1:我更改了以下内容:
关掉杀毒软件.没变.
插入新的物理磁盘并使用第一个分区进行测试.(初始测试的磁盘位于最后一个分区,与系统分区分开,但在同一物理磁盘上.).结果:存在相同的循环模式,但系统在测试期间不再无响应.写入速度稍高(可能是由于使用第一个分区和/或不再干扰系统分区).初步结论:系统分区存在某种干扰.
安装64位Perl.循环消失,一切都在2秒的时间范围内保持稳定:单核上55%的CPU,写入速度约为65 MB/s.
尝试使用64位Perl的原始驱动器.结果:介于两者之间.循环8秒,CPU 20-50%,35-65 MB /秒(而不是0-100%的深循环,0-120 MB /秒).该系统只是略微没有反应.写入速度为50 MB /秒.这支持干涉理论.
刷新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?).
我需要在客户端更快地建立我的网站.我想知道我过多的Javascript cookie操作是否会降低浏览器的速度.它使用硬盘驱动器,它是计算机中最慢的组件.在一个严重分散的硬盘上,cookie操作会冻结浏览器吗?
JS是否对cookie写入/读取(缓存等)进行了任何优化.我可以利用这些优化来改进我的网站吗?
用服务器端数据库替换客户端cookie是不可能的,因为我的服务器已经过载了.
我需要在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
告诉我一些关于磁盘的更多信息.我想知道:
我的问题是:
我正在编写一个诊断程序(比如珠穆朗玛峰,但更简单),我需要知道HardDrive的速度有多快.我想知道的事情如下:
1 - 每秒字节数(读取)
2 - 每秒字节数(写入)
3 - SMART数据
我想我可以使用WMI来查询这样的事情,但我不知道如何.如果我需要购买组件或获得开源组件并不重要.我也知道Windows Perfmoon能够做到这一点,但我无法使用它.
我已经开发了一个基于FUSE的文件系统作为研究项目的一部分,现在必须研究硬盘驱动器接收的实际读/写请求.为了做到这一点,我正在寻找在linux中创建虚拟硬盘的选项,它将拦截文件系统生成的请求并记录它们.
互联网上是否有任何资源可以帮助我编写模拟器和/或开发编写模拟器所需的技能?我目前正在阅读Linux设备驱动程序3一书,以了解Linux如何管理块设备.
任何帮助表示赞赏.
谢谢
我的程序在硬盘可用空间上执行任务.任务很长,需要1-2个小时.
问题是,在笔记本电脑上,当用户处于非活动状态时,硬盘可能会在几分钟后关闭.
如何以编程方式防止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) 这已经得到了回答,但它是一个C#解决方案.如何在C或C++中执行此操作?
我们有一个Adobe Air应用程序,可将大量图像下载到应用程序存储中.我已经扫描了文档但没有发现任何迹象,但我想我会仔细检查:有人知道是否有可能看到用户有多少可用的存储空间,因此我们可以警告他们他们没有足够的空间?
我在Stack Overflow上发现了很多关于此问题的好主题,但我的问题更具体一些.很多公司正在使用这个软件来托管我们所做的相同服务......
http://memory.dataram.com/products-and-services/software/ramdisk
显然,虚拟磁盘的读/写速度非常快,而且当我们运行非常密集的I/O软件时,我想写一些东西来做同样的事情.我唯一需要的是它在虚拟驱动器上运行应用程序(用于增加的I/O速度)并每隔X分钟将数据复制到硬盘驱动器上的物理位置.
这很容易实现吗?我应该用什么来实现这一目标?
编辑
看起来我可以使用下面的Dokan Library,但Windows中的"subst"命令会产生任何I/O性能提升,或者这个库是最好的选择吗?