數據存儲產業服務平臺

IO模式-你不能忽視的細節

存儲在線編譯文章:就像在一個小黑屋里面相隔50步遠的兩個擊劍手,用戶和廠商都堅持自己刺出的是正確的方向。你是否向廠商要求可以匹配你應用程序的設置的基準測試?廠商測試中的存儲解決方案的測試是否是基于你所將購買的設置的基礎上的?

唯一能確保用戶和廠商不會雞同鴨講的方法就是了解你的應用程序的IO模式。

了解你的IO模式

在我的前一篇文章中,我談到了一個新的基準測試現實,即基準測試應該包含驅動器重建期間的性能并應該報告驅動器在負荷下重建結束的時間。我在那篇文章中評論道:“做一個補充說明,客戶很經常要求一個不匹配他們IO模式的設置,而他們這么做的原因可能僅僅是因為小道消息,或可能是因為要實際描述他們應用程序的IO模式很復雜。”我想在本篇文章中談到這個聲明是因為人們經常忘記的一個非常非常重要的概念–了解你的應用程序的IO模式。

讓我們來進行一個簡單的試驗。寫下你系統上前三個應用程序。這些應用程序可以是最耗CPU時間或最經常運行或使用最多數據的或看起來最IO密集型的應用程序,甚至可以是運行得最慢的程序。你可以想想這些應用程序是如何進行IO的,然后寫下你認為的IO模式。

其實這并不容易,不是嗎?相信還是不相信,甚至應用程序開發人員都很難跟你講清楚他們的應用程序是如何進行IO的。

開發人員所能告訴你的就是在應用程序執行期間的哪些點上會進行IO。他們有時會告訴你IO功能所使用的語言(比如,C和C++語言下的fwrite()、fread()、write()、read())他們經常關注的是算法本身而不是數據是如何進出存儲的。

當然,我并不是真的怪他們,因為如果不注意他們的應用程序的IO模式的話,算法是很難設計的。不過,這也意味著要設計一個完全滿足應用程序IO需求的存儲系統幾乎是不可能的。這就好像你到一家鞋店去想買10號網球鞋,結果出來的時候卻穿著15號的拖鞋和一雙黃襪子。隨著數據增長速度的加快,這種情況越普遍。

如果你可以描述和演示你的應用程序的IO模式,那你就是我知道的少數可以做到的人之一。請公開一下你的結果和你所使用的流程,幫助其他人做這事。但是對于世界上其他的99.9%的我們來說,描述IO模式是非常難的。作為開始,讓我們先使用一些典型的指標來描述IO模式。

從開始線開始

關于你的應用程序的IO模式,你能回答的最基本的問題是“IO是不是在運行時間中占很大比例?”換句話說,“IO是不是很重要?”

無論信與不信,這個問題也不是那么容易回答的。你必須能夠衡量進行IO所花費的時間,同時還要不影響應用程序的總體運行時間。不過對許多應用程序來說,有一個簡單的辦法–Strace。

Strace是*nix類(Linux、Unix等)操作系統的系統跟蹤工具。它可以跟蹤系統調用并可以產生許多信息,比如完成狀態(進程是否完成?),系統調用的參數,完成系統調用所花的時間,以及在讀取和寫入情況下,函數的成功狀態(有多少數據被實際寫入或讀???)。通過這些信息和一些工作,你可以檢驗應用程序的IO模式。

實際上,所有的IO都是通過系統函數調用來完成的,因此Strace應該可以捕捉許多IO信息。

一個提醒–如果應用程序在進行mmap IO而實際沒有使用系統IO函數,那么strace就幫不了你。但是如果你在使用mmap IO,那么你會有其他問題,因此這種情況下了解IO模式可能不是那么著急的事情。

Strace信息可以讓你從應用程序的角度來理解IO要求。它會告訴你應用程序向操作系統要求的系統函數調用,包括IO函數。換句話說,也就是應用程序在系統上進行的IO。數據要實際進入存儲媒介還要經過好幾個層,但是這是操作系統內部的事情,不是應用程序函數內的事情。

下面是一個寫入一些數據結構的Strace輸出的簡單例子。

1373231279.242784 write(3, "1精品国产午夜肉伦伦影院,双性老师灌满浓jing上课h,天天做天天爱夜夜爽,攵女乱h边做边走