存储系统性能比拼测试
<1ms稳定时延--一扇即将开启的大门
那么对用户来说,时延究竟要低到什么程度才能更好的满足应用的需求?1ms的时延已经成为一个分水岭,成为闪存存储系统和磁盘存储系统的重要差异,系统必须要设计提供一种良好的分布式并发机制,解决大规模并发访问下低时延的保证问题。当我们将时延降低1-2个数量级时,我们仿佛进入了一个全新的世界。原来感觉很快的处理,现在可能已经变得慢起来。就像汽车与飞机,速度也就差1个数量级,但它们在设计中关注完全不同的问题。当我们将存储时延降低至300-500us时, iscsi协议带来的接近100us的延迟已经变得难以接受,而这在传统的10ms总时延的设备上根本无需关注。微秒级时延让我们进入了新的世界,我们需要以探索的精神,重新审视一下请求处理的各个环节,硬件和软件、架构和协议,使得每一个处理达到us级的精准控制。
传统以磁盘为中心的存储,时延最大出现在磁盘数据的访问,要想实现微秒级的时延目标,是完全不可能的事情。但随着闪存的规模应用,大量关键数据可以放置到SSD上,完全可以使得数据的访问小于1ms。SSD是依靠低时延来支撑高IOPS的,这与堆砌HDD来增加并发能力进而提高IOPS的做法,是完全不同的,而事实上低时延更能够帮助业务系统提升性能,并减少在存储基础设施上的投资。SSD内部的控制器支持多通道并发访问后端的NAND Flash,所以SSD在支持低响应时延的同时也支持真正的多并发,从而将性能发挥出来。
时延问题的本质是存储介质的问题,如果选择HDD,时延就只能到达10ms水平;如果选择闪存,则可以控制在1ms,乃至300us水平;如果选择DRAM,则可以控制在100us,最佳可以控制的10us。尽管介质是最为本质的选择,但最终结果往往并不是仅仅选择合适的介质就能完全决定的。时延的问题是一个相当复杂的问题,介质只是里面最关键的一个环节,一个存储请求,从IO接口进入存储系统,到最后从IO接口返回给用户,要经过多个临界资源的处理(CPU、锁、Cache、存储介质、内联网络、IO接口等等),要进入多个队列排队,每次排队和处理都会带来时延。再加上优先级的争夺,OS调度带来的干扰,特别是在要求越来越高的时延要求下,软件处理和协议栈开销也将成为被重点关注的对象。
闪存与系统深度融合--微秒级时延的设计思想
首先,必须要针对闪存的特性设计,而不仅仅是在传统阵列的设计上更新闪存盘。众所周知,传统阵列是围绕着缓存(Cache)展开的,一般使用比较节省内存、但是操作相对较为耗时的树形数据结构来作为cache的索引表,由于HDD的速度并不够快,通过Cache技术,传统阵列能够提供读命中,以降低读时延;能够提供回写,以降低写时延。这种设计思路导致如果我们直接将SSD插入传统阵列,只能发挥SSD的一小部分性能。而对于闪存阵列,情况则发生了变化。SSD的时延大约只有数十到数百us,比HDD低出1个数量级以上。在这种情况下,针对传统存储阵列所设计的索引表所引入的时延,变得突出起来,会极大地影响SSD性能的发挥。于是在闪存阵列系统中,必须要选择一种不同于传统存储阵列的数据结构来作为cache索引表。新的数据结构可以适当多占一些内存,但是操作(查找、插入、删除)时延一定要很低。虽然这会导致较高的CPU占用率和内存占用率,但为了得到更好的性能,我们不能也无需在闪存阵列上设计复杂的Cache,应尽量释放CPU来处理更多的IO。由此看来,系统的瓶颈点在不同的系统上发生了迁移,于是在设计和开发时,需要向关键路径要时间、向非关键路径要资源。传统存储阵列是拿时间换空间,而闪存阵列是拿空间换时间。
|