干货 | 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怎么更好的结合?本文和大家做个分享。

本文主要介绍以下内容:

  1. SSD写放大及解决方法;

  2. SSD在KVM中的测试和使用;

  3. 常见SSD存储单元介绍。

SSD写放大及解决方法

SSD的硬盘有Page和Block的概念:

  • Page大小为4KB,最小读写单位;

  • Block大小为512KB(即128个Page),最小的擦除单位。

干货 | SSD在KVM虚拟化的测试和使用实践

SSD一次写的最小单位是一个Block(即512KB,读也是如此)。为什么不像磁盘一样,每次写一个比特呢?主要原因是为了防止电子干扰,保证数据的稳定和准确。

写的时候,SSD的Write只能写到空的page上,对于之前写过的page,必须先进行一次Erase。而Erase(擦除)的单位是Block,所以如果一个page的数据删掉之后,要想再写到这个page上,必须经过以下三步:

  1. 将在同一个Block的其他Page读出来;

  2. 将整个Block 擦除;

  3. 将整个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. 测试环境

测试服务器配置:

  1. 测试服务器一:HP DL380G7 内存24G CPU Intel(R) Xeon(R) E5620 @ 2.40GHz,Intel 320 160G *8 RAID 10

  2. 测试服务器二:联想 510G7 内存8G CPU Intel(R) Xeon(R) E5506 @ 2.13GHz,Intel 320 300G *2 RAID 1

  3. 测试服务器三: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缓存

干货 | SSD在KVM虚拟化的测试和使用实践

2)拔掉所有测试服务器的RAID卡电池

3)修改内核的缓存机制,定时清空缓存
编辑crontab ,每分钟执行以下命令:

干货 | SSD在KVM虚拟化的测试和使用实践

4)因为SSD有写放大问题,先将SSD写满,在进行测试,所有SSD测试前,先使用脚本反复写满数据10次。

干货 | SSD在KVM虚拟化的测试和使用实践

2. 测试结果

物理机上5种使用方式的最大性能测试

干货 | SSD在KVM虚拟化的测试和使用实践

干货 | SSD在KVM虚拟化的测试和使用实践

从图中可以得出以下结论:

  • SSD读性能好于写性能;

  • 容量越大的SSD,性能越好。

不同系统的虚拟机性能测试对比

1)Hp 服务器4 块160GB硬盘 RAID 10 虚拟机测试

如下为不同操作系统的性能结果:

干货 | SSD在KVM虚拟化的测试和使用实践

如下为不同操作系统的性能对比:

干货 | SSD在KVM虚拟化的测试和使用实践

2)联想 2 块 RAID 1 虚拟机测试

如下为不同操作系统的性能结果:

干货 | SSD在KVM虚拟化的测试和使用实践

如下为不同操作系统的性能对比:

干货 | SSD在KVM虚拟化的测试和使用实践

从图中可以得出以下结论:

  • 基于文件系统,同样条件下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虚拟化的测试和使用实践的主要内容,如果未能解决你的问题,请参考以下文章

#yyds干货盘点#kvm使用之virsh命令详解

实操干货KVM命令管理虚拟机与性能优化

virtualbox和kvm的区别

virtualbox和kvm的区别

基于Linux命令行KVM虚拟机的安装配置与基本使用

#yyds干货盘点#物理机上快速搭建kvm虚拟机