如何觀測SSD盤內部狀態?

在目前SSD盤相比HDD盤具有良好的讀寫性能,已廣泛適用於生產環境中。如何觀測SSD內部狀態,對性能調優,SSD工作狀態監控都十分重要。比如,我希望知道SSD盤裡空閑block還有多少(應用程序使用TRIM指令)?平均寫放大係數多少?一次讀寫操作RT分布情況,內部帶寬使用情況等等。知道這些數據後,能夠評估應用程序針對SSD優化的效果。

OS: linux


題主要的東西,目前沒有見到過。

就題主問題的本質來說,其實是對 SSD 的優化和監控有一定的疑問。

SSD 的優化是一個很有意思的事情,在生產環境中需要考慮的因素非常多。而且你必須結合應用來一起判斷 SSD 的細節。

我覺得考慮 SSD 的企業應用時,需要考慮以下幾個方面:

一. 壽命

在很多地方都會看到對 SSD 壽命的討論。SSD 自從出身就知道自己的最後一天是哪一天,設身處地的想想也蠻傷感,可能就是因為這個屬性,SSD 才會盡量讓自己的每一天都活得更加有意義。

SSD 的存儲結構從 SLC 架構到 MLC 再到 TLC,伴隨著容量的提升,其壽命問題我覺得已經不需要擔憂。即使是像 TLC 這種 1K 擦寫次數的結構,960G 的 SSD 硬碟,其總寫入數據量為 960G x 1000,假設每天寫入數據 50GB,那麼可以寫 52 年。如果每天寫入 500G 也可以寫 5年。

所以,SSD 的壽命問題在企業應用中,幾乎是一個可以忽略的問題。

不過,即使不用擔心,也應該對其進行正確的設置。比如 Linux 環境 SSD(固態硬碟)使用指南 [金步國] SSD 的對齊與否會明顯的影響壽命和性能。當然在大多數現代 Linux 系統,如 CentOS 6 中都已經是自動對齊的了。

二. 性能以及冗餘

性能和冗餘在企業應用中都是必須考慮的問題。如何在伺服器上使 SSD 發揮出最佳性能。如何平衡性能和冗餘之間的關係。以及應用層面需要保障到哪種程度。這都是需要按照獨立事件進行探討的。

我抱磚引玉的提幾個點,但是不展開闡述。

我們以 Dell H710P RAID 卡為例

1. RAID 本身是具有瓶頸的,無論是帶寬還是 IO,都有瓶頸,那麼它的瓶頸在哪裡?是否能通過瓶頸得出最合適掛在 SSD 硬碟數量是多少? 參考資料 : 趁著機器還沒有上線,做了一些硬碟性能測試實驗-VMware vSphere5.x|vCloud Suite-VmSky虛擬化論壇

2. Trim 指令在持續高壓下能夠顯著提升 SSD 的性能,但 RAID 卡幾乎都不支持 RAID 1/5 模式下 Trim 指令。那麼是拋棄冗餘,換取性能?還是拋棄性能換取冗餘?

參考資料:

How to Check and Enable TRIM on a Mac SSD

Trim (computing)

https://wiki.archlinux.org/index.php/Solid_State_Drives#TRIM

在 MySQL Master-Slave 結構中,最多只有 Semi-Sync 的支持下,我覺得拋棄冗餘是一種很不明智的決定。但在 MongoDB 這種分散式 KV 數據中,確實可以拋棄硬體層面的冗餘來換取更高的性能。

不過,即使是在 MySQL 中,做了 RAID,拋棄了 Trim 的支持,但我們依舊可以有類似 鎂光 Active Garbage Collection (目前主流的 SSD 都支持類似功能)的應用:

Crucial has a feature called Active Garbage Collection. It is built into the firmware and runs independent of the operating system and filesystem. If you are installing a Crucial SSD into a computer that does not have TRIM support (OSX Yosemite) then it is important to set the power settings to make sure the drive does not sleep when it goes into idle mode.

