【IT168 專稿】Tech OnTap 的讀者可能大多都知道,存儲系統(tǒng)的隨機讀取性能在很大程度上取決于硬盤數(shù)(存儲系統(tǒng)中的硬盤總數(shù))和硬盤轉(zhuǎn)速(單位 RPM)。但是,為提高性能而增加硬盤就意味著需要更多的功耗、散熱及空間;而且,伴隨著硬盤容量增加速度快于其性能表現(xiàn)的提升,很多應(yīng)用程序可能為了獲得最佳性能而要求增加磁盤軸,即便它們并不需要如此大的容量。
在開發(fā)性能提高模塊(Performance Acceleration Module,簡稱 PAM)時,NetApp 的目標就是突破隨機讀取性能和軸數(shù)之間的聯(lián)系,使得存儲系統(tǒng)能在提供更高級別性能的同時減少對功耗、散熱和空間的需求。衡量性能的其中一個重要方面是延遲時間或響應(yīng)時間,亦即滿足指定讀取請求的時間。對于 PAM 而言,NetApp 將其目標定為在高 CPU 負荷 (80%) 的情況下,縮短一個數(shù)量級的平均讀取延遲。我們首次發(fā)布的產(chǎn)品成功實現(xiàn)了這一目標。在內(nèi)部測試過程中,我們還發(fā)現(xiàn) PAM 能使 Microsoft® Exchange、VMware®、文件服務(wù)及 Perforce 等多種常用應(yīng)用程序顯著提速。
本文將深入探討 PAM,其中包括:
PAM 軟硬件概述
讀取緩存策略
使用預(yù)測緩存統(tǒng)計 (PCS) 功能確定能否受益于 PAM(無需購買模塊)
什么是 PAM?
簡而言之,性能提高模塊就是二級緩存:用于存放從 WAFL® 緩沖區(qū)高速緩存中退出的塊。(WAFL 即 NetApp® 的“任意位置寫入文件布局”,用于定義 NetApp 如何在磁盤上排列數(shù)據(jù)。WAFL 緩沖區(qū)高速緩存是系統(tǒng)內(nèi)存中由 WAFL 維護的讀取緩存。)在沒有 PAM 的系統(tǒng)中,每次嘗試讀取系統(tǒng)內(nèi)存中并不存在的數(shù)據(jù)時都會造成磁盤讀取。配備 PAM 后,存儲系統(tǒng)在發(fā)出磁盤讀取前,會先檢查請求的讀取是否已緩存到其安裝的任一模塊中。Data ONTAP® 在系統(tǒng)內(nèi)存中保留了一組緩存標記,因此它無需訪問模塊也可確定是否有塊駐留在 PAM 中。由于在命中緩存時只需進行一次 DMA 操作,因此,這種能力可有效縮短訪問延遲。與任何緩存一樣,成功的關(guān)鍵在于“決定什么數(shù)據(jù)可進入緩存”的算法。我們接下來將詳細探討此問題。
性能提高模塊可加快從各類工作中讀取數(shù)據(jù)的速度,但它其實最適合具有大量小規(guī)模隨機讀?。ɡ缦魉?、基于文件的應(yīng)用程序、主目錄)的工作。磁盤驅(qū)動器很難應(yīng)付此類工作,因為在傳輸數(shù)據(jù)之外,它們還需要耗費大量時間去尋找指向正確位置的驅(qū)動器機頭。
![]() |
圖 1) 是否使用 PAM 進行隨機讀取的對比。
PAM 是由硬件和軟件組合而成的(PAM 軟件稱為 FlexScale)。要啟用硬件必須具備許可。PAM 硬件模塊的長度是 PCIe 卡的四分之三,每個模塊可對 16GB 的 DDR2 內(nèi)存進行雙通道 DMA 訪問,模塊上含有一個自定義編碼的現(xiàn)場可編程門陣列 (FPGA),它可提供加速緩存任務(wù)所需的板載智能功能。表 1 中列出了各款存儲系統(tǒng)所支持的最大模塊數(shù)目。
![]() |
強大的恢復(fù)能力是 PAM 的設(shè)計宗旨之一。由于該模塊可充當(dāng)緩存使用,因此可直接丟棄不可糾正的錯誤以利于磁盤讀取。如果模塊中的不可糾正錯誤率超過設(shè)定的閾值,模塊將自動禁用,且系統(tǒng)將恢復(fù)為未緩存操作,不會中斷服務(wù)或要求重啟。在此過程中,ECC 將用于檢測誤碼,而數(shù)據(jù) CRC 則保護從 CPU 到卡內(nèi)存再到 CPU 的端對端數(shù)據(jù)傳送。
一旦出現(xiàn)模塊禁用情況,系統(tǒng)就會顯示錯誤消息并指出需要換出的問題模塊。如果啟用了 NetApp AutoSupport,系統(tǒng)還會向 NetApp 傳送消息,以便我們采取糾正措施(具體視服務(wù)協(xié)議的期限而定)。
智能緩存
PAM 中實施的緩存策略,旨在優(yōu)化小塊隨機讀取對存儲系統(tǒng)的訪問。隨機讀取是指對存儲系統(tǒng)磁盤中非鄰接數(shù)據(jù)的讀取。此類讀取在邏輯位置上并不相鄰,因此它們比起進行本地讀取較多的工作而言會更難滿足,需要更多的磁盤尋道操作和更長的平均讀取延遲時間。另外,由于此類讀取是隨機的(由定義上看),所以根本無法預(yù)測所需的下一個塊的位置并提前獲取。
相反,連續(xù)讀取因能夠同時讀取磁盤中的大量連續(xù)數(shù)據(jù)而經(jīng)常得到滿足。而且,不少算法都能夠有效識別連續(xù)讀取活動并預(yù)先讀取數(shù)據(jù)。因此,我們最好是直接從磁盤中讀取此類數(shù)據(jù),而為可能再次讀取的隨機訪問數(shù)據(jù)留出可用的讀取緩存。
這正是 PAM 緩存算法試圖實現(xiàn)的方式:默認情況下,它們會嘗試從連續(xù)和(或)低價值的數(shù)據(jù)中區(qū)分出高價值的隨機讀取數(shù)據(jù)并將其保留在緩存中,以此避免耗時的磁盤讀取過程。
需要注意的是,PAM 緩存是基于 WAFL 來實現(xiàn)的。因為到了此時,我們已擁有比原來更為充足的數(shù)據(jù)信息,可對需緩存和可放棄的數(shù)據(jù)做出更為明智的決定。
為滿足各種獨特需求,NetApp 還提供了更改緩存行為的性能。PAM 支持以下三種操作模式:
默認模式,同時緩存數(shù)據(jù)和元數(shù)據(jù)。
元數(shù)據(jù)模式,僅緩存元數(shù)據(jù)。
低優(yōu)先級模式,可緩存連續(xù)讀取數(shù)據(jù)和其它低優(yōu)先級數(shù)據(jù)。
默認模式
默認模式會同時緩存用戶數(shù)據(jù)和元數(shù)據(jù),類似于 Data ONTAP 為 WAFL 緩沖區(qū)高速緩存實施的緩存策略。對于 NFS 和 CIFS 等文件服務(wù)協(xié)議,元數(shù)據(jù)包括了維持文件和目錄結(jié)構(gòu)所需的數(shù)據(jù)。而在 SAN 中,元數(shù)據(jù)則包括了用于 LUN 數(shù)據(jù)簿記的少量塊。
此模式最適用于工作集大小不超過 PAM 緩存大小的情況。而且,在有頻繁訪問的數(shù)據(jù)熱點時也十分有用,可確保這些數(shù)據(jù)駐留在緩存中。
元數(shù)據(jù)模式
在此模式下,只有存儲系統(tǒng)元數(shù)據(jù)才會進行緩存。對于很多隨機工作而言,在緩存操作有效的一段時間內(nèi)很少會重復(fù)使用應(yīng)用程序數(shù)據(jù)。而元數(shù)據(jù)則不同,這些工作通常都需要重復(fù)使用它們,因此,緩存元數(shù)據(jù)將有助提高性能。另外,對于無法有效緩存的較大數(shù)據(jù)集(即活動數(shù)據(jù)集超出緩存的大小),僅緩存元數(shù)據(jù)也是一種可行的方法。
低優(yōu)先級模式
在低優(yōu)先級模式下,緩存對象不只是普通的數(shù)據(jù)和元數(shù)據(jù),平時排除在外的低優(yōu)先級數(shù)據(jù)也會包含在內(nèi)。低優(yōu)先級數(shù)據(jù)包括大型連續(xù)讀取數(shù)據(jù)和最近寫入的新增數(shù)據(jù)。寫入數(shù)據(jù)一般都不會進行緩存,因為總寫入工作很可能體積龐大,以致將緩存溢出并導(dǎo)致有用數(shù)據(jù)流失。此外,由于寫入數(shù)據(jù)通常都不會再次讀?。ㄋ鼈円话阍趫?zhí)行寫入時已經(jīng)緩存到本地系統(tǒng)上),因此并不適合緩存。
在一些應(yīng)用程序中,數(shù)據(jù)可能需要在寫入后的某個滯后時間再次讀取以便上游緩存可清除數(shù)據(jù),低優(yōu)先級模式在此時將十分有用。例如,基于 Web 的應(yīng)用程序會創(chuàng)建新數(shù)據(jù)并分發(fā) Web 用戶可在日后訪問的鏈接,對于此類應(yīng)用程序,此模式可避免磁盤讀取。在某些 Web 應(yīng)用程序中,我們發(fā)現(xiàn)首次讀取的滯后時間很長,以致只能從磁盤中獲得數(shù)據(jù)(即使后續(xù)數(shù)據(jù)調(diào)用足夠頻繁,可以使上游緩存處理)。通過將此類磁盤讀取變?yōu)榫彺婷?,低?yōu)先級模式下的 PAM 會使此類應(yīng)用程序提速。
此時,您自然想弄明白 PAM 是否有助于緩解工作量以及應(yīng)采用哪種模式。
PCS:確定 PAM 能否提高性能
為助您確定存儲系統(tǒng)能否受益于新增的緩存,NetApp 開發(fā)了一款目前在 Data ONTAP 7.3 及后續(xù)版本中提供的 Predictive Cache Statistics(預(yù)測緩存統(tǒng)計)軟件。PCS 可讓您預(yù)測在系統(tǒng)緩存增加到兩倍、四倍及八倍時所能得到的效果。
通過使用 PCS,您可以確定 PAM 能否為您的工作提高性能,并確定自己需要多少模塊。此外,您還可以測試不同的操作模式,以確定“默認”、“元數(shù)據(jù)”、“低優(yōu)先級”這三種模式中哪一個最適合您。
要開始使用 PCS,可通過以下命令啟用該功能:
options flexscale.enable pcs
如果存儲系統(tǒng)保持在 80% 以上的 CPU 使用率,建議您不要啟用 PCS。啟用 PCS 后,您必須讓模擬緩存“熱身”或收集數(shù)據(jù)塊。緩存經(jīng)過“熱身”后,您即可使用 NetApp 的 Perfstat 工具查看和分析數(shù)據(jù)。
此過程將使用同時包括元數(shù)據(jù)和普通用戶數(shù)據(jù)的默認緩存模式來模擬緩存。您也可以使用其它操作模式進行測試。
啟用元數(shù)據(jù)模式:
options flexscale.normal_data_blocks off
啟用低優(yōu)先級模式:
options flexscale.normal_data_blocks on
options flexscale.lopri_blocks on
完成測試后,請禁用 PCS:
options flexscale.enable off
PCS 啟用后,通過以下命令可了解當(dāng)前情況:
> stats show -p flexscale-pcs
輸出示例請見圖 2。
![]() |
圖 2) PCS 輸出示例。
以下指南有助您理解這些數(shù)據(jù):
如果“hit/(invalidate+evict)”即“命中數(shù)/(無效數(shù) + 退出數(shù))”的比率很小,則很多數(shù)據(jù)將在被使用之前丟棄。“instance (ec0, ec1, ec2)”即“實例 (ec0, ec1, ec2)”可能太小。
如果“(hit+miss)/invalidate”即“(命中數(shù) + 未命中數(shù))/無效數(shù)”的比率很小,則可能表示工作有大量更新;可切換為元數(shù)據(jù)模式并再次檢查命中率。
如果 usage 即“用量”很穩(wěn)定且有少量“invalidate”即“無效數(shù)”和 “evict”即“退出數(shù)”,則表示工作集大小合適。
緩存的 KB/s 數(shù)約等于每個塊每秒命中數(shù) hit/s × 4KB。
值得注意的是,在 PCS 中模擬的三個緩存是級聯(lián)緩存。在以上示例中,ec0 表示大小為 8GB 的第一個緩存,ec1 表示大小為 8GB 的第二個緩存,ec2 表示大小為 16GB 的第三個緩存。32GB 緩存每秒的命中數(shù)是三個緩存每秒的命中數(shù)合計。級聯(lián)緩存的主要優(yōu)勢在于,在為 32GB 緩存測量準確命中率的過程中,我們也同時獲得 8GB 和 16GB 緩存的命中率預(yù)計值。如此一來,我們便獲得了命中率曲線中的三個點,并能夠預(yù)計中間緩存大小的命中率。
PAM 和 FlexShare
FlexShare™ 是 Data ONTAP 的一個選項,用于為各卷級別設(shè)置系統(tǒng)資源(處理器、內(nèi)存及 I/O)的優(yōu)先級,從而在控制器負荷較大時向特定卷中的工作分配更多資源。FlexShare 能夠與 PAM 完全兼容,在 FlexShare 中進行的設(shè)置適用于 PAM 緩存中的數(shù)據(jù)。憑借 FlexShare,可以在使用 PAM 實施的全局策略上進行更為細化的控制。例如,如果使用 FlexShare 為某個卷指定較高的優(yōu)先級,則該卷在緩存中的優(yōu)先級也會較高。
結(jié)論
在 IT 預(yù)算有限的今天,我們迫切需要從公司的投資中獲得最佳性能,同時降低功耗、散熱及空間方面的需求。PAM 實現(xiàn)了這個目標。它給予您調(diào)節(jié)緩存模式的靈活性,滿足您在工作上的獨特需求。在您作出購買決定前,PCS 還能幫助您確定能否從 PAM 受益,所需的模塊數(shù)和各種設(shè)置。