SSD缓存方案之LVM cache

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 创建

如图所示,因为是测试,所以用虚拟机上的/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

分区结果如下图所示:

4.1.2 创建物理卷

pvcreate /dev/sdb1 /dev/sdd1

4.1.3 创建卷组vg

vgcreate vg /dev/sdb1 /dev/sdd1

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物理卷的空间。

结果如下:

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

4.1.6 将存储卷加入缓存池

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

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

4.1.7 格式化与挂载

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

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

原文地址:https://www.cnblogs.com/jfLin/p/9542812.html

时间: 2024-11-05 20:44:04

SSD缓存方案之LVM cache的相关文章

硬盘缓存方案DiskLruCache源代码解析

前面研究了LruCache,它作为如今用的最多的内存缓存方案已经在非常多开源缓存框架中使用.相同的还有硬盘缓存方案也就是DiskLruCache,通常的做法就是使用内存和硬盘二级缓存. 用法 1.存储: DiskLruCache diskLruCache= open(File directory, int appVersion, int valueCount, long maxSize); DiskLruCache.Editor editor = diskLruCache.edit(key);

硬盘缓存方案DiskLruCache源码解析

前面研究了LruCache,它作为现在用的最多的内存缓存方案已经在很多开源缓存框架中使用,同样的还有硬盘缓存方案也就是DiskLruCache,通常的做法就是使用内存和硬盘二级缓存. 使用方法 1.存储: DiskLruCache diskLruCache= open(File directory, int appVersion, int valueCount, long maxSize); DiskLruCache.Editor editor = diskLruCache.edit(key);

jQuery数据缓存方案详解:$.data()的使用

我们经常使用隐藏控件或者是js全局变量来临时存储数据,全局变量容易导致命名污染,隐藏控件导致经常读写dom浪费性能.jQuery提供了自己的数据缓存方案,能够达到和隐藏控件.全局变量相同的效果,但是jQuery实现方式更优雅.为了更好地使用jQuery数据缓存方案,我们需要掌握$.data().$.cache.$.expando.$.hasData().$.removeData(). $.hasData()用来判断某个对象是否有附加的属性,可以给任何JavaScript对象和HTMLElemen

翻译日志缓存(The log cache)

日志缓存(The log cache) 节译自:Microsoft SQL Server 2012 Internals P177(译注:本节是2012版本新增) 就像数据页在写入磁盘之前会先写入数据缓存(data cache)一样,SQL Server会在物理写入磁盘之前先缓存日志记录.64位系统中,日志缓存最多包含128个项:32位系统中,则最多包含32个项.每个项含有一个缓冲器(buffer)用来存储日志记录——在它们作为一整个块(block)写入磁盘之前.虽然块的大小从512字节至60KB

数据缓存方案

数据缓存方案 by 伍雪颖 今天考虑一个适合自己项目的缓存方案,基本都实验了下(以前一直用CoreData) 1.coredata,用MagicalRecord+Mogenerator 要建表,还要写好多解析代码,果断不用,好麻烦 2.序列化 [NSKeyedArchiver archiveRootObject:model toFile:path]; [NSKeyedUnarchiver unarchiveObjectWithFile:path]; 好方便,不过总感觉体验不好,测了下方法时间,当

域名缓存侦测(DNS Cache Snooping)技术

域名缓存侦测(DNS Cache Snooping)技术 在企业网络中,通常都会配置DNS服务器,为网络内的主机提供域名解析服务.这些DNS不仅解析自己的私有域名,还会用递归方式,请求公网的DNS解析第三方域名,如baidu.com之类.为了提升性能,通常会使用缓存记录,记录解析过的域名,尤其是第三方域名. 域名缓存侦测(DNS Cache Snooping)技术就是向这些服务器发送域名解析请求,但要求不使用递归模式.这样DNS只能解析私有域名和缓存中保存的域名.借助该项技术,渗透测试人员就知道

最佳 WordPress 静态缓存插件 WP Super Cache 安装和使用(转)

WP Super Cache 是 WordPress 官方开发人员 Donncha开发,是当前最高效也是最灵活的 WordPress 静态缓存插件.它把整个网页直接生成 HTML 文件,这样 Web 服务器就不用解析 PHP 脚本,通过使用这个插件,能使得你的 WordPress 博客将显著的提速. WP Super Cache 基本介绍 WP Super Cache 是基于 Ricardo Galli Granada 的 WP-Cache 2.WP-Cache 2 可以缓存你的 WordPre

HDFS集中式缓存管理(Centralized Cache Management)

Hadoop从2.3.0版本开始支持HDFS缓存机制,HDFS允许用户将一部分目录或文件缓存在HDFS当中,NameNode会通知拥有对应块的DataNodes将其缓存在DataNode的内存当中 集中式缓存管理有着许多显著的优势: 防止那些被频繁使用的数据从内存中清除 因为DataNode的缓存由NameNode来管理,applications在做任务安排时可以查询这个缓存的列表,使用一个被缓存的块副本能够提高读性能 当块被DataNode缓存之后,客户端可以使用一个新的.高效的.zero-c

移动应用开发(IOS/android等)中一个通用的图片缓存方案讲解(附流程图)

在移动应用开发中,我们经常会遇到从网络请求图片到设备上展示的场景. 如果每次都重复发起请求,浪费流量.浪费电量,用户体验也不佳: 将图片持久化到磁盘也不失为一种策略:但每次从文件读取图片也存在一定的io开销,就算采用此策略,我们也需要控制磁盘缓存的容量,以免占用过多系统资源. 其实没有一个方案可以说是完美的方案,只有最适合自己业务需求的方案,才可以说是一个好方案. 我们下面所讲解的方案具备很强的通用性,设计思路简单而清晰: 1.假设每个网络图片的url具有唯一性,如果网络上的图片变化了,会引起输