Garbage Collection needs to be given time to work, but as long as it has the idle time it needs, the drive will maintain its high performance over time, despite the lack of TRIM support in OSX.

不過,這個時候你就必須思考,(1) 我的資料庫系統必須要有一定的 idle 時間。(2) 我的機器硬碟空間必須要保持一定量的 Free。如果兩者都無法達到,那麼性能的下降是必然的。

3. 各種 RAID 卡本身對 SSD 的支持程度

如 Dell H710P 對 SSD 主要有兩種支持

(1) FastPath

MegaRAID Fast Path Software

根據別人的測試,是否開啟 FastPath 會帶來大約1倍左右的性能提升。但是 FastPath 對不同 RAID 的級別以及讀寫支持都不同,其中 RAID 0 的支持最全面。你如何取捨?

(2)CacheCade

http://www.dell.com/downloads/global/products/pedge/en/perc-h700-cachecade.pdf

CacheCade 提供了一種相對廉價的性能提升方案。儘管當今 SSD 已經很便宜,但是對於動輒幾十 TB 的資料庫系統來說,CacheCade 依舊是不錯的選擇。

更重要的是,大多數關係型資料庫的數據,都是小部分熱數據,大部分冷數據。在這種應用的前提下,CacheCade 顯得又高效又廉價。

三.監控

題主很大的一個話題點在於監控上。如果直接回答題主的問題的話,我覺得大多數對於系統層面的監控,已經足夠讓你映射到硬體層面。

對於 SSD 的性能來說,IOPS 和 帶寬大小,都是監控點。這兩個數據都是可以從系統層面監控而來的。

那麼在你上架系統之前,應該有對系統做一個基本的性能壓測。在有性能壓測的前提下,對系統層面的 IO 以及帶寬監控已經足夠反映出當前硬體的壓力狀況。

當然,你可以說這是在無法獲取 SSD 硬體層面信息的無奈之舉,但是從側面想想,即使你能夠獲得 SSD 層面的信息,可能幫助也不大。比如很多 SSD 宣稱的 IOPS 在 90K/s ,但是由於前文所述,RAID 性能等等等等一系列問題,你得壓測只能走到 50K/s ,那麼即使 SSD 有介面告訴你他當前走在 40K/s 的 IOPS 了又如何呢?瓶頸永遠是取最小的那個部分。

至於壽命層面的監控 SSD 的 S.M.A.R.T 個人感覺已經足夠日常使用了:

SSD White Paper

尤其是 Wear Leveling Count 和 Used Reserved Block Count 已經可以比較直接的反映出壽命問題。

希望以上內容對你有幫助。


Debug固件可以列印串口信息,但是你拿不到。私有ATA命令能返回內部重要狀態,但是需要密碼來啟用。


ssd優化都是廠家的控制晶元做的吧,基本能看到的就是個黑盒。


目前滾筒洗衣機相比波輪洗衣機具有更好的洗衣性能,已廣泛適用於家庭環境中。

如何觀測滾筒洗衣機內部狀態,對應性能調優,滾筒洗衣機工作狀態監控都十分重要。比如,我希望知道滾筒洗衣機里滾筒剩餘空間?多少衣物應該放多少洗衣粉,消耗多少水能清乾淨?一次滾筒旋轉能對衣物產生多大的摩擦力,以及洗衣機控制器工作狀態等等。知道這些數據後,能夠評估洗衣粉用量的減少和節水之後對環保帶來的積極效果。

以上屬於瞎扯,大概就這麼個意思,任何一個產品它都是廠商掙錢的工具,巴不得過了保修期就壞然後你買新的,至於性能?呵呵你又不是重量級的大客戶,為什麼要提供給你呢?


推薦閱讀:

如何通過8個月進入研發行業?
沒有IT背景的人,怎麼系統的學習web後端開發?
學習PHP不如JAVA嗎?
PHP 為什麼沒有取代 Python ?

TAG:雲計算 | 後端技術 | 固態硬碟 | 存儲技術 | Linux開發 |