問題:寫入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...