SSD作缓存方案之LVM cache_aodiantuan2808的博客-程序员秘密

SSD作缓存方案之LVM cache

1. 前言

最近因为工作的需要,接触了一些SSD作缓存相关的知识。所谓SSD作缓存就是使用fast device(例如SSD),给slow device(例如机械硬盘)做缓存,以提高计算机整体的I/O存储性能。
目前在个人计算机中,使用的比较多的是机械硬盘和固态硬盘(SSD)。机械硬盘具有容量大,价格便宜,容错性好,寿命较长等优点;缺点是读写性能相对机械硬盘有比较大的差距。固态硬盘的优点是读写性能较好,特别是随机读写性能;缺点是价格比较昂贵,容量小,写入寿命有限,一旦损坏数据难以恢复等。
因此,有些情况下我们希望结合两者优点,于是SSD缓存技术方案应运而生。

2. 需求

假设:

  • 有一个容量比较小的fast device(例如SSD);
  • 有一个以及以上的大容量机械硬盘;
  • 有比较大的数据需要存储;
  • 对数据读写性能有一定的要求。

那么这个时候,我们就可以考虑把SSD作缓存来使用。

3. 常见方案

就从缓存方案来说,常见的有DM-cache、bcache、LVM cache、flashCache、EnhanceIO等,本文主要介绍LVM cache。

4. LVM cache

在RHEL6.7之后,LVM提供对LVM缓存逻辑卷的支持,它是基于dm-cache,LVM缓存逻辑卷使用快速设备(例如SSD驱动器)组成的小型逻辑卷,来提高容量更大但更慢逻辑卷的性能。下面在虚拟机上演示如何创建及使用。

注意:因为是在个人主机安装的虚拟机上演示,无法体现性能,仅仅演示创建过程,若需要测试其性能,请在实体机上使用真实的存储设备测试

4.1 创建

1469241-20180827160608287-311105951.png
如图所示,因为是测试,所以用虚拟机上的/dev/sdb和/dev/sdd分别作为fast device和slow device来演示创建过程。

4.1.1 分区

(以创建sdb分区为例)

fdisk /dev/sdb

回车进入分区操作, 输入n表示创建分区,然后回车选择默认选项,选项选择完毕后,输入w表示保存退出。
fdisk之后选项常用参数有:

  • m:帮助信息
  • p:显示分区表
  • d:删除一个分区表
  • l:列出已知的分区类型
  • n:新建一个分区表
  • q:退出不保存
  • w:保存并退出
  • t:修改分区表系统id

分区结果如下图所示:
1469241-20180827170536132-1235442158.png

4.1.2 创建物理卷

pvcreate /dev/sdb1 /dev/sdd1

1469241-20180827174346972-1207104709.png

4.1.3 创建卷组vg

vgcreate vg /dev/sdb1 /dev/sdd1

1469241-20180827174427258-1125451352.png

4.1.4 创建逻辑卷

  • 创建data逻辑卷
lvcreate -n data -L 6G vg /dev/sdd1

创建存储数据的逻辑卷data,划分/dev/sdd1物理卷的空间。

  • 创建cache逻辑卷
lvcreate -n cache -L 6G vg /dev/sdb1

创建缓存数据的逻辑卷cache,划分/dev/sdb1物理卷的空间。

  • 创建meta逻辑卷
lvcreate -n meta -L 64M vg /dev/sdb1

创建缓存数据的逻辑卷meta,划分/dev/sdb1物理卷的空间。

结果如下:
1469241-20180827174525934-1731174693.png

1469241-20180827174541439-1270903264.png

lvm cache总共包括三部分:data、cache、meta,其中meta的size需要大于千分之一的cache;data是存储数据,cache和meta共同构成缓存

4.1.5 创建缓存池

(注意cache和meta的顺序不能颠倒)

lvconvert --type cache-pool --poolmetadata vg/meta vg/cache

1469241-20180827174609657-1775766412.png

4.1.6 将存储卷加入缓存池

lvconvert --type cache --cachepool vg/cache --cachemode writeback vg/data

1469241-20180827174630021-1839639109.png

1469241-20180827174640484-1887792978.png

注意:cachemode有writeback和writethrough两种模式,默认为writethrough,此处测试设置为writeback。writeback的读写性能会好一些,但是在某些极端情况下会丢失数据

4.1.7 格式化与挂载

mkfs.ext3 /dev/vg/data
mkdir data
mount /dev/vg/data ./data/

1469241-20180827174650383-211403658.png

最后,就可以在./data/目录下存储数据了。在该目录读写数据时,实际上有fast device的缓存作用,加速了磁盘的读写性能。

转载于:https://www.cnblogs.com/jfLin/p/9542812.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/aodiantuan2808/article/details/102326691

智能推荐

springboot-日志配置logback.xml文件_Mr丶小帆的博客-程序员秘密

springboot默认日志系统Spring Boot默认使用LogBack日志系统,如果要使用LogBack,原则上是需要添加dependency依赖:<groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId>&...

python程序输出田字格_Python程序练习题5.1-输出更大的田字格。_weixin_39924307的博客-程序员秘密

原博文2019-09-25 16:05 −def drawsq(n): line=3*n+1 for i in range(1,line+1): if i%3 ==1: print(n*"+----",end="") print("+") else...01465相关推荐2019-12-22 15:50 −#### ★题目描述GYY面前有N堆果子,分...

