Erlang文件I/O性能測評

轉載:http://chaoslawful.iteye.com/blog/310346

 

評測目的

本測試主要目的是考察Erlang文件I/O同C標準I/O之間具體的性能差異。

 

預備知識

Erlang中有普通文件I/O和裸文件I/O兩類操作,其中普通文件I/O的文件句柄是一個進程ID,因此可以從Erlang節點網絡的任意位置訪問該句柄;而裸文件I/O的文件句柄是一個tuple結構,只在同一節點上打開該文件的進程內有效,無法跨進程跨節點訪問。一般來說裸文件I/O速度要遠高於普通文件I/O。

此外Erlang RTS還有一些選項能夠改善大I/O流量情況下的進程響應速度,這裏主要使用的是如下2個選項:

  • +K true|false - 該選項用於打開(true)或關閉(false,默認)Erlang RTS的Kernel poll功能。當Kernel poll被關閉時,RTS使用普通的用戶態事件輪詢接口select/poll進行進程和I/O調度,調度開銷較大;打開Kernel poll時,RTS將使用內核級事件輪詢接口(如Linux上的epoll等)進行調度,開銷較小,可以提高存在大量進程時的響應速度。
  • +A integer - 該選項用於調整Erlang RTS用於異步I/O的異步線程池大小。目前可以設置爲0(不使用異步I/O,默認)至1024之間的整數。當不使用異步I/O時,RTS會把對於較大數據塊的I/O操作切分爲多個小數據塊的I/O,以避免單個大I/O操作阻塞RTS的消息循環導致其他進程無法繼續響應;當使用異步I/O時,RTS會把I/O操作派發到異步線程池中的某個worker線程的任務隊列裏,由獨立於RTS消息循環的worker線程來處理耗時很長的I/O操作(Leader-Follower模式)。這兩種對大I/O操作的處理方式都存在一定開銷:不使用異步I/O時單個I/O操作變成多次I/O操作,讓I/O操作調用開銷增加了N倍(N爲平均切分出的I/O操作次數);使用異步I/O時,OS需要在RTS調度線程和異步I/O線程之間進行上下文切換,這也是相對較爲耗時的操作。

爲此,評測時也進行了默認狀態(+K false +A 0 )和調整後狀態(+K true +A 32 )的I/O性能比較。

 

評測環境及用例

評測環境爲公司發放的筆記本HP nx6320,Intel Duo T2400 1.83GHz(2 cores),1GB RAM,60G SATA HD。

測試用例分爲順序讀寫和隨機讀寫2種,每種類型下分別進行參數調整前後的讀和寫時間測試:

  • 順序讀算法:按照指定的塊大小逐塊讀取測試數據文件,直至全部讀取完畢爲止,測量全部用時;
  • 順序寫算法:按照指定的塊大小逐塊將隨機數據寫入測試數據文件,直至寫入大小滿足要求爲止,測量全部用時;
  • 隨機讀算法:隨機移動到測試數據文件內某處,按照指定的塊大小讀取1塊,直至累計讀取長度滿足要求爲止,測量全部用時;
  • 隨機寫算法:將測試數據文件預先truncate到指定大小,然後隨機移動到文件內某處,按照指定的塊大小寫入1塊隨機數據,直至累計寫入長度滿足要求爲止,測量寫入過程全部用時。

測試數據文件大小爲100MB,I/O塊大小從1KB、2KB開始按2的倍數遞增至1024KB,以測試不同I/O塊大小對性能的影響。

 

評測結果

順序I/O

使用Erlang默認參數進行讀操作時,C標準I/O速度是Erlang普通文件I/O速度的~5076%,是Erlang裸文件I/O速度的~191%;增加上述的RTS選項後Erlang I/O速度基本沒有變化。圖表如下:

使用Erlang默認參數進行寫操作時,C標準I/O速度是Erlang普通文件I/O速度的~92%,是Erlang裸文件I/O速度的~194%;增加上述的RTS選項後,普通文件I/O速度降低,裸文件I/O速度提高,此時C標準I/O速度是Erlang普通文件I/O速度的~192%,是Erlang裸文件I/O速度的~124%。圖表如下:

 

隨機I/O

使用Erlang默認參數進行讀操作時,C標準I/O速度是Erlang普通文件I/O速度的~2556%,是Erlang裸文件I/O速度的125%;增加上述的RTS選項後Erlang I/O速度基本沒有變化。圖表如下:

 
使用Erlang默認參數進行寫操作時,C標準I/O速度是Erlang普通文件I/O速度的~128%,是Erlang裸文件I/O速度的~62%;增加上述的RTS選項後普通文件I/O速度有所提高,但裸文件I/O速度有所降低,此時C標準I/O速度是Erlang普通文件I/O速度的~125%,是Erlang裸文件I/O速度的~107%。圖表如下:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章