天天看點

測試技術教育訓練:如何測試磁盤寫的速度 1

測試技術教育訓練:如何測試磁盤寫的速度

  經常會有一些測試任務需要我們用自動化的手段完成,這樣就要求開發一些程式出來完成測試,這樣的工作内容是測試開發工程師的典型工作,下面在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;

繼續閱讀