SlideShare a Scribd company logo
flashcache 内部原理和优化
核心系统部-内核组
Robin Dong <robin.k.dong@gmail.com>
讲师介绍
• 核心系统部-内核组-董昊(花名:三百)
• 2006年加入阿里巴巴-雅虎中国 从事c/c++服务端程序开发
• 2008年转入淘宝,继续从事c/c++服务端程序及公用库开发
• 2011年转入核心系统部内核组,目前从事文件系统和IO相关的内核开
发和调优
• 内核组百科:http://baike.corp.taobao.com/index.php/Kernel
• 内核组wiki:http://kernel.taobao.org/
课程目标与目标学员
• 面向学员:>=P6,有linux上编程开发经验
• 课程目标:通过本课程,学员可以:
1. 更深的理解linux的block层结构
2. 了解linux的device mapper框架
3. 了解flashcache的原理
课程大纲页
1. Linux内核的block层
2. Device Mapper原理
3. Flashcache原理
4. Flashcache改造
Linux内核的Block层
 Block层位于文件系统层之下,设备驱动层之上
图片来自 http://adrianhuang.blogspot.com/
Linux内核的Block层
 BIO与request
图片来自 http://lwn.net/Articles/26404/
Linux内核的Block层
 Linux内核的所有IO最后都走到submit_bio函数
图片来自
http://adrianhuang.blogspot.com/
Linux内核的Block层
 request_queue
图片来自 http://blog.csdn.net/fudan_abc/article/details/2034264
Linux内核的Block层
 IO调度器
 cfq (为每个进程准备一个队列)
 deadline (读请求、写请求两个队列)
 anticipatory (deadline的改进)
 noop
课程大纲页
1. Linux内核的block层
2. Device Mapper原理
3. Flashcache原理
4. Flashcache改造
Device Mapper原理
 将两个(或多个设备)聚合成一个虚拟设备
图片来自 http://www.ningoo.net/
Device Mapper原理
 线性聚合
 dmsetup create my_linear table.txt
 table.txt:
0 1048576 linear /dev/sda 0
1048576 2097152 linear /dev/sdb 0
Device Mapper原理
Device Mapper原理
 striped聚合(RAID0)
 dmsetup create my_stripe table.txt
 table.txt:
0 2097152 striped 2 32 /dev/sda 0 /dev/sdb 0
Device Mapper原理
课程大纲页
1. Linux内核的block层
2. Device Mapper原理
3. Flashcache原理
4. Flashcache改造
Flashcache原理
 Flashcache用device mapper框架实现
Flashcache原理
 直接处理传入虚拟设备的BIO
 默认每8个sector(512Bytes)为一个block,每512个block为一
个set; cache和disk都按此划分
 set内的block由LRU链表管理
 非常简单的Hash算法:在disk上属于哪个set,直接模上cache
的set数
Flashcache原理
Flashcache原理
 Writeback(回写)模式
– 写操作迅速完成(只写cache)
– 利用work_queue(由keventd内核线程执行)把cache中的
dirty block写往disk
Flashcache原理
 Flashcache的可调参数
 /proc/sys/dev/flashcache/fioa3+fioa1/
 dirty_thresh_pct (可以最多保持多少dirty blocks,针对单个set)
 do_sync
 fallow_clean_speed/fallow_delay
 skip_seq_thresh_kb (用32个seqio结构来跟踪连续的IO流)
课程大纲页
1. Linux内核的block层
2. Device Mapper原理
3. Flashcache原理
4. Flashcache改造
Flashcache改造
线上RDS平台(mysql hosting)需要按比例控制IO
– 某些进程可以使用50%的IO带宽,某些只能用20%
– cfq调度器可以调整每个进程分配的时间片做到这一点
Flashcache改造
 blokio-controller
– mount -t cgroup -o blkio none /cgroup
– mkdir -p /cgroup/test1/ /cgroup/test2
– echo 1000 > /cgroup/test1/blkio.weight
echo 500 > /cgroup/test2/blkio.weight
– echo ${PID1} > /cgroup/test1/tasks
echo ${PID2} > /cgroup/test2/tasks
Flashcache改造
 直接把flashcache的io scheduler改为cfq?
Flashcache是BIO based,根本不走io scheduler !
Flashcache改造
 直接在flashcache_map里调用__make_request?
 IRQ没有关闭,会报BUG_ON()
 直接利用device mapper带的map_rq?
 一个request可能会包含多个bio
Flashcache改造
 Device mapper提供的struct target_type
struct target_type {
uint64_t features;
const char *name;
struct module *module;
unsigned version[3];
dm_ctr_fn ctr;
dm_dtr_fn dtr;
dm_map_fn map;
dm_map_request_fn map_rq;
......
}
Flashcache改造
 改造方法:
– 在struct target_type里添加mk_rq方法
– 实现map_rq
– dm_io_async_bvec函数的改造:原先发出去的BIO现在改为放
入flashcache设备的request_queue里
Flashcache改造
Flashcache改造
按照每个进程的比例划分占用的cache空间
每个group一个LRU
可以从 cat /proc/flashcache/fioa3+fioa1/flashcache_blocks 里查看
每个group的名称、权重、已经使用了多少个block
推荐学习资料
BIO介绍: http://lwn.net/Articles/26404/
Block layer介绍:
http://blog.csdn.net/fudan_abc/article/details/2034264
Flashcache介绍:
http://www.ibm.com/developerworks/cn/linux/l-
devmapper/index.html
Q & A
Thanks!

More Related Content

PDF
[圣思园][Java SE]Io 1
PPT
Device mapper multipathing
PPTX
Android vs iOS encryption systems
PDF
Mobile Device Encryption Systems
PDF
Tuning android for low ram devices
PDF
IOS Encryption Systems
PPTX
Transformer and BERT
PPTX
Google TPU
[圣思园][Java SE]Io 1
Device mapper multipathing
Android vs iOS encryption systems
Mobile Device Encryption Systems
Tuning android for low ram devices
IOS Encryption Systems
Transformer and BERT
Google TPU

More from Hao(Robin) Dong (7)

ODP
ext2-110628041727-phpapp02
PDF
Ext4 Bigalloc report public
PPT
Overlayfs and VFS
ODP
Ext4 new feature - bigalloc
ODP
why we need ext4
PPTX
Kernel在多核机器上的负载均衡机制
PPT
Linux下Poll和Epoll内核源码剖析
ext2-110628041727-phpapp02
Ext4 Bigalloc report public
Overlayfs and VFS
Ext4 new feature - bigalloc
why we need ext4
Kernel在多核机器上的负载均衡机制
Linux下Poll和Epoll内核源码剖析
Ad

flashcache原理及改造