Linux下磁碟讀寫優化的分析

2021-09-04 10:22:02 字數 1093 閱讀 4007

問題:寫入1mbi大小資料到檔案裡,

1次寫入1k共寫1024次和1次性寫入1m僅寫1次的速率差異是多大?哪個更快?為什麼呢?不妨測試一下:

1mbi檔案,一次性寫入1mbi

#include #include #include #include #include int main(int argc,char *aa)

fd1=open(aa[2],o_creat | o_wronly,s_irusr);

if(fd1!=-1)

ssize_t n;

while(n=read(fd,buffer,1048576))

close(fd);

close(fd1);

}

1mbi檔案,一次寫入1kbi,共寫1024次

#include #include #include #include #include int main(int argc,char *aa)

fd1=open(aa[2],o_creat | o_wronly,s_irusr);

if(fd1!=-1)

ssize_t n;

while(n=read(fd,buffer,1024))

close(fd);

close(fd1);

}

為了測試準確,第一次寫入資料後,需要清除了cache和buffer。sysctl-wvm.drop_caches=3

可以看出來一次

性寫入1m完成寫入時間更快,為什麼會有這樣的結果呢?strace看一下

1次性寫入1mbi

1kbi寫入1024次

結論:user近乎不用時間,sys占用了大部分時間,其餘時間都用在kernel層和user層的切換,sys用的時間為systemcall上,可以簡單了解下linuxkernel的架構,主要分為核心層和使用者層(kernelspace和userspace),使用者層的應用程式會通過呼叫systemcall轉入核心層對資料進行最終的讀寫操作。

總之儘量減少系統呼叫的頻繁使用可以減少程式的執行時間,當然不斷的讀寫也會增加磁碟i/o的負載,所以對系統的優化要從優化程式上做起。

Linux下磁碟讀寫優化的分析

問題 寫入1mbi大小資料到檔案裡,1次寫入1k共寫1024次和1次性寫入1m僅寫1次的速率差異是多大?哪個更快?為什麼呢?不妨測試一下 1mbi檔案,一次性寫入1mbi include include include include include int main int argc,char a...

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

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

mysql 磁碟讀寫的I O優化

在 mysql 5.1.x 版本中曾使用引數innodb file io threads,指負責處理資料頁上讀寫io請求的後台執行緒數量。在 mysql 5.5.x 中拆成2個引數 innodb read io threads,innodb write io threads。該引數值之和 2 cpu...