RAID卡缓存策略

不同的RAID卡缓存策略对IO的性能影响较大,常见的策略有:

1、写操作策略,可设置为WriteBack或WriteThrough

WriteBack:进行写操作时,将数据写入RAID卡缓存,并直接返回,RAID卡控制器将在系统负载低或者Cache满了的情况下把数据写入硬盘。该设置会大大提升RAID卡写性能,绝大多数的情况下会降低系统IO负载。 数据的可靠性由RAID卡的BBU(Battery Backup Unit)进行保证。
WriteThrough: 数据写操作不使用缓存,数据直接写入磁盘。RAID卡写性能下降,在大多数情况下该设置会造成系统IO负载上升。

2、读操作策略,可选参数:ReadAheadNone, ReadAdaptive, ReadAhead。

ReadAheadNone: 不开启预读。这是默认的设置
ReadAhead: 在读操作时,预先把后面顺序的数据加载入Cache,在顺序读取时,能提高性能,相反会降低随机读的性能。
ReadAdaptive: 自适应预读,当Cache memory和IO空闲时,采取顺序预读,平衡了连续读性能及随机读的性能,需要消耗一定的计算能力。

3、缓存策略,可选参数: Direct, Cached

Direct: Direct IO模式,读操作不缓存到cache memory中,数据将同时传输到controller cache中和应用系统中,如果接下来要读取相同的数据块,则直接从controller cache中获取. Direct IO是默认的设置
Cached: Cached IO模式,所有读操作都会缓存到cache memory中。

4、BBU不可用时策略,可选参数: Write Cache OK if Bad BBU 和No Write Cache if Bad BBU

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卡的Cache策略

##查看MegaSAS RAID卡的Cache策略
/usr/local/sbin/MegaCli -LDInfo -Lall -aALL

输出结果为:

Adapter 0 -- Virtual Drive Information:
Virtual Drive: 0 (Target Id: 0)
Name :
RAID Level : Primary-5, Secondary-0, RAID Level Qualifier-3
Size : 1.633 TB
Sector Size : 512
Parity Size : 278.875 GB
State : Optimal
Strip Size : 64 KB
Number Of Drives : 7
Span Depth : 1
Default Cache Policy: WriteBack, ReadAdaptive, Direct, Write Cache OK if Bad BBU
Current Cache Policy: WriteBack, ReadAdaptive, Direct, Write Cache OK if Bad BBU
Default Access Policy: Read/Write
Current Access Policy: Read/Write
Disk Cache Policy : Disk's Default
Encryption Type : None
Default Power Savings Policy: Controller Defined
Current Power Savings Policy: None
Can spin up in 1 minute: Yes
LD has drives that support T10 power conditions: Yes
LD's IO profile supports MAX power savings with cached writes: No
Bad Blocks Exist: No
Is VD Cached: Yes
Cache Cade Type : Read Only

BBU Learn Cycle
BBU由锂离子电池和电子控制电路组成。 锂离子电池的寿命取决于其老化程度,从出厂之后,无论它是否被充电及它的充放电次数多与少,锂离子电池的容量将慢慢的减少。这意味着一个老电池无法像新电池那么持久。 也就决定了BBU的相对充电状态(Relative State of Charge)不会等于绝对充电状态(Absolute State of Charge)。

为了记录电池的放电曲线,以便控制器了解电池的状态,例如最大和最小电压等,同时为了延长电池的寿命,默认会启用自动校准模式(AutoLearn Mode). 在learn cycle期间, raid卡控制器不会启用BBU直到它完成校准。整个过程可能需要高达12小时。这个过程中,会禁用WriteBack模式,以保证数据完整性,同时会造成性能的降低. 整个Learn Cycle分为三个步骤:
1、控制器把BBU电池充满电(该步骤可能是放电后充电或直接充电,如果电池刚好满电,则直接进入第二阶段)
2、开始校准, 对BBU电池执行放电
3、放电完成后,完成校准,并重新开始充电, 直接达到最大电量, 整个Learn Cycle才算完成
注意: 如果第二或第三阶段被中断,重新校准的任务会停止,而不会重新执行

IBM的服务器默认设置是30天执行一次Learn Cycle, 而DELL是90天。不推荐关闭Auto Learn模式,通过这个校准,能延长电池寿命,不作电池校准的Raid卡,电池寿命将从正常的2年降为8个月

查看RAID卡BBU属性设置:

##查看BBU设置
/usr/local/sbin/MegaCli -AdpBbuCmd -GetBbuProperties -aALL

禁用Auto-Learn模式的输出结果为:

BBU Properties for Adapter: 0

  Auto Learn Period: 90 Days
Next Learn time: None Learn Delay Interval:0 Hours
Auto-Learn Mode: Disabled

