深入浅出Flashcache(五)
前几天因为测试新版的Flashcache,为了便于监控性能指标,用Perl写了个秒级的监控程序Flashstat,一开始是通过定期获取dmsetup status的信息做解析,后来在flashcache-dev邮件列表中讨论时,Flashcache的作者Mohan Srinivasan说他已经将dmsetup status的信息暴露在/proc/flashcache_stats中,可以更加方便的解析。
实际上,不同版本的Flashcache,输出的性能指标有一些变化。较老的stable_v1版本的性能指标暴露在/proc/flashcache_stats,但是有些重要的指标没有包含进来,例如metadata ssd writes。而新版本支持一个系统中创建多个flashcache设备,因此位置修改成了/proc/flashcache/ssddev+diskdev/flashcache_stats,其中ssddev+diskdev根据实际的设备名不同而不同,例如在上一篇我们创建的模拟设备就应该是loop0+loop1,同时sysctl参数也根据设备名可以设置多组。为了兼容,flashstat针对老版本的flashcache还是解析dmsetup status的信息,而针对新版本则解析/proc中的flashcache_stats。
Flashstat的项目地址为:https://github.com/NinGoo/flashstat,和Mohan讨论过后,他已经将这个小工具接纳并merge到了主干代码,因此现在下载Flashcache的源码,已经在utils目录中包含了这个小工具,希望对Flashcache的用户有点用处。
深入浅出Flashcache(四)
年底事情比较多,中断了一段时间,这一篇总算要说到Flashcache本身了。由于是内核模块,安装的时候需要内核源码树。具体的安装过程可以参考这里。
make -j 4 KERNEL_TREE=/usr/src/kernels/2.6.32-131.0.15.el6.x86_64 sudo make install
最初版本的Flashcache只支持writeback,后来单独开了一个支持writethrough的分支在flashcache-wt目录,但目前最新的版本已经将write through合并到主版本,并且增加了write around策略。
最新的源码可以到Github获取。
env GIT_SSL_NO_VERIFY=true git clone https://github.com/facebook/flashcache.git
建议下载完源码后的第一件事,就是去doc下阅读flashcache-doc.txt和flashcache-sa-guide.txt,保证比我则几篇blog有养分得多。
不是每个人都有SSD/PCI-E Flash的硬件,所以这里可以给大家一个构建虚拟混合存储设备的小技巧,这样即使是在自己的笔记本上,也可以轻松的模拟Flashcache的试验环境,而且随便折腾。
首先,我们可以用内存来模拟一个性能很好的Flash设备,当然这有一个缺点,就是主机重启后就啥都没了,不过用于实验测试这应该不是什么大问题。用内存来模拟块设备有两种方法,ramdisk或者tmpfs+loop device。由于ramdisk要调整大小需要修改grub并重启,这里我们用tmpfs来实现。
深入浅出Flashcache(三)
前文简单介绍了block device和device mapper。有了这两个基础,再来看flashcache的代码,就容易理解多了。Flashcache是一个内核模块,要更清晰的理解代码,还需要了解一下内核模块编写的一些基础知识。好吧,虽然对于内核编程我完全是个门外汉,这里还是需要现学现卖下。所以这一篇还是不会切入正题,已经熟悉Linux内核模块的同学请忽略并耐心等待。
Linux内核支持动态的加载模块(Loadable Kernel Module,LKM)以完成某些特定的功能,模块编程需要按照一定的格式以便可以和内核交互。
5. 内核符号表
内核模块之间的交互需要通过特定的共享变量和函数,这些都需要输出到内核符号表。在模块编程中使用EXPORT_SYMBOL来进行定义。在内核中则使用了kernel_symbol结构来保存符号表信息。
深入浅出Flashcache(二)
前文简单的介绍了block device,别急,虽然这个系列的主要目的是介绍Flashcache,这一篇还是不会切入正题,因为我们还需要先了解下什么是device mapper。
假如一台主机插入了多块硬盘,单块硬盘的容量和性能都是有限的,如果能将多块硬盘组合一个逻辑的整体,对于这台主机来讲,就实现了最简单意义上的“云存储”。有很多方法可以实现这个目的,比如Raid卡硬件,比如现在很流行的分布式文件系统的replica机制,等等。Linux内核也看到了这个需求,于是2.6有了device mapper,当然device mapper不只是满足这一个需求,对于多路径IO也做了支持。
3. Device Mapper
简单来讲,Device Mapper是一种组合多个块设备变成一个逻辑块设备的机制。
Device Mapper的设计实现主要分为三层:
- Mapped Device: 映射出的逻辑设备
- Mapping Table: 映射规则表
- Taget Device: 底层的实际设备(可以是物理的块设备,也可以是Device Mapper映射出的逻辑设备),根据组合规则的不同,实际设备的使用方式不一样,区分为不同的类型。

(图片出处:参考[1])
Target device的类型,内核自带的几种包括(linux/include/linux/device-mapper.h):
常用标签: oracle MySQL Oracle11g dba blog 新特性 oow oow2009 wordpress ASM
最新评论 | Recent comments
- left: 博主你好,请问现在还有合租计划么...
- 深入浅出Flashcache(五): [...] 实际上,不同版本的Flashcache,输...
- RedhatLinux网卡配置与绑定 | 51NOC无忧网管中心: [...] 地址: http://www.ningoo.net/html/2007/r...
- yangdehua: write backup: 先写入到cahce,然后cache中...
- fxw1989311: 谢...
- 好看的电影: 呵呵,轻轻的,来看看你,我会回来...
- anymouse: mongodb是用的AGPL许可证。不适合商业...
- hoterran: 期待,学习...
- 深入浅出Flashcache(三): [...] 前文简单介绍了block device和device ...
- 深入浅出Flashcache(三): [...] 前文简单介绍了block device和device ...
- zhuanke: 偶然路过,先从第一篇看看,:...
- lee325: I subscribed to this community forum a while ago ...
- jack.buptsse: 好期待呀!NinGoo十分期待您的FlashCache...
- Nedleprortall: ChrisTV Online! Free / Premium - Программ...
- NinGoo: 忘记加上未完待续了,呵呵。应该还...
