用tmpfs平滑磁碟io需求

2021-05-22 01:20:43 字數 800 閱讀 1719

在解決某個服務端程式問題時,有些資料需要做些即時的儲存。當時採取了直接寫檔案的方式。經過大量的實際使用後發現,直接在磁碟寫檔案在使用者量大的時候,很容易碰到磁碟io繁忙的問題。考慮通過在記憶體中建立乙個tmpfs的方式來平滑磁碟io需求。

流程簡述:

memory -> tmpfs -> disk

其中 tmpfs也是在記憶體裡面的,所以由memory->tmpfs其實就是乙個類似memory的copy過程,但實際比memory copy需要更多的時間。

tmpfs->disk採取定期同步機制。這樣就可以平滑掉很大比例的寫檔案操作了。

實際測試:

條件:10000次迴圈,每次分別寫入256,512,1024,4096,102400這5種大小的資料內容。

memory->tmpfs 耗時:45秒

memory->disk   耗時:143秒

採用memory -> tmpfs -> disk機制

在每隔10次memory->tmpfs寫操作之後,寫一次tmpfs->disk機制,耗時130秒

在每隔20次memory->tmpfs寫操作之後,寫一次tmpfs->disk機制,耗時89秒

主要的同步語句:

1. remove null file

find src_location -type f -empty -print -exec rm {} /;

2. sync tmpfs to disk

find src_location -type f -newer flag_file -print -exec cp {} dest_location /;

Qt用演算法畫平滑曲線(cubicTo)

qt 中可以使用 qpainterpath cubicto 函式繪製如下的平滑曲線 函式原型 void qpainterpath cubicto const qpointf c1,const qpointf c2,const qpointf endpoint 使用c1和c2指定的控制點在當前位置和給...

C 小知識 用 i替代i

靜態 分析工具可簡化編碼過程,檢測出錯誤並幫助修復。pvs studio 是乙個用於 c c 的靜態 分析工具。該團隊檢測了 200 多個 c c 開源專案,包括了 unreal engine php haiku qt 和 linux 核心等知名專案。於是他們每天分享乙個錯誤案例,並給出相應建議。這...

用java位元組碼解釋i 和 i

原址 先看4個題目 int i 0 i i int i 0 i i int i 0 int j 0 j i i int i 0 int j 0 j i i i 每道題裡的i和j都是多少?用myeclipse測試,結果分別是 i 0,i 1,i 2,j 1,i 3,j 3。i 和 i的問題,困擾很多人...