干货 | SSD在KVM虚拟化的测试和使用实践
Posted 高效运维
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了干货 | SSD在KVM虚拟化的测试和使用实践相关的知识,希望对你有一定的参考价值。
作者介绍
肖力,资深KVM专家
拥有15年运维经验,就职于金山西山居,担任系统运维经理,曾就职于盛大游戏,从2009年开始研究KVM技术,是国内较早在生产环境大规模实践KVM的人之一,积累了非常丰富的经验。著有《深度实践KVM》一书。
引言
固态硬盘(Solid State Disk、Solid State Drive,简称SSD)是一种以存储器Flash作为永久性存储器的存储设备。SSD在KVM下的测试结果怎样?和KVM怎么更好的结合?本文和大家做个分享。
本文主要介绍以下内容:
SSD写放大及解决方法;
SSD在KVM中的测试和使用;
常见SSD存储单元介绍。
SSD写放大及解决方法
SSD的硬盘有Page和Block的概念:
Page大小为4KB,最小读写单位;
Block大小为512KB(即128个Page),最小的擦除单位。
SSD一次写的最小单位是一个Block(即512KB,读也是如此)。为什么不像磁盘一样,每次写一个比特呢?主要原因是为了防止电子干扰,保证数据的稳定和准确。
写的时候,SSD的Write只能写到空的page上,对于之前写过的page,必须先进行一次Erase。而Erase(擦除)的单位是Block,所以如果一个page的数据删掉之后,要想再写到这个page上,必须经过以下三步:
将在同一个Block的其他Page读出来;
将整个Block 擦除;
将整个Block的数据写下去。
上述过程被称为SSD的写放大。在此过程中,写动作要操作三次,这严重降低了效率,所以也叫写惩罚。
解决写放大主要有两个方案:
1. 预留空间
一般固态硬盘上都有一块保留空间,消费机级的SSD在7-10%,企业级的SSD保留空间在20%以上,甚至有些产品有100%的保留空间。
使用保留空间的好处是,随时都能保证有未使用的空间,减少写放大,SSD的芯片在空闲的时候,再对删除的块进行清除。所以写入频繁的时候,保留空间越多的SSD性能越好。
2. 使用TRIM技术
TRIM是现在公认的解决写放大的比较好的方案。TRIM位于操作系统层。操作系统使用TRIM命令来通知SSD某个page的数据不需要了,可以回收了。
支持TRIM的操作系统和以往的主要区别是,删除一个Page的操作不同:
在磁盘时期,删除一个page,之后在文件系统的记录信息里将该page的标志位设置为可用,但是并没有将数据删除。
使用SSD且支持TRIM的操作系统,在删除一个page时,会同时通知SSD这个page的数据不需要了,SSD内部有一个空闲时刻的垃圾收集进程,在空闲时刻SSD会将一些空闲的数据集中到一起,然后一起Erase。
这样每次写操作,就在已经Erase好了的Page上写入新的数据。越是新的操作系统对Trim特性支持的越好。
支持TRIM技术的操作系统主要包括:
RHEL/CentOS 6.4及后续版本;
Linux 系统内核版本2.6.33及以后版本;
Windows 7 / 2008 R2 及后续版本。
SSD在KVM中的测试和使用
要使用SSD,需要先对SSD在KVM虚拟化中使用进行测试。先建立数据模型并测试,再根据测试结果以确定最好的使用方式,及使用中要注意的地方。
本文是笔者做过的基于Intel 320 SSD在KVM上做的测试,320虽然是上一代的SSD,但是测试结论在新一代的SSD上依旧有效。
1. 测试环境
测试服务器配置:
测试服务器一:HP DL380G7 内存24G CPU Intel(R) Xeon(R) E5620 @ 2.40GHz,Intel 320 160G *8 RAID 10
测试服务器二:联想 510G7 内存8G CPU Intel(R) Xeon(R) E5506 @ 2.13GHz,Intel 320 300G *2 RAID 1
测试服务器三:HP DL380G6 内存16G CPU Intel(R) Xeon(R) E5520 @ 2.27GHz,Intel 320 160G *4 RAID 10
测试环境:CentOS 6.3 ,内核版本2.6.32-279.22.1.el6.x86_64。
测试工具:所有linux系统使用fio,所有Windows 系统使用iometer。
为保证测试准确性,做了以下工作:
1)关闭所有测试服务器的lvm缓存
2)拔掉所有测试服务器的RAID卡电池
3)修改内核的缓存机制,定时清空缓存
编辑crontab ,每分钟执行以下命令:
4)因为SSD有写放大问题,先将SSD写满,在进行测试,所有SSD测试前,先使用脚本反复写满数据10次。
2. 测试结果
物理机上5种使用方式的最大性能测试
从图中可以得出以下结论:
SSD读性能好于写性能;
容量越大的SSD,性能越好。
不同系统的虚拟机性能测试对比
1)Hp 服务器4 块160GB硬盘 RAID 10 虚拟机测试
如下为不同操作系统的性能结果:
如下为不同操作系统的性能对比:
2)联想 2 块 RAID 1 虚拟机测试
如下为不同操作系统的性能结果:
如下为不同操作系统的性能对比:
从图中可以得出以下结论:
基于文件系统,同样条件下Linux系统虚拟机性能好于Windows系统虚拟机;
虚拟机使用SDD,基于lv的裸设备磁盘,性能好于基于文件系统的磁盘。
3. 测试结论
综合上面的测试结果,可以得出以下结论:
使用SSD在读方面可以达到数万以上的IOPS,在写方面可以达到数千左右的IOPS,相对机械硬盘有很大的优势;
在虚拟化中,为了充分发挥SSD性能,虚拟机磁盘,应该使用裸设备映射,而不是qcow2的文件系统。
附赠:SLC、MLC及TLC的区别
Flash的最小存储单元是晶浮栅晶体管,固态盘中,通过在存储单元晶体管的栅(Gate)中,注入不同数量的电子,通过改变栅的导电性能,改变晶体管的导通效果,实现对不同状态的记录和识别。根据读写状态的不同,分为三种:
能读写两种状态的晶体管的Flash的存储单元称为单层式存储 SLC;
能读写四种状态的晶体管的Flash的存储单元称为多层式存储MLC;
能读写六种状态的晶体管的Flash的存储单元称为三层式存储TLC,TLC也被称作3-bit MLC。
SLC、MLC及TLC的读写速度依序从快至慢,使用寿命依序从长至短,成本依序从高至低,需要纠错比特数(ECC)则是相反地从低至高。
SLC的状态简单,所以读取很容易,MLC有多种状态,读取时容易出错,需要校验,速度相对较慢。实际MLC的状态识别过程比上述复杂很多,读取一次MLC的功耗比SLC大很多。
由于材料本身的缘故,SLC可以接受10万次级的擦写,而MLC材料只能接受万次级擦写操作,所以MLC的寿命比SLC少很多。
但是,也是最重要的,由于MLC中的信息量大,同一个存储单元,信息量是SLC的N倍,所以相同容量的磁盘,MLC类型Flach成本更低,存储单元体积更小。这也导致市面上多数固态盘都采用了MLC型的Flash颗粒。
SLC由于其特性,仅在高端的高速存储设备中使用。目前固态硬盘的主流从SLC芯片转到MLC芯片。
Flash颗粒是大量浮栅晶体管的阵列,一般的U盘中会有1-2粒Flash颗粒,视容量而定;在SSD硬盘中,常见会有更多粒Flash颗粒,并且Flash颗粒可以同时进行读写,所以一般固态硬盘的容量越大,Flash的颗粒也就越多,性能也就越好。
(以上内容节选自《深度实践KVM》一书)
如何一起愉快地发展
以上是关于干货 | SSD在KVM虚拟化的测试和使用实践的主要内容,如果未能解决你的问题,请参考以下文章