【转载】HttpWebRequest的GetResponse或GetRequestStream偶尔超时 + 总结各种超时死掉的可能和相应的解决办法_kuangben2000的博客-程序员秘密

【转载】HttpWebRequest的GetResponse或GetRequestStream偶尔超时 + 总结各种超时死掉的可能和相应的解决办法https://www.cnblogs.com/summer_adai/archive/2013/04/26/3045253.html【转载】HttpWebRequest的GetResponse或GetRequestStream偶尔超时 + 总结各种超时死掉的可能和相应的解决办法 【问题】用C#模拟网页登陆,其中去请求几个页面,会发起对应的h.

自定义控件 ----- 属性与组合控件_壹叁零壹的博客-程序员秘密

一、自定义控件属性                Android中提供了很多的View,但随着技术的发展,基本的View已经不能满足需求。需要程序员自己绘制出来适应需求的的View。绘制View较简单做法是,xml布局,加载布局,展示,并添加交互效果。与代码复用性、高效性都不是很好。自定义进阶大致有:1,xml布局加载实现;2,组合控件实现;3,添加属性监听事件实现;4,完全自主绘制实

Pycharm中自动生成作者,日期等信息_pycharm自动生成作者信息_奋斗在阿尔卑斯的皮卡丘的博客-程序员秘密

1.打开PyCharm,选择File–Settings 2.依次选择Editor—Code Style-- File and Code Templates—Python Script  3.编辑内容可以根据需要添加相应的信息#!/usr/bin/python3可用的预定义文件模板变量为:$ {PROJECT_NAME} - 当前项目的名称。$ {NAME} - 在文件创建过程中在“新建文件”对话框中指定的新文件的名称。$ {USER} - 当前用户的登录名。$ {DATE} - 当前的

ArcGIS RIA开发实践【Flex篇】转载_nerdzws的博客-程序员秘密

转自:http://blog.csdn.net/melodyf/article/details/5895034问题:项目需要,弄弄Flex的开发解决方案:ArcGIS RIA开发实践【Flex篇】I、 ArcGIS Flex API 基础一 Flex的历史和现状Flex的前身是Flash,Flash是极为流行的互联网矢量动画解决方案,目前据统计97%的浏...

随便推点

关于HTTP Status 500 – Internal Server Error报错收集_莫闲的博客-程序员秘密

第1种情况把${item.id == userInfo.id}写成了${item.id = userInfo.id},即把 “==” 写成了 “=”第2种情况${item.description} 把 item写错了没有问题,大不了不会显示,但如果把description单词写错了就会报错。第3种情况${item.description} 中的description的get,s...

今天同大家聊一下Git扩展_启明智显的博客-程序员秘密

CVS作为最早的开源而且免费的集中式版本控制系统,直到现在还有不少人在用。由于CVS自身设计的问题,会造成提交文件不完整,版本库莫名其妙损坏的情况。同样是开源而且免费的SVN修正了CVS的一些稳定性问题,是目前用得最多的集中式版本库控制系统。​ 除了免费的外,还有收费的集中式版本控制系统,比如IBM的ClearCase(以前是Rational公司的,被IBM收购了),特点是安装比Windows还大,运行比蜗牛还慢,能用ClearCase的一般是世界500强,他们有个共同的特点是财大气粗,或者人傻钱多。​

Oracle监听日志listener.log清理_DBA大董的博客-程序员秘密

Oracle的监听日志listener.log当增长到一定大小时,会造成后续的日志无法写入,但不会报任何错误。在笔者遇到的情况中,有时listener.log增长到4G,新的日志便无法写入,但有些时候listener.log增长到10G以上,仍然能正常写入。这大概是Oracle的一个BUG。监听日志的清理直接删除或使用echo清理监听日志,会造成日志无法被写入的情况。正确的清理方法如下:su - grid##停止监听日志写入lsnrctl set log_status off##备份监听日志

docker server无法启动的解决方法Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the doc_docker possibly malicious path detected -- refusin_arcow的博客-程序员秘密

问题:在一台新机器上安装docker server成功后,执行 service docker start 启动时经常遇到如下类似的问题Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details.OCI runtime create failed: con

Ubuntu下yaml-cpp的安装_ubuntu卸载yaml库_taolusi的博客-程序员秘密

由于要学习的代码中用到了yaml-cpp,因此在此记录一下安装过程,翻译自:stackoverflow。关于yaml-cpp可以看一下yaml,yaml-cpp来了解一下。首先删除本地原有的yaml-cpp库:The installer just copies the header files to the directory $PREFIX/include/yaml-cpp and ...

C\C++中函数后面加const_c++方法后面加const_雪山上的小草的博客-程序员秘密

c++ 在函数后加const的意义:   我们定义的类的成员函数中,常常有一些成员函数不改变类的数据成员,也就是说,这些函数是"只读"函数,而有一些函数要修改类数据成员的值。如果把不改变数据成员的函数都加上const关键字进行标识,显然,可提高程序的可读性。其实,它还能提高程序的可靠性,已定义成const的成员函数,一旦企图修改数据成员的值,则编译器按错误处理。 const成员函数和const对...

推荐文章

热门文章

相关标签