MegaSAS RAID卡 BBU Learn Cycle周期的影响
背景
最近遇到有些帶MegaSAS RAID卡的服務器,在業務高峰時突然IO負載飚升得很高,IO性能急劇下降,查了日志及各種設置最后才發現是RAID卡的Cache寫策略由WriteBack變成WriteThrough了。更深入的原因是BBU進入了Learn Cycle周期,自動把Cache策略改為WriteThrough.
WriteBack和WriteThrough
在開始之前,我需要提到兩個詞: WriteBack, WriteThrough
MegaSAS RAID卡的Cache策略
對于LSI的MegaSAS RAID卡, 默認的Cache策略是: WriteBack, ReadAheadNone, Direct, No Write Cache if Bad BBU
如何查看RAID卡Cache策略
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | root@hostname:~ # ./MegaCli -LDInfo -Lall -aALL Adapter 0 -- Virtual Drive Information: Virtual Drive: 0 (Target Id: 0) Name??????????????? : RAID Level????????? : Primary-1, Secondary-0, RAID Level Qualifier-0 Size??????????????? : 557.861 GB Mirror Data???????? : 557.861 GB State?????????????? : Optimal Strip Size????????? : 128 KB Number Of Drives??? : 2 Span Depth????????? : 1 Default Cache Policy: WriteBack, ReadAheadNone, Direct, No Write Cache if Bad BBU Current Cache Policy: WriteBack, ReadAheadNone, Direct, No Write Cache if Bad BBU Default Access Policy: Read/Write Current Access Policy: Read/Write Disk Cache Policy?? : Disabled Encryption Type???? : None Is VD Cached: No Exit Code: 0x00 |
- Default Cache Policy: 默認的緩存策略,針對每個RAID可以有不同的設置.
- Current Cache Policy: 當前生效的緩存策略.
策略說明
- ReadAheadNone: 不開啟預讀。這是默認的設置
- ReadAhead: 在讀操作時,預先把后面順序的數據加載入Cache,在順序讀取時,能提高性能,相反會降低隨機讀的性能。
- ReadAdaptive: 自適應預讀,當Cache memory和IO空閑時,采取順序預讀,平衡了連續讀性能及隨機讀的性能,需要消耗一定的計算能力。
- Direct: Direct IO模式,讀操作不緩存到cache memory中,數據將同時傳輸到cache中和應用,如果接下來要讀取相同的數據塊,則直接從Cache memory中獲取. 這是默認的設置
- Cached: Cached IO模式,所有讀操作都會緩存到cache memory中。
- No Write Cache if Bad BBU: 如果BBU出問題,則關閉Write Cache。由WriteBack自動切換到WriteThrough模式。如果沒有特殊要求,強烈建議采用該設置,以確保數據的安全。
- Write Cache OK if Bad BBU: 如果BBU出問題,依然啟用Write Cache. 這是不推薦的設置,BBU出問題將無法保證斷電情況下數據的正常,如果此時依然采用WriteBack模式,遇到斷電將發生數據丟失。除非有UPS作額外保證,不然不推薦采用這個設置。
策略自動切換的問題
由于MegaSAS RAID卡默認采用No Write Cache if Bad BBU的設置,將可能發生Write Cache策略變更的情況(由WriteBack變成WriteThrough),導致寫性能下降,如果該自動變更發生在業務高峰且系統Io負載高的時候,可能會引發不可預測的問題,如卡機。以下原因將造成Write Cache策略的變更.
在BBU出問題時,如何臨時強制啟用Write Cache?
| 1 2 3 4 | ./MegaCli -LDSetProp CachedBadBBU -Lall -aALL ./MegaCli -LDSetProp WB -Lall -aALL #以下命令可以把設置修改回去 ./MegaCli -LDSetProp NOCachedBadBBU -Lall -aALL |
BBU Learn Cycle
BBU由鋰離子電池和電子控制電路組成。 鋰離子電池的壽命取決于其老化程度,從出廠之后,無論它是否被充電及它的充放電次數多與少,鋰離子電池的容量將慢慢的減少。這意味著一個老電池無法像新電池那么持久。 也就決定了BBU的相對充電狀態(Relative State of Charge)不會等于絕對充電狀態(Absolute State of Charge)。
為了記錄電池的放電曲線,以便控制器了解電池的狀態,例如最大和最小電壓等,同時為了延長電池的壽命,默認會啟用自動校準模式(AutoLearn Mode). 在learn cycle期間, raid卡控制器不會啟用BBU直到它完成校準。整個過程可能需要高達12小時。這個過程中,會禁用WriteBack模式,以保證數據完整性,同時會造成性能的降低. 整個Learn Cycle分為三個步驟:
注意: 如果第二或第三階段被中斷,重新校準的任務會停止,而不會重新執行
IBM的服務器默認設置是30天執行一次Learn Cycle, 而DELL是90天。不推薦關閉Auto Learn模式,通過這個校準,能延長電池壽命,不作電池校準的Raid卡,電池壽命將從正常的2年降為8個月
查看當前的BBU Learn設置
| 1 2 3 4 5 6 7 | root@hostname:~ # ./MegaCli -AdpBbuCmd -GetBbuProperties -aALL BBU Properties for Adapter: 0 Auto Learn Period: 2592000 Sec Next Learn time: 394618008 Sec Learn Delay Interval:0 Hours Auto-Learn Mode: Enabled |
- Auto Learn Period: 自動校準間隔, 單位秒,IBM的服務器默認設置是30天執行一次Learn Cycle, 而DELL是90天。 該設置無法修改。
- Next Learn time: 下一次自動校準的時間,從2000年1月1日算起的秒數,這個設置無法修改,根據上一次自動校準的完成時間加上自動校準間隔計算得來。該時間轉化為實際時間時,需要加上RAID卡時間的誤差,部分RAID卡時間轉成GMT時間后,依然是錯誤的。
實際時間計算方法,偽代碼如下
| 1 2 | RealTime = Next Learn time + ( 系統時間的Unixtime - RAID卡時間的Unixtime ) date -d 'UTC 2000-01-01 + $RealTime secs' |
- Learn Delay Interval: 自動校準啟動后的延遲時間,單位小時,最大設置為7天。該設置只針對下次Learn Cycle,下次Learn Cycle完成后,該值將自動歸零。
- Auto-Learn Mode: 是否打開自動校準模式
查看當前BBU的狀態
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | root@hostname:~ # MegaCli -AdpBbuCmd -GetBbuStatus -aALL BBU status for Adapter: 0 BatteryType: iBBU Voltage: 3837 mV Current: -152 mA Temperature: 23 C Battery State???? : Operational BBU Firmware Status: ??Charging Status????????????? : Discharging ??Voltage???????????????????????????????? : OK ??Temperature???????????????????????????? : OK ??Learn Cycle Requested?????????????????? : Yes ??Learn Cycle Active????????????????????? : Yes ??Learn Cycle Status????????????????????? : OK ??Learn Cycle Timeout???????????????????? : No ??I2c Errors Detected???????????????????? : No ??Battery Pack Missing??????????????????? : No ??Battery Replacement required??????????? : No ??Remaining Capacity Low????????????????? : No ??Periodic Learn Required???????????????? : No ??Transparent Learn?????????????????????? : No ??No space to cache offload?????????????? : No ??Pack is about to fail & should be replaced : No ??Cache Offload premium feature required? : No ??Module microcode update required??????? : No ...下略... |
如何強制啟動Learn Cycle操作
強制執行自動校準的命令, 執行該命令后,會延遲幾秒才會生效,策略會自動變為WriteThrough
| 1 | root@hostname:~ # MegaCli -AdpBbuCmd -BbuLearn -aALL |
通過該命令可以粗略的調整自動校準的下次執行時間,但無法100%準確:
- 本次Learn Cycle的完成時間無法精確計算,這取決于電池的放電及充電速度.
- 下次Battery的relearn任務可能會因為某些原因而推遲執行,例如當時電池正在充電,整個Relearn操作將推遲到充電完后之后。
如何查看當前的Cache策略是否發生變動
對比Default Cache Policy和Current Cache Policy是否不同,不同則是策略發生變動
| 1 | root@hostname:~ # MegaCli -LDInfo -Lall -aALL |
如何把Learn模式改為手動?
| 1 2 3 4 5 | echo 'autoLearnMode=1' >/tmp/megaraid.conf MegaCli -AdpBbuCmd -SetBbuProperties -f /tmp/megaraid.conf -aAll #1為Disable, 0為Enable, 從Disable切換到Enable時,Relearn操作會立刻執行 #確認是否生效 MegaCli -AdpBbuCmd -GetBbuProperties -aALL |
建議
推薦的Cache策略: 使用No Write Cache if Bad BBU,在BBU出問題的情況下,犧牲性能來確保數據的安全性。
WriteBack, ReadAheadNone, Direct, No Write Cache if Bad BBU以下有幾種可選的方法
- 在非業務高峰對BBU強制啟動Learn Cycle,但下次自動的Learn Cycle會向后延遲5-6小時(視整個Learn Cycle所需時間而定)。每一次Learn Cycle執行完,下次Learn Cycle的執行時間會發生向后偏移的情況,推移時間由上一次整個Learn Cycle的耗時決定,一般下一次執行時間都會向后推移大約5小時(一次Learn Cycle的時間)。建議可以根據實際推遲效果定期在非業務高峰做一次手動Learn Cycle(一般是02:00~05:00)
- 切換為手動模式,由crontab或者其他手動定期觸發Learn Cycle,采用該方式需要根據不同硬件來決定Learn Cycle的間隔,采取錯誤的間隔將損耗電池的壽命。IBM的30天, DELL的機器為90天。
- 檢測下次Learn Cycle的時間,在即將進入Learn Cycle前,設置為Write Cached OK if Bad BBU, 使得Write Cache策略在Learn Cycle期間不發生變動,Learn Cycle過后,切換會原配置,這種方式在Learn Cycle期間(大約5小時左右)數據將不保險,如果遇到斷電的情況,將發生數據丟失。
- 檢測下次Learn Cycle的時間,提前1~2天,在非業務高峰期提前觸發learn cycle. 這種方法效果最好,也最方便,需要專門的腳本進行下次Learn Cycle時間的計算
推薦做法: 在保留Auto Learn模式的同時,定期通過Crontab對Raid卡執行強制Relearn的操作,檢測下次Learn Cycle的時間,提前1~2天,在非業務高峰期提前觸發learn cycle(一般是02:00~05:00)。
轉載于:https://www.cnblogs.com/ylqmf/archive/2013/02/28/2936895.html
總結
以上是生活随笔為你收集整理的MegaSAS RAID卡 BBU Learn Cycle周期的影响的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WCF系列之.net(3.0/3.5)R
- 下一篇: Poj1218_THE DRUNK JA