ThaiTux.info - cache https://www.thaitux.info/taxonomy/term/332 debian: ติดตั้ง flashcache https://www.thaitux.info/node/746 <div class="field field-name-body field-type-text-with-summary field-label-hidden"><div class="field-items"><div class="field-item even"><p>จะทดลองเพิ่มความเร็วฮาร์ดดิสก์ ลองซื้อ SSD ขนาด 60G มาตัวนึง เพื่อมาทำ cache</p> <p>ได้ทดสอบ <a href="http://bcache.evilpiepirate.org/">bcache</a> แต่ไปไม่รอด มันต้องการเคอร์เนลใหม่เกินไป ทำให้กระทบส่วนอื่น ๆ ของเครื่อง จึงได้หันมาหา <a href="https://github.com/facebook/flashcache/">flashcache</a></p> <h3>สมบัติเครื่อง</h3> <ul> <li>debian wheezy/sid linux-image-3.2.0-3-amd64</li> <li>ฮาร์ดดิสก์เก่า เป็น /dev/sda โดยเมานต์ /dev/sda6 เป็น /share และ /dev/sda8 เป็น /</li> <li>SSD ใหม่ เป็น /dev/sdb และเพื่อป้องกันปัญหาของระบบ จึงเลือกแบ่งพาร์ติชั่นดังนี้ <ul> <li>/dev/sdb5 ขนาด 16G คัดลอกมาจาก /dev/sda8</li> <li>/dev/sdb6 ขนาด 4G ทำ swap</li> <li>/dev/sdb7 ขนาด 40G ทำ cache ให้กับ /dev/sda6 (sda6 มี UUID="fcc7ad22-4bee-408b-998b-25351c89e7d4")</li> </ul> </li> </ul> <h3>วิธีการ</h3> <p>ติดตั้งแพคเก็จที่จำเป็น</p> <pre># <strong>aptitude install dkms build-essential linux-headers-`uname -r`</strong> </pre><p> ดาวน์โหลด flashcache และคอมไพล์</p> <pre># <strong>cd /usr/src</strong> # <strong>mkdir flashcache</strong> # <strong>cd flashcache</strong> # <strong>git clone https://github.com/facebook/flashcache.git</strong> # <strong>cd flashcache</strong> # <strong>make -f Makefile.dkms</strong> </pre><p> เตรียม /dev/sdb</p> <pre># <strong>fdisk -l /dev/sdb</strong> Disk /dev/sdb: 60.0 GB, 60022480896 bytes 81 heads, 63 sectors/track, 22973 cylinders, total 117231408 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x58997006 Device Boot Start End Blocks Id System /dev/sdb1 2048 117231407 58614680 5 Extended /dev/sdb5 4096 33558527 16777216 83 Linux /dev/sdb6 33560576 41949183 4194304 82 Linux swap / Solaris /dev/sdb7 41951232 117231407 37640088 83 Linux </pre><pre># <strong>mkfs.ext4 /dev/sdb5</strong> #(UUID="c1ba303d-bd4e-4473-9430-34d6b907bbdd") # <strong>mkfs.ext4 /dev/sdb7</strong> # <strong>mkswap /dev/sdb6</strong> </pre><p> ตรวจ uuid</p> <pre># <strong>blkid</strong> /dev/sda5: UUID="ab04b1bc-d1d2-4bdd-8fda-7e2755c35271" TYPE="ext4" /dev/sda6: UUID="fcc7ad22-4bee-408b-998b-25351c89e7d4" TYPE="ext4" /dev/sda7: UUID="eb268873-fcb5-4d5c-b826-59b5fa339079" TYPE="swap" /dev/sda8: UUID="15c9a8a3-0449-458c-9564-0daff370a0d2" TYPE="ext4" /dev/sdb5: UUID="c1ba303d-bd4e-4473-9430-34d6b907bbdd" TYPE="ext4" /dev/sdb6: UUID="6cada279-d335-429f-ad72-69442de1ee08" TYPE="swap" /dev/sdb7: UUID="f06896fe-b3be-43a1-9230-2433c683ee2e" TYPE="ext4" </pre><pre># <strong>mkdir /mnt/tmp{1,2}</strong> # <strong>mount /dev/sda8 /mnt/tmp1</strong> # <strong>mount /dev/sdb5 /mnt/tmp2</strong> # <strong>rsync -av --delete /mnt/tmp1/ /mnt/tmp2</strong> # <strong>vi /mnt/tmp2/etc/fstab</strong> </pre><pre>... <strong>#old /dev/sda8#</strong>UUID=15c9a8a3-0449-458c-9564-0daff370a0d2 / ext4 errors=remount-ro 0 <strong>UUID=c1ba303d-bd4e-4473-9430-34d6b907bbdd / ext4 errors=remount-ro 0</strong> ... </pre><pre># <strong>umount /mnt/tmp{1,2}</strong> # <strong>rm -rf /mnt/tmp{1,2}</strong> </pre></li> <h3>วิธีสร้าง cache device (/dev/sdb7 เป็น cache ให้ /dev/sda6)</h3> <p>รีบูตไปที่ /dev/sdb5 โดยบูตเป็นแบบ recovery เข้า grub แล้วกด c</p> <pre><strong>set root=(hd1,5) linux /boot/vmlinuz-3.2.0-3-amd64 root=UUID=c1ba303d-bd4e-4473-9430-34d6b907bbdd ro single initrd /boot/initrd.img-3.2.0-3-amd64 boot</strong></pre><p> ยกเลิกเมานต์ /dev/sda6</p> <pre># <strong>umount /dev/sda6</strong> </pre><p> ทำ /dev/sdb7 เป็น cache ให้ /dev/sda6 โดยทำให้เป็นแคชแบบ writeback</p> <pre># <strong>flashcache_create -p back cache_dev /dev/sdb7 /dev/disk/by-uuid/fcc7ad22-4bee-408b-998b-25351c89e7d4</strong> </pre><p>จะเกิด device ขึ้นมาอยู่ที่ /dev/mapper/cache_dev</p> <p>แก้ไข /etc/fstab ให้มาใช้ cache device</p> <pre># <strong>vi /etc/fstab</strong> </pre><pre>... #UUID=fcc7ad22-4bee-408b-998b-25351c89e7d4 /share ext4 defaults 0 2 <strong>/dev/mapper/cache_dev /share ext4 defaults 0 0</strong> ... </pre><p> รีบูต<br /> เสร็จแล้ว</p> <h3>วิธีลบ cache drive (กลับมาใช้ /dev/sda6 ดังเดิม)</h3> <p>รีบูตไปที่ /dev/sdb5 โดยบูตเป็นแบบ recovery<br /> ยกเลิกเมานต์ /dev/mapper/cache_dev</p> <pre># <strong>umount /dev/mapper/cache_dev</strong> </pre><p> ยกเลิก cache drive</p> <pre># <strong>flashcache_destroy /dev/sdb7</strong> </pre><p> ลบ cache drive</p> <pre># <strong>dmsetup remove cache_dev</strong> </pre><p> แก้ /etc/fstab ให้กลับไปใช้ /dev/sda6</p> <pre># <strong>vi /etc/fstab</strong> </pre><pre>... <strong>UUID=fcc7ad22-4bee-408b-998b-25351c89e7d4 /share ext4 defaults 0 2</strong> #/dev/mapper/cache_dev /share ext4 defaults 0 0 ... </pre><p> รีบูต</p> <h3>ผลทดลอง</h3> <ul> <li>เร็วขึ้นแบบรู้สึกได้</li> <li>เจอโหลด write back แบบหนักหน่วงแล้วอาจทำให้เครื่องหยุดได้</li> <li>พารามิเตอร์ <code>-p thru</code> ยังใช้ไม่ได้</li> </ul> <h3>ที่มา</h3> <ul> <li><a href="https://github.com/facebook/flashcache/">https://github.com/facebook/flashcache/</a></li> </ul> </div></div></div><div class="field field-name-taxonomy-vocabulary-1 field-type-taxonomy-term-reference field-label-above"><div class="field-label">Topic:&nbsp;</div><div class="field-items"><div class="field-item even"><a href="/taxonomy/term/332">cache</a></div><div class="field-item odd"><a href="/taxonomy/term/333">ssd</a></div></div></div> Fri, 17 Aug 2012 05:51:54 +0000 wd 746 at https://www.thaitux.info https://www.thaitux.info/node/746#comments