输出结果含义:

Auto Learn Period: 自动校准间隔, 单位秒,IBM的服务器默认设置是30天执行一次Learn Cycle, 而DELL是90天。 该设置无法修改。
Next Learn time: 下一次自动校准的时间,从2000年1月1日算起的秒数,这个设置无法修改,根据上一次自动校准的完成时间加上自动校准间隔计算得来。该时间转化为实际时间时,需要加上RAID卡时间的误差,部分RAID卡时间转成GMT时间后,依然是错误的。
Learn Delay Interval: 自动校准启动后的延迟时间,单位小时,最大设置为7天。该设置只针对下次Learn Cycle,下次Learn Cycle完成后,该值将自动归零。
Auto-Learn Mode: 是否打开自动校准模式

查看RAID卡BBU状态:

## 查看当前BBU状态
/usr/local/sbin/MegaCli -AdpBbuCmd -GetBbuStatus -aALL

正常输出结果为:

BBU status for Adapter: 0

BatteryType: BBU
Voltage: 3913 mV
Current: 0 mA
Temperature: 75 C
Battery State: Optimal
BBU Firmware Status: Charging Status : None
Voltage : OK
Temperature : OK
Learn Cycle Requested : No
Learn Cycle Active : No
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 BBU GasGauge Status: 0x0828
Relative State of Charge: 91 %
Charger Status: Unknown
Remaining Capacity: 410 mAh
Full Charge Capacity: 451 mAh
isSOHGood: Yes Exit Code: 0x00

输出结果含义:

Charging Status: 当前电池处于什么状态,有Charging, Discharging, None等值,分别代表电池充电,放电,及没有充放电操作的状态
Learn Cycle Requested: Learn Cycle请求,当为Yes时,并且下面的Learn Cycle Active为No, 说明已经开始了Learn Cycle的第一阶段, 此时策略开始变为WriteThrough, 电池将经历一个放电后充电或者充电的过程
Learn Cycle Active: 是否处于Learn Cycle的校准阶段,如果为Yes, 则进入了Learn Cycle的第二阶段,控制器开始校准电池.
Battery Replacement required: 电池是否需要维修,如果为Yes, 请尽快更换电池
Remaining Capacity Low: 剩余电容量低, 如果为Yes, 需要更换电池

当RAID卡写操作策略自动从WriteBack切换为WriteThrough时,可能情况有:

1、BBU损坏

2、BBU正在进行充放电

3、BBU准备进入充放电状态

BBU设置中只有Learn Delay Interval和Auto-Learn Mode两项可以进行设置,Auto-Learn Mode选项不推荐关闭,而Learn Delay Interval最大仅能设置为7天,因此很难通过修改BBU设置来将BBU充放电操作避开业务高峰期。

为避免BBU充放电操作在业务高峰期运行,可以采用以下方式:
1、在非业务高峰期强制启动Learn Cycle,使下一次Learn Cycle错过高峰期。

##强制启动Learn Cycle操作
/usr/local/sbin/MegaCli -AdpBbuCmd -BbuLearn -aALL

2、将自动充放电模式修改为手动,然后在非业务高峰期手动触发。

## 修改Auto-Learn Mode
## 1为Disable, 0为Enable, 从Disable切换到Enable时,Relearn操作会立刻执行
echo 'autoLearnMode=1' >/tmp/megaraid.conf
/usr/local/sbin/MegaCli -AdpBbuCmd -SetBbuProperties -f /tmp/megaraid.conf -aAll ## 确认是否生效
/usr/local/sbin/MegaCli -AdpBbuCmd -GetBbuProperties -aALL

在BBU充电期间,可以将写策略从WriteThrough强制修改为WriteBack,保证IO性能:

## 强制在BBU损坏时使用Cache
/usr/local/sbin/MegaCli -LDSetProp CachedBadBBU -Lall -aALL ## 强制使用WriteBack写策略
/usr/local/sbin/MegaCli -LDSetProp WB -Lall -aALL ##查看MegaSAS RAID卡的Cache策略
/usr/local/sbin/MegaCli -LDInfo -Lall -aALL

参考资料:
http://lists.us.dell.com/pipermail/linux-poweredge/2006-May/025738.html
http://www.cnblogs.com/ylqmf/archive/2013/02/28/2936895.html

