如何测试写磁盘的速度?
来源:互联网 发布:明源软件股份有限公司 编辑:程序博客网 时间:2024/05/22 11:31
如何测试写磁盘的速度?
1、问题来源:出差的项目中遇到紧急对接问题:测试写磁盘的速度?
对接程序中需要定期向磁盘中存放结果数据,但不知道:
1)以多大的Buffer写入磁盘会速度更快?
2)磁盘的写速度是否能达到磁盘阵列厂商标称的最大值?
2、基于以上两个问题,思考如何测试写磁盘速度?
问题近一步细化:
1)速度=写入大小/写入时间间隔,即可以重点内容测试一定时间间隔内写入数据的大小。
2)每次写入的时候设定不同的大小:512k,1M,2M,5M,10M,20M,50M,100M,200M,300M…..
循环写入100-10次,看哪个大小的Buffer写入的最快。
3、遇到的知识点:
1)栈内存最大可开辟空间的大小,Vs2010为1M-2M,实测中大了会有错误提示。
2)堆内存最大可开辟空间的大小,由内存和虚拟内存决定,32位系统最大为2GB,但和当前系统运行
其他程序情况和虚拟内存大小有关。实测发现32位win7系统300M左右堆内存连续写10次磁盘程序就会崩溃。
4、相关知识点教科书上解释:
栈:在Windows下,栈是向低地址扩展数据结构,是一块连续内存区域。这句话意思是栈顶地址和栈最大容量是系统预先规定好,
在WINDOWS下,栈大小是2M(也有说是1M,总之是一个编译时就确定常数),如果申请空间超过栈剩余空间时,将提示overflow。因此,能从栈获得空间较小。
堆:堆是向高地址扩展数据结构,是不连续内存区域。这是由于系统是用链表来存储空闲内存地址,自然是不连续,而链表遍历方向是由低地址向高地址。
堆大小受限于计算机系统中有效虚拟内存。由此可见,堆获得空间比较灵活,也比较大。
5、程序实现如下(非常简单、不再解释):
// writeFileDemo.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>#include <fstream>using namespace std;#include <windows.h>#include <WinBase.h>#include <ctime>//目标写入文件const char* g_psOutFile = "D:\\test_file\\1.txt";//一次写入的Buffer大小const long WRITE_BUFF_SIZE = 10*1024*1024; //300MB字节//写入次数#define MAX_WRITE_CNT 5//buffer每个字节初始化为'a'字符void initBuf(char* pszBuf, int iCnt){ for(int i = 0; i < iCnt; ++i) { pszBuf[i] = 97; }}//循环写入文件void writeFileFun(char* szBuf){ ofstream ofout(g_psOutFile); int i = 0; while(i < MAX_WRITE_CNT) { ofout << szBuf << endl; ++i; }}//测试写磁盘速度 void writeFileTestFun(){ //堆内存申请,显然栈内存不合适 char* szTenMBBuf = (char*)malloc(WRITE_BUFF_SIZE); (void)initBuf(szTenMBBuf, WRITE_BUFF_SIZE); size_t nBeginTicks = GetTickCount(); cout << "BeginTime = " << nBeginTicks << endl; (void)writeFileFun(szTenMBBuf); size_t nEndTicks = GetTickCount(); cout << "EndTime = " << nEndTicks << endl; size_t nSpan = nEndTicks - nBeginTicks; cout << "nSpanTime = " << nSpan << "ms" << endl; //ms float nTotalBytes = WRITE_BUFF_SIZE*MAX_WRITE_CNT; //总写入字节数 float nTotalTimes = (float)(nSpan) / 1000.0f; //总耗费时间,单位s cout << "nTotalWriteBytes = " << nTotalBytes << endl; cout << "nTotalTimes = " << nTotalTimes << endl; float fSpeed = nTotalBytes / nTotalTimes; cout << "Speed = " << fSpeed << "Byte/s" << endl; //写入速度 Byte/s cout << "Speed = " << fSpeed / 1024.0f / 1024.0f << "MB/s" << endl; //写入速度 MByte/s if (NULL != szTenMBBuf) { free(szTenMBBuf); szTenMBBuf = NULL; }}int _tmain(int argc, _TCHAR* argv[]){ (void)writeFileTestFun(); return 0;}
2015-6-2 北京昌平区平西王府附近格林豪泰酒店 凌晨4:13,夜已深未眠。
作者:铭毅天下
转载请标明出处,原文地址:http://blog.csdn.net/laoyang360/article/details/46321891
如果感觉本文对您有帮助,请点击‘顶’支持一下,您的支持是我坚持写作最大的动力,谢谢!
- 如何测试写磁盘的速度?
- 如何测试Linux磁盘的读写速度
- 正确用dd测试磁盘写速度
- 测试linux磁盘的读写速度
- 测试磁盘IO速度
- 测试磁盘速度-linux
- dd测试磁盘速度
- 测试磁盘读写速度
- Linux 如何测试 IO 性能(磁盘读写速度)
- Linux 如何测试 IO 性能(磁盘读写速度)
- Linux 如何测试 IO 性能(磁盘读写速度)
- Linux 如何测试 IO 性能(磁盘读写速度)
- DD测试磁盘读写速度
- dd测试磁盘读写速度
- linux环境下测试磁盘的读写速度
- linux下测试磁盘的读写IO速度
- linux下测试磁盘的读写IO速度
- linux下测试磁盘的读写IO速度
- [1]_技术研发 - 七年之痒
- BUG现象与对应0003 全局数据结构复杂多线程中应该被复制使用
- C++ 常用代码001 IsValidFileName VC/MFC 判断有效文件名
- js中字符串操作函数
- Photoshop 标注图像
- 如何测试写磁盘的速度?
- 的更加廣泛的房貸和規範的方式
- iperf
- 项目小结及难点复盘
- 决策树之 C4.5
- Time to start my blog
- 课堂作业
- JSP内置对象
- 剑指offer--顺时针打印矩阵