0
点赞
收藏
分享

微信扫一扫

nvme ssd 坏盘模拟

背景

当前线下测试环境出现了坏一块NVME SSD盘后,业务无法再分配新的block的现象,随后整个集群的IOPS都跌到0的现象。理论上数据路径 底层通过异步接口、通过多数派机制,应该可以避免单点故障导致的全集群IOPS跌到0的故障放大效应。预期和实际表现的不同,要求我们需要模拟真实的坏盘/慢盘故障,复现当时故障的现象,分析所有可能出现 的影响,并尽量减小甚至消灭这种影响。

故障模拟

常见的NVME SSD故障包括使用过程中掉盘(lspci 看不到故障盘)、变砖(固态硬盘用户数据完全丢失甚至无法识别硬盘)、卡断(iops很低/ioutil 很高/延时很大)等现象。这些现象可以在SSD 主控固件内模拟,但EBS/ESSD位于业务层无法直接调用SSD主控相关接口,因此只能通过系统软件层和业务调用层去模拟。

坏盘故障模拟

系统软件层模拟方法 NVME SSD可以通过ssd 下线的办法去模拟, 参考命令如下:

Run one of the following commands to safely remove the drive
“echo 1 > /sys/bus/pci/devices/0000:B:D:F /remove” or 
“echo 0 > /sys/bus/pci/slots/$slot/power” 

示例如下: image.png

考虑到PCIE NVME SSD 热下线可能触发PCIE UCE 错误,进而导致主机重启,目前暂时不优先考虑这个模拟方法。

业务层模拟方法 三种case::1.能异步提交请求但不能收到已提交请求的回复; 2. 不能提交新请求但能收到已经提交的请求的回复; 3. 新请求不能提交、已经提交的也不能收到回复

对于这三种类型的异常,可以都基于用户态文件系统去模拟。目前我们已经模拟了第一种类型的异常即请求能够提交但不能收到回复。还需要模拟其他两种类型的异常。

慢盘故障模拟

系统软件层模拟方法 可以通过nvme cli 命令来设置SSD进入最低功耗模式,从而让seq write/read 的性能变低、io latency变大。 原理如下: image.png

参考命令如下: image.png

业务层模拟方法 类似于坏盘模拟的三种case,慢盘场景下也可能出现三种变慢的场景1.异步提交请求正常但收到已提交请求的回复变慢; 2. 提交新请求变慢但收到已经提交的请求的回复正常; 3. 新请求提交和收已经提交请求的回复都变慢;

对于这三种类型的异常,也可以都基于我们开发的用户态文件系统层去模拟。目前我们已经模拟了请求能够提交但不能收到回复。其他三种的异常同样也可以通过修改用户态文件系统的行为进行模拟。

举报

相关推荐

0 条评论