MySQL Hardware--RAID卡BBU Learn Cycle的更多相关文章

  1. 【转】MegaSAS RAID卡 BBU Learn Cycle周期的影响

    http://ju.outofmemory.cn/entry/140 背景 最近遇到有些带MegaSAS RAID卡的服务器,在业务高峰时突然IO负载飚升得很高,IO性能急剧下降,查了日志及各种设置最 ...

  2. RAID卡 BBU Learn Cycle周期的影响

    背景 最近遇到有些带MegaSAS RAID卡的服务器,在业务高峰时突然IO负载飚升得很高,IO性能急剧下降,查了日志及各种设置最后才发现是RAID卡的Cache写策略由 WriteBack变成Wri ...

  3. MegaCli是一款管理维护硬件RAID软件,可以通过它来了解当前raid卡的所有信息,包括 raid卡的型号,raid的阵列类型,raid 上各磁盘状态

    MegaCli 监控raid状态 转载weixin_30344131 最后发布于2015-10-16 13:05:00 阅读数    简介 MegaCli是一款管理维护硬件RAID软件,可以通过它来了 ...

  4. Linux RAID卡优化

    200 ? "200px" : this.width)!important;} --> 介绍 我们的生产服务器经常会做raid存储,但是单单做了raid就能保证性能高效和数据 ...

  5. raid卡MegaCli工具使用说明

    一.DELL&IBMMegaCli -AdpAllInfo -aALL —看配置项 #检查raid级别MegaCli -LDInfo -Lall -aALL | grep 'RAID Leve ...

  6. DELL磁盘阵列控制卡(RAID卡)MegaCli常用管理命令汇总

    新版本的 MegaCli-1.01.24-0.i386.rpm (下载地址:http://www.lsi.com/downloads/Public/MegaRAID Common Files/8.02 ...

  7. Dell服务器Raid卡电池策略调整

    DELL服务器的Riad卡都有可充电池的特性,这块可充电电池,在不使用时,也会有微弱的放电现象,当它的电量放电到低到一定程度时,Raid卡控制器就会对电池进行一次“放电”,将剩余的电量放掉,然后再进行 ...

  8. LSI系列芯片Raid卡配置方法、管理手册

    说明 本手册适用于LSI芯片Raid卡 包括但不限于Inspur 2008/2108 Raid卡.LSI 9240/9260/9261/ 9271 等Raid卡. 不同型号的Raid卡在某些功能上的支 ...

  9. Linux中使用MegaCli工具查看、管理Raid卡信息

    MegaCli是一款管理维护硬件RAID软件,可以通过它来了解当前raid卡的所有信息,包括 raid卡的型号,raid的阵列类型,raid 上各磁盘状态,等等.通常,我们对硬盘当前的状态不太好确定, ...

随机推荐

  1. bladex下载前端代码后,运行服务时报错【'vue-cli-service' 不是内部或外部命令,也不是可运行的程序或批处理文件。】的解决方法

    问题:E:\BladeXDB\Saber>yarn run serveyarn run v1.13.0$ vue-cli-service serve'vue-cli-service' 不是内部或 ...

  2. Python - Django - SweetAlert 插件的使用

    SweetAlert Github:https://github.com/lipis/bootstrap-sweetalert 下载完后放入 /static/ 目录下 sweetalert.html: ...

  3. 查看appPackage和appActivity的多种方法

    一.通过adb shell 查看 adb shell dumpsys activity | grep 包名 列如: C:\Users\admin>adb shell root@shamu:/ # ...

  4. [LeetCode] 199. Binary Tree Right Side View 二叉树的右侧视图

    Given a binary tree, imagine yourself standing on the right side of it, return the values of the nod ...

  5. [LeetCode] 316. Remove Duplicate Letters 移除重复字母

    Given a string which contains only lowercase letters, remove duplicate letters so that every letter ...

  6. PLSQL Developer 11 使用技巧(持续更新)

    PLSQL Developer 11 使用技巧 (持续更新) 目录(?)[-] 首先是我的颜色配置 常用快捷键 提升PLSQL编程效率 按空格自动替换 关闭Window窗口 PLSQL 实用技巧 TI ...

  7. pyhton数据类型:字典、集合、列表、元组

    基本常识 元组 列表 字典 集合 初始化 tuple=(1,2,3,4) list=[1,2,3,4] dic={'a':12,'b':34} set={1,2,3,4} 元素索引 tuple[0] ...

  8. CF1016D Vasya And The Matrix

    题目描述 我们有一个 n * m 的矩阵,现在我会告诉你每一行和每一列的异或和请求出任意一种可能的矩阵 数据范围 1<=n,m<=100输入数据确保在int范围内 输入输出格式: 输入格式 ...

  9. typedefine 用法

    typedef为C语言的关键字,作用是为一种数据类型定义一个新名字.这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等). 用法: 变量别名 例如: 单个变量: t ...

  10. Linux基础系统优化(一)

    前言 引言没有,只有一张图. Linux的网络功能相当强悍,一时之间我们无法了解所有的网络命令,在配置服务器基础环境时,先了解下网络参数设定命令. ifconfig 查询.设置网卡和ip等参数 ifu ...