之前的那期《瓜哥图解PCIE/NVMe》
大家是不是意犹未尽?
那么今天瓜哥又来了
本期瓜哥图解知识讲堂继续开讲
从Dell SCOS看存储操作系统变迁
外置传统存储系统的OS及其配置本身很少受到人们关注。人们往往更加重视存储系统的架构、规格、特性、场景、价格等。存储系统的及其配置界面直接关系着系统的软件特性对外的展现,关系到易用性和运维成本。
该层属于暗流汹涌的一层,也是决定了一个存储系统是否稳定可靠的关键一层,也是凝聚了对应厂商多年心血的关键一层。哦?看似这一层好像很有技术含量?其实技术含量本身不高,就是工作量非常大。
这一层之所以被称为暗流汹涌,是因为硬盘、HBA、链路这三样哪样都够喝一壶的。
机械硬盘虽然存在这么多年了,但是其稳定性依然是个问题,各种bug层出不穷。硬盘提供商自己其实是发现不了多少bug的,因为它们根本没有大规模的场景去实践。不少bug都是存储厂商发现的。当然,能用软件规避的,都规避掉了,而且可能并不会将问题反馈给硬盘厂商,因为这是天然的技术壁垒,否则反馈给了硬盘厂商的话,其他存储厂商就不用耗费人力去解决该问题了。不同型号,甚至同一型号不同批次的硬盘的行为可能也不一样,需要牵扯到大量的测试工作。
另外,HBA也是个难啃的骨头,HBA主控固件是不开放给存储厂商的,bug只能靠HBA厂商来解决,周期较长,有些必须从软件上做规避。HBA主控的驱动程序一般是由存储厂商自行开发,往往固件和驱动都得配合着来改,坑也是不少的。
再就是链路问题,闪断、误码等是常事,谁踩过足够的坑,谁才能将这一层做的足够稳定。这一层需要尽量为上层提供一个稳定不变的设备列表。
这一层虽说没有太多的暗流,但是也够得上异常澎湃。得益于底层的工作,这一层将获得的物理设备做成逻辑设备,并需要负责数据的冗余,以及IO出错时候的恢复。IO错误是家常便饭了,各种原因可能都会导致IO错误,比如坏扇区/坏道,信号质量问题导致的数据校验错误,机械问题等等。不管原因如何,这一层都需要将这个错误纠正回来,比如利用Raid技术。该层拥有很多开源实现,比如Linux下mdraid模块等,其更加开放,可控性也更好。
该层需要为上层提供一个稳定的逻辑资源视图。这一层早期主要是Raid功能,后来逐渐演化出Raid2.0、分层等技术。
该层负责缓存管理。又分为数据持久性管理和性能管理。
持久性管理主要是将脏数据按照对应的策略刷到后端硬盘上***保存。在这一层上,早期的存储系统基本没有什么优化措施,大家千篇一律,按照LRU等通用算法,甚至直接使用Linux原生的Page Cache策略而不加修改。到后来,随着互联网蓬勃发展,业务层不管是在种类还是数量上,都有点爆发式增长,直接对存储系统产生了影响。不少存储系统演化出诸如QoS这种精细化性能调节能力。比如其中典型的Dell的(Compellent)SC系列存储系统中就针对QoS做了精细化实现。其可以实现针对单个逻辑卷或者一组逻辑卷,设置其总IOPS、MB/s和时延。其实现原理是在缓存层的队列处理时增加了对应的调节策略,包括入队比例、重排等。
其中Relative Priority指的是当发生队列较满时,该卷的IO是要被提前、不动,还是排***得到执行。用户可以不指定具体的指标,而用相对性能来配置某个卷或者卷组的QoS,这就一定程度上简化了配置,对于那些生手来讲比较合适。
具体做法则是在Dell的SCOS存储操作系统配置界面中先创建一个QoS Profile,在其中定义对应的指标,然后将该Profile黏着在逻辑卷作为其一个属性即可。