在Linux系统中将SSD当块设备缓存的方法
<p><strong>原理</strong></p><p> 写操作先缓存到ssd硬盘上,然后通过一定策略写到普通硬盘上;</p>
<p> 读操作热点数据可以缓存到ssd硬盘上,提高读取数据的速度。</p>
<p> </p>
<p>软件 ssd 缓存开源软件主要有bcache ,flashcache</p>
<p> </p>
<p>bcache 需要编译最新的内核,要求比较高,配置比较复杂,目前主要用于测试环境;</p>
<p>flashcache 是facebook内部使用的ssd cache软件,开源出来供大家使用,目前有人编译出rhel6的rpm包,在centos6上可以直接安装使用。</p>
<p> </p>
<p>本次初步测试了flashcache</p>
<p> </p>
<p>测试环境</p>
<p>sdc为 ssd 硬盘 160G*4 raid 10 用fio测试 4k 写iops为 5433</p>
<p>sdb为 普通sas硬盘 146G*2 raid 1 用fio测试 4k 写iops为 447</p>
<p> </p>
<p>初步简单测试结果:</p>
<p> 4k 随机写可以达到 5014</p>
<p> 4k随机读可以达到45874</p>
<p> </p>
<p><strong>flashcache 安装配置方法</strong></p>
<p><strong> </strong></p>
<p>安装</p>
<p><br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode162">rpm --import http://elrepo.org/RPM-GPG-KEY-elrepo.org</p>
<p>rpm -Uvh http://elrepo.org/elrepo-release-6-5.el6.elrepo.noarch.rpm</p>
<p>yum install flashcache-utils kmod-flashcache</div></p>
<p>配置:</p>
<p>用sdc 做sdb的缓存</p>
<p> <br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode163"></p>
<p>flashcache_create -p backcachedev /dev/sdc /dev/sdb </p>
<p>cachedev cachedev, ssd_devname /dev/sdc, disk_devname /dev/sdb cache mode WRITE_BACK</p>
<p>block_size 8, md_block_size 8, cache_size 0</p>
<p>Flashcache metadata will use 1192MB of your 24016MB main memory</div></p>
<p>可以用3种方式:</p>
<p><br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode164"></p>
<p>Writethrough - safest, all writes are cached to ssd but also written to disk</p>
<p>immediately.If your ssd has slower write performance than your disk (likely</p>
<p>for early generation SSDs purchased in 2008-2010), this may limit your system</p>
<p>write performance.All disk reads are cached (tunable). </div></p>
<p>数据同时写到ssd和普通硬盘</p>
<p> <br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode165"></p>
<p>Writearound - again, very safe, writes are not written to ssd but directly to</p>
<p>disk.Disk blocks will only be cached after they are read.All disk reads</p>
<p>are cached (tunable).</div></p>
<p>数据同时绕过ssd,直接写到普通硬盘</p>
<p><br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode166">Writeback - fastest but less safe.Writes only go to the ssd initially, and</p>
<p>based on various policies are written to disk later.All disk reads are</p>
<p>cached (tunable). </div></p>
<p>数据先写到ssd,随后写到普通硬盘</p>
<p>查看</p>
<p> flashstat</p>
<p>======================================================================================================</p>
<p>Flashstat: a tool for flashcache status per second</p>
<p>Author : NinGoo(seaman.ning@gmail.com)</p>
<p>Version : 0.3</p>
<p>======================================================================================================</p>
<p> SSD Device: /dev/sdc Disk Device: /dev/sdb Cache Mode: WRITE_BACK</p>
<p> Capacity: 303998M Block Size: 4K Meta Block Size: 4096b</p>
<p> Total Blocks: 77823488 Cached Blocks: 9 Cached Percent: 0</p>
<p> Set Numbers: 512 Dirty Blocks: 0 Dirty Percent: 0</p>
<p> cache_all: 1 reclaim_policy: FIFO dirty_thresh_pct: 20</p>
<p> max_clean_ios_set: 2 max_clean_ios_total: 4 skip_seq_thresh: 0K</p>
<p>======================================================================================================</p>
<p> time read/s write/s diskr/s diskw/s ssdr/s ssdw/s uread/s uwrit/s metaw/s clean/s repl/s wrepl/s hit% whit% dwhit%</p>
<p>03-13 14:51:20 0 0 0 0 0 0 0 0 0 0 0 0 0|10 0|0 0|0 </p>
<p><br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode167">fdisk -l /dev/mapper/cachedev</div> 可以看到一个设备</p>
<p> </p>
<p>Disk /dev/mapper/cachedev: 146.8 GB, 146778685440 bytes</p>
<p>255 heads, 63 sectors/track, 17844 cylinders</p>
<p>Units = cylinders of 16065 * 512 = 8225280 bytes</p>
<p>Sector size (logical/physical): 512 bytes / 512 bytes</p>
<p>I/O size (minimum/optimal): 512 bytes / 512 bytes</p>
<p>Disk identifier: 0x0002da0a</p>
<p> </p>
<p> Device Boot Start End Blocks Id System</p>
<p> </p>
<p>使用:</p>
<p> </p>
<p>可以当一个块设备来使用,划分vg lv</p>
<p> <br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode168"></p>
<p> pvcreate /dev/mapper/cachedev</p>
<p>Physical volume "/dev/mapper/cachedev" successfully created</p>
<p> vgcreate ssdcachetest /dev/mapper/cachedev</p>
<p>Volume group "ssdcachetest" successfully created</p>
<p> lvcreate -L 100G -n ssdcache_test_lv1 ssdcachetest</p>
<p>Logical volume "ssdcache_test_lv1" created</div></p>
<p>删除</p>
<p><br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode169">dmsetupremove cachedev</p>
<p>flashcache_destroy /dev/sdc</div><br /></p>
頁:
[1]