測試技術教育訓練:如何測試磁盤寫的速度
經常會有一些測試任務需要我們用自動化的手段完成,這樣就要求開發一些程式出來完成測試,這樣的工作内容是測試開發工程師的典型工作,下面在poptest的教育訓練過程中我們提出一個問題如何測試磁盤寫的速度? 下面給大家分享下:
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;