ติดตั้ง flashcache

จะทดลองเพิ่มความเร็วฮาร์ดดิสก์ ลองซื้อ SSD ขนาด 60G มาตัวนึง เพื่อมาทำแคช

ได้ทดสอบ bcache แต่ไปไม่รอด มันต้องการเคอร์เนลใหม่เกินไป ทำให้กระทบส่วนอื่น ๆ ของเครื่อง จึงได้หันมาหา flashcache

คุณสมบัติของเครื่อง

  • debian wheezy/sid linux-image-3.2.0-3-amd64
  • ฮาร์ดดิสก์เก่า เป็น /dev/sda โดยเมานต์ /dev/sda6 เป็น /share และ /dev/sda8 เป็น /
  • SSD ใหม่ เป็น /dev/sdb และเพื่อป้องกันปัญหาของระบบ จึงเลือกแบ่งพาร์ทิชันดังนี้
    • /dev/sdb5 ขนาด 16G คัดลอกมาจาก /dev/sda8
    • /dev/sdb6 ขนาด 4G ทำ swap
    • /dev/sdb7 ขนาด 40G ทำ cache ให้กับ /dev/sda6 (sda6 มี UUID="fcc7ad22-4bee-408b-998b-25351c89e7d4")

วิธีการ

ติดตั้งแพกเกจที่จำเป็น

# aptitude install dkms build-essential linux-headers-`uname -r`

ดาวน์โหลด flashcache และคอมไพล์

# cd /usr/src
# mkdir flashcache
# cd flashcache
# git clone https://github.com/facebook/flashcache.git
# cd flashcache
# make -f Makefile.dkms

เตรียม /dev/sdb

# fdisk -l /dev/sdb
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
# mkfs.ext4 /dev/sdb5	#(UUID="c1ba303d-bd4e-4473-9430-34d6b907bbdd")
# mkfs.ext4 /dev/sdb7
# mkswap /dev/sdb6

ตรวจสอบ uuid

# blkid
/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" 
# mkdir /mnt/tmp{1,2}
# mount /dev/sda8 /mnt/tmp1
# mount /dev/sdb5 /mnt/tmp2
# rsync -av --delete /mnt/tmp1/ /mnt/tmp2
# vi /mnt/tmp2/etc/fstab
...
#old /dev/sda8#UUID=15c9a8a3-0449-458c-9564-0daff370a0d2       /               ext4    errors=remount-ro 0    
UUID=c1ba303d-bd4e-4473-9430-34d6b907bbdd       /               ext4    errors=remount-ro 0
...
# umount /mnt/tmp{1,2}
# rm -rf /mnt/tmp{1,2}

วิธีสร้าง cache device (/dev/sdb7 เป็น cache ให้ /dev/sda6)

รีบูตไปที่ /dev/sdb5 โดยบูตเป็นแบบ recovery เข้า grub แล้วกด c

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

ยกเลิกเมานต์ /dev/sda6

# umount /dev/sda6

ทำ /dev/sdb7 เป็นแคชให้ /dev/sda6 โดยทำให้เป็นแคชแบบ writeback

# flashcache_create -p back cache_dev /dev/sdb7 /dev/disk/by-uuid/fcc7ad22-4bee-408b-998b-25351c89e7d4

จะเกิด device ขึ้นมาอยู่ที่ /dev/mapper/cache_dev

แก้ไข /etc/fstab ให้มาใช้ cache device

# vi /etc/fstab
...
#UUID=fcc7ad22-4bee-408b-998b-25351c89e7d4       /share          ext4    defaults        0       2
/dev/mapper/cache_dev       /share          ext4    defaults        0       0
...

รีบูต
เสร็จแล้ว

วิธีลบ cache drive (กลับมาใช้ /dev/sda6 ดังเดิม)

รีบูตไปที่ /dev/sdb5 โดยบูตเป็นแบบ recovery
ยกเลิกเมานต์ /dev/mapper/cache_dev

# umount /dev/mapper/cache_dev

ยกเลิก cache drive

# flashcache_destroy /dev/sdb7

ลบ cache drive

# dmsetup remove cache_dev

แก้ /etc/fstab ให้กลับไปใช้ /dev/sda6

# vi /etc/fstab
...
UUID=fcc7ad22-4bee-408b-998b-25351c89e7d4       /share          ext4    defaults        0       2
#/dev/mapper/cache_dev       /share          ext4    defaults        0       0
...

รีบูต

ผลการทดลอง

  • เร็วขึ้นแบบรู้สึกได้
  • เจอโหลด write back แบบหนักหน่วงแล้วอาจทำให้เครื่องหยุดได้
  • พารามิเตอร์ -p thru ยังใช้ไม่ได้

ที่มา

Topic: 
Creative Commons License ลิขสิทธิ์ของบทความเป็นของเจ้าของบทความแต่ละชิ้น
ผลงานนี้ ใช้สัญญาอนุญาตของครีเอทีฟคอมมอนส์แบบ แสดงที่มา-อนุญาตแบบเดียวกัน 3.0 ที่ยังไม่ได้ปรับแก้