狠狠撸
Search
Submit Search
蹿濒补蝉丑肠补肠丑别原理及改造
?
0 likes
?
522 views
Hao(Robin) Dong
1 of 32
Download now
Downloaded 23 times
More Related Content
蹿濒补蝉丑肠补肠丑别原理及改造
1.
flashcache 内部原理和优化 核心系统部-内核组 Robin Dong
<robin.k.dong@gmail.com>
2.
讲师介绍 ? 核心系统部-内核组-董昊(花名:三百) ? 2006年加入阿里巴巴-雅虎中国
从事c/c++服务端程序开发 ? 2008年转入淘宝,继续从事c/c++服务端程序及公用库开发 ? 2011年转入核心系统部内核组,目前从事文件系统和IO相关的内核开 发和调优 ? 内核组百科:http://baike.corp.taobao.com/index.php/Kernel ? 内核组wiki:http://kernel.taobao.org/
3.
课程目标与目标学员 ? 面向学员:>=P6,有linux上编程开发经验 ? 课程目标:通过本课程,学员可以: 1.
更深的理解linux的block层结构 2. 了解linux的device mapper框架 3. 了解flashcache的原理
4.
课程大纲页 1. Linux内核的block层 2. Device
Mapper原理 3. 贵濒补蝉丑肠补肠丑别原理 4. 贵濒补蝉丑肠补肠丑别改造
5.
Linux内核的Block层 ? Block层位于文件系统层之下,设备驱动层之上 图片来自 http://adrianhuang.blogspot.com/
6.
Linux内核的Block层 ? BIO与request 图片来自 http://lwn.net/Articles/26404/
7.
Linux内核的Block层 ? Linux内核的所有IO最后都走到submit_bio函数 图片来自 http://adrianhuang.blogspot.com/
8.
Linux内核的Block层 ? request_queue 图片来自 http://blog.csdn.net/fudan_abc/article/details/2034264
9.
Linux内核的Block层 ? IO调度器 ? cfq
(为每个进程准备一个队列) ? deadline (读请求、写请求两个队列) ? anticipatory (deadline的改进) ? noop
10.
课程大纲页 1. Linux内核的block层 2. Device
Mapper原理 3. 贵濒补蝉丑肠补肠丑别原理 4. 贵濒补蝉丑肠补肠丑别改造
11.
Device Mapper原理 ? 将两个(或多个设备)聚合成一个虚拟设备 图片来自
http://www.ningoo.net/
12.
Device Mapper原理 ? 线性聚合 ?
dmsetup create my_linear table.txt ? table.txt: 0 1048576 linear /dev/sda 0 1048576 2097152 linear /dev/sdb 0
13.
Device Mapper原理
14.
Device Mapper原理 ? striped聚合(RAID0) ?
dmsetup create my_stripe table.txt ? table.txt: 0 2097152 striped 2 32 /dev/sda 0 /dev/sdb 0
15.
Device Mapper原理
16.
课程大纲页 1. Linux内核的block层 2. Device
Mapper原理 3. 贵濒补蝉丑肠补肠丑别原理 4. 贵濒补蝉丑肠补肠丑别改造
17.
贵濒补蝉丑肠补肠丑别原理 ? Flashcache用device mapper框架实现
18.
贵濒补蝉丑肠补肠丑别原理 ? 直接处理传入虚拟设备的BIO ? 默认每8个sector(512Bytes)为一个block,每512个block为一 个set;
cache和disk都按此划分 ? set内的block由LRU链表管理 ? 非常简单的Hash算法:在disk上属于哪个set,直接模上cache 的set数
19.
贵濒补蝉丑肠补肠丑别原理
20.
贵濒补蝉丑肠补肠丑别原理 ? Writeback(回写)模式 – 写操作迅速完成(只写cache) –
利用work_queue(由keventd内核线程执行)把cache中的 dirty block写往disk
21.
贵濒补蝉丑肠补肠丑别原理 ? 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流)
22.
课程大纲页 1. Linux内核的block层 2. Device
Mapper原理 3. 贵濒补蝉丑肠补肠丑别原理 4. 贵濒补蝉丑肠补肠丑别改造
23.
贵濒补蝉丑肠补肠丑别改造 线上RDS平台(mysql hosting)需要按比例控制IO – 某些进程可以使用50%的IO带宽,某些只能用20% –
肠蹿辩调度器可以调整每个进程分配的时间片做到这一点
24.
贵濒补蝉丑肠补肠丑别改造 ? 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
25.
贵濒补蝉丑肠补肠丑别改造 ? 直接把flashcache的io scheduler改为cfq? Flashcache是BIO
based,根本不走io scheduler !
26.
贵濒补蝉丑肠补肠丑别改造 ? 直接在flashcache_map里调用__make_request? ? IRQ没有关闭,会报BUG_ON() ?
直接利用device mapper带的map_rq? ? 一个request可能会包含多个bio
27.
贵濒补蝉丑肠补肠丑别改造 ? 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; ...... }
28.
贵濒补蝉丑肠补肠丑别改造 ? 改造方法: – 在struct
target_type里添加mk_rq方法 – 实现map_rq – dm_io_async_bvec函数的改造:原先发出去的BIO现在改为放 入flashcache设备的request_queue里
29.
贵濒补蝉丑肠补肠丑别改造
30.
贵濒补蝉丑肠补肠丑别改造 按照每个进程的比例划分占用的cache空间 每个group一个LRU 可以从 cat /proc/flashcache/fioa3+fioa1/flashcache_blocks
里查看 每个group的名称、权重、已经使用了多少个block
31.
推荐学习资料 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
32.
Q & A Thanks!
Download