Erlang檔案I/O效能評測

來源:互聯網
上載者:User

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

 

評測目的

本測試主要目的是考察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%。圖表如下:

測試代碼C標準I/O順序讀寫代碼

見附件中的 seq_rw.c.zip。

 

C標準I/O隨機讀寫代碼

見附件中的rand_rw.c.zip。

 

Erlang順序讀寫代碼

見附件中的 seq_rw.erl.zip。

 

Erlang隨機讀寫代碼

見附件中的 rand_rw.erl.zip。

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.