Linux下讀寫速度測試

2021-06-06 04:43:01 字數 1845 閱讀 5521

tag:

clinux

一. 檔案一次讀入速度

linux下讀檔案這東西最後都是要通過系統呼叫sys_read(fd,buf,count)來實現的,所以如果要提高速度,就是最簡單地呼叫sys_read的封裝,比如直接用read()或fread()。下面是我在linux下的幾個測試。

首先建立乙個130m資料檔案 dd if=/dev/zero of=data bs=1024k count=130

分別用fread,read和fgets一次讀入全部大小檔案所消耗時間對比,其中

size=130*1024*1024

char *buf=new char[size];

下面是測試結果(機器intel(r) pentium(r) 4 cpu 3.20ghz, mem 1g):

1.fread(buf,size,1,fp)一次讀入

real    0m0.187s

user    0m0.000s

sys     0m0.180s

2.read(fdin,(void *)buf,size)一次讀入

real    0m0.187s

user    0m0.000s

sys     0m0.184s

3.多次fgets(buf,size,fp),每次1k

real    0m0.356s

user    0m0.136s

sys     0m0.220s

4.fgets(buf,size,fp)一次讀入

real    0m0.305s

user    0m0.072s

sys     0m0.232s

上面看到越簡單的函式(read()和fread()),速度越快,其他的輸入封裝函式只不過是為了方便滿足特殊需要,並不見得讀的速度會很快。對於3和4,因為在sys_read()內部有對讀入大小的判斷和while迴圈,所以大檔案讀取也沒必要像3那樣分多次呼叫fgets()來讀檔案.

另外用mmap()記憶體對映來讀入檔案的時間如下:

real    0m0.231s

user    0m0.068s

sys     0m0.164s

也並沒有比直接read()快,網上找到一種解釋是對於需要頻繁讀寫操作的,mmap效率才會顯著提高。下面來模擬頻繁讀寫操作。

二. 檔案頻繁讀寫速度測試

1. 這乙個測試模擬頻繁檔案讀寫操作,500m大小的資料檔案data.in,每次從中讀入1k個位元組對每個位元組做加1簡單計算,再寫到另乙個檔案data.out中。

#define size 1024*1024*500

#define len 1024

#include

int main()

lseek(fdout,size-1,seek_set); 

write(fdout,"\0",1);

//因為data.out是空檔案,必須建立乙個空洞讓其大小成為size來進行下面的mmap

if((dst=mmap(0,size,prot_read|prot_write,map_shared,fdout,0))==map_failed)

memcpy(dst,src,size);

p=(char*)dst;

for(i=0;i

#include

#include

#include

#include

#define size 1024*1024*500

#define len 1024

int main()

p=(char*)src;

for(i=0;i對於頻繁地隨機改寫某個檔案內的某些部分位元組內容的情況來說,這是乙個有效的選擇。 

Linux下讀寫速度測試

一.檔案一次讀入速度 linux下讀檔案這東西最後都是要通過系統呼叫sys read fd,buf,count 來實現的,所以如果要提高速度,就是最簡單地呼叫sys read的封裝,比如直接用read 或fread 下面是我在linux下的幾個測試。首先建立乙個130m資料檔案 dd if dev ...

linux下硬碟讀寫速度測試

haparm tt dev fdisk l disk dev xvdf 365.0 gb,365041287168 bytes 255 heads,63 sectors track,44380 cylinders units cylinders of 16065 512 8225280 bytes ...

linux下測試磁碟的讀寫IO速度

有時候我們在做維護的時候,總會遇到類似於io特別高,但不能判定是io瓶頸還是軟體引數設定不當導致熱盤的問題.這時候通常希望能知道磁碟的讀寫速度,來進行下一步的決策.下面是兩種測試方法 1 使用hdparm命令 這是乙個是用來獲取ata ide硬碟的引數的命令,是由早期linux ide驅動的開發和維...