利用posix fadvise清理系統中的檔案快取

2021-06-20 03:46:30 字數 1411 閱讀 9012

利用posix_fadvise清理系統中的檔案快取

leoncom

c/c++,unix

2011-08-03

當我們需要對某段讀寫檔案並進行處理的程式進行效能測試時,檔案會被系統cache住從而影響i/o的效率,必須清理cache中的對應檔案的才能正確的進行效能測試。通常清理記憶體可以採用下面的這條命令,但這條命令只有root才能使用,另外一方面這個會清理所有的cache,也許會影響其他程式的效能。

echo 3>/proc/sys/vm/drop_caches

linux下有乙個posix_fadvise函式可以用來對cache中的檔案進行清理,有關posix_fadvise的詳細說明檢視man手冊。

view plain

copy to clipboard

print?

intposix_fadvise(

intfd, off_t offset, off_t len, 

intadvice);  

fd是檔案的描述符,用於清理對應檔案cache的advice值選取posix_fadv_dontneed,利用此函式編寫下面程式進行檔案的清理。

view plain

copy to clipboard

print?

intclear_file_cache(

const

char

*filename)   

intfd = open(filename, o_rdonly);   

if( fd 

//clear cache by posix_fadvise

if( posix_fadvise(fd,0,st.st_size,posix_fadv_dontneed) != 0)    

else

return

0;   

}  

此外,linux-ftools這個工具也可以幫助清理並檢視檔案的記憶體狀態,主頁上也有詳細的使用說明。編譯後我們利用fincore這個工具來檢視檔案在記憶體中的狀態,有關fincore的實現可以在linux下man mincore,mincore是根據快取buffer指標來其指向的緩衝區判斷在cache中的狀態,fincore就是在mincore的基礎上直接操作檔案,就是通過對檔案mmap獲得指標,再呼叫mincore來判斷。

首先我們通過cp命令拷貝了乙個相對有點容量的檔案,然後利用fincore檢視檔案在記憶體中的cache情況,可以看到大概cache了99.55%。

接著執行上面那段**的執行程式,之後再執行命令檢視該檔案的快取狀態

可以看到,該檔案在記憶體中已經沒有被cache了。實際的清理效果也可以通過一些占用i/o的讀檔案程式來測試,一般程式第二遍執行時候由於檔案已經被cache,實際程式執行的速度會比較快,通過上面的posix_fadivse清理之後,又會恢復和第一遍差不多的時間。

清浮動方法

1.加高 問題 擴充套件性不好 2.父級浮動 問題 頁面中所有元素都加浮動,margin左右自動失效 floats bad 3.inline block 清浮動方法 問題 margin左右自動失效 4.空標籤清浮動 問題 ie6 最小高度 19px 解決後ie6下還有2px偏差 5.br清浮動 問題...

如何區別聚合支付「一清二清」?

商家該如何區別聚合支付 一清二清 行為?方法十分簡單 只要資金是銀行或者第三方打給您的,就安全,就是一清 資金是某個公司或者個人打給您的,就是二清。在行業內,一些聚合支付機構,由於擴充套件業務需要,就招許多 商。而一些不太規範的聚合支付機構在給商家進行資金清算時,是先把某地區的資金結算給 商,再由該...

高畫質標清區別

1 從技術上來說。按技術劃分,電視可分為模擬電視和數碼電視。數碼電視又可分為高畫質電視 hdtv 和標清電視 sdtv 等。傳統 模擬 電視有三大電視制式 ntsc制 pal制和secam制。高畫質電視也有很多種格式,逐行掃瞄的有1080 24p 25p 30p,隔行掃瞄的1080 50i 60i等...