ว่าด้วยเรื่อง KVM (KERNEL-BASE VIRTUAL MACHINE)

ว่าด้วยเรื่อง KVM (KERNEL-BASE VIRTUAL MACHINE)

 

หลายๆคนคงพอจะรู้จักกับ Virtualization หรือ ระบบคอมพิวเตอร์เสมือนกันมาบ้างแล้วและ KVM ก็เป็น 1 ในซอฟแวร์ที่ทำหน้าที่เป็น virtual machine เช่นเดียวกับ VMWare , VirtualBox ซึ่งจะแตกต่างก็คือ KVM นั้นทำงานอยู่ในระดับ Kernel เช่นเดียวกับ XEN นั่นเองและในปัจจุบันทาง Redhat เองก็ได้ใช้ KVM เป็นตัวหลักในการทำ virtualization อีกด้วย

 

การแบ่งประเภทของ VIRTUALIZATION

การสร้างระบบ Virtualization ได้กำหนดชื่อเรียกตัว software ที่ทำหน้าที่ virtual ว่า Hypervisor หรือVirtual Machine Manager (VMM) ได้มีการแบ่ง hypervisor ออกเป็น 2 ประเภทคือ

  • Type 1 – native หรือ bare metal คือ การที่ hypervisor ถูกติดตั้งลงไปใต้ OS ตัวอย่างผลิตภัณฑ์ในรูปแบบนี้ คือ VMware ESX, Citrix Xen Server และ Microsoft Hyper-V แบบนี้จำง่ายคือ ลง Hypervisor ไปแล้วจะไม่มีการติดตั้ง Application ใดๆ บน hypervisor (แม้ว่า Hyper-V จะทำได้แต่เป็นสิ่งที่ไม่ควรทำ ควรไปสร้าง quest แล้วลง software ใน guest)
  • Type 2 – hosted คือ การที่ hypervisor ทำงานเหมือน application บน OS ตัวอย่าง ผลิตภัณฑ์ได้แก่ VMware workstation, Microsoft virtual PC และ Oracle Virtual Box เป็นต้น แบบนี้จำง่ายคือ เมื่อได้ hardware มาแล้วก็ลง OS เช่น Windows แล้วลง virtual ในฐานะเป็น application ตัวหนึ่งเช่นเดียวกับการลง Microsoft Office

ประเภทเทคนิคของการสร้าง VIRTUALIZATION

  • Full Virtualization คือ เทคนิคการทำ virtualization ที่ guest machine เห็นอุปกรณ์ทุกอย่างจำลอง ทั้งหมด เมื่อ guest ที่ต้องติดต่อกับ hardware ตัว virtualization จะต้องทำ binary translation โดย VMM จะดัก hardware call จาก guest OS และแปลงคำสั่งนั้นให้อยู่ในรูปแบบที่ Host OS ทำงานได้ การแปลงนี้ต้องใช้ทรัพยาการมาก ทำให้เครื่องทำงานช้าลงและลดประสิทธิภาพของเครื่อง
  • Paravirtualization คือ เทคนิคที่ใช้เพิ่มประสิทธิภาพให้กับ virtualization ในส่วนที่ guest machine เคยต้องจำลองอุปกรณ์ต่างๆ เมื่อทำงานบน virtual นั้น การออกแบบ paravitualization ได้ตัดการแปลงคำสั่งเหล่านี้ออกไปและไปสร้างเป็น software interface บน VMM ในรูปแบบของ driver และเครื่องมือต่างๆ มาแทน

    Paravirtualization ต้องการ CPU ที่สนับสนุนด้วยนั่นคือ Intel-VT หรือ AMD-V หน้าที่ตรงนี้ได้แก่ เรื่องของการจัดสรร Memory ของ Server ที่จำนวน RAM มากๆ ที่มีตำแหน่งกระจายไปทั่วๆ แต่ต้องทำให้ guest เห็นว่าเป็นผืนที่มีตำแหน่งเรียงกันเราเรียกส่วนนี้ว่า hardware page table virtualizationเนื่องจาก quest OS ไม่สามารถไปจัดสรร physical memory จริงๆ ได้ จึงต้องอาศัย VMM ที่ดูแลการใช้ memory จาก quest หลายๆ ตัว ในเวลาเดียวกันได้ ส่วนนี้มีชื่อเรียกว่า Intel Extended Page Table (EPT) หรือ AMD Nested Page Table (NPT)

KERNEL-BASE VIRTUAL MACHINE (KVM)

ผู้สร้าง KVM มีชื่อว่า Avi Kivity และ Morcelo Tosatti ได้สร้าง KVM ขึ้นมาเพื่อทำ virtualization type – 1 และเป็น Paravirtualization (Intel VT, AMD-V) บน Linux ตัว guest OS ที่สร้างบน KVM ได้แก่ Windows และ Linux เป็นหลัก ได้มีผู้ port KVM ไปใช้บนเครื่อง PowerPC, IA/64 และเครื่องที่ใช้ CPU จำนวน ARM เป็นต้น

 

 

เพื่อความง่ายแก่การเข้าใจขออธิบายตามรูปภาพด้านบน KVM ถูกสร้างเป็น device ตัวหนึ่งบน Linux อยู่ใน Kernel มีการเรียกใช้งานผ่าน /dev/kvm ในตัว guest ก็มี QEMU ที่ทำหน้าที่เป็น emulator ไปติดต่อกับ KVM ใน Kernel เมื่อเทียบกับ KVM กับ VMware หรือ Hyper-V จะความแตกต่างที่ว่าเครื่องที่มี KVM ผู้ใช้งานยังใช้งานอื่นๆได้เพราะการทำ KVM ไปไว้ใน kernel ที่ใช้งานร่วมกับ OS ตามปกติแล้วมี Normal user process ใช้งานไปด้วย คงต้องศึกษาเรื่อง security best practice กันต่อไปว่ามีการแบ่งแยก process กันอย่างไรต่อไป

การออกแบบ KVM ที่เป็นเพียงเป็นการขยายความสามารถด้าน Virtualization ให้ Linux ก็ยังมีประเด็นให้ผู้สนใจมีความเห็นไม่ตรงกันว่า KVM เป็น Hypervisor Type-1 หรือ  Type-2 เนื่องจาก KVM ได้ถูกนำไปเปรียบเทียบกับ Hypervisor ที่มีมาก่อนหน้านี้ที่สร้าง Kernel ขึ้นมาใหม่เพื่อเป็น Hypervisor แล้ว OS ที่ใช้บริหารระบบจะเป็น Guest บนนั้น ลองติดตามอ่านได้ที่

KVM ปะทะ Xen

ขอบอกก่อนว่า KVM ไม่ได้เป็นสายของ Xen ถ้าคนไม่คุ้น Linux การกำเนิดของ Xen นั้น ได้มีการสร้าง Kernel ขึ้นมาโดยเฉพาะ (purpose built) ติดตั้งระดับต่ำสุด แล้วมี Linux อยู่เหนือกว่า แต่จากภาพด้านลบนได้แสดงให้เป็นชัดเจนว่า KVM ใช้ Kernel ของ Linux ตามปกติ มีผู้เขียนบทความบน ZDNet ได้ลงบทสัมภาษณ์ Ian Pratt – Xen cofounder ได้กล่าวว่า “KVM ไม่ใช่ hypervisor อย่างแท้จริง แต่เป็นเพียงการเพิ่มความสามารถด้าน virtualization ลงใน Linux, KVM จึงเหมาะกับ desktop หรือการใช้งานอื่นๆ แต่ไม่ใช้งานที่ต้องการ high-end virtualization” นอกจากนี้ Ian ยังกล่าวย้ำว่า “เป็นความจำเป็นสำหรับ server ที่ต้องใช้ Hypervisor ที่ออกมาสำหรับโดยเฉพาะจริงๆ” ที่มา (http://www.zdnet.com/blog/virtualization/kvm-and-xen-cofounders-engage-in-war-of-words/415)

 

 

ข้อมูลเพิ่มเติม
http://www.linux-kvm.org/page/Main_Page
http://vm360degree.com/2011/09/24/2011-red-hat-forum-%E0%B8%95%E0%B8%AD%E0%B8%99%E0%B8%97%E0%B8%B5%E0%B9%88-1-%E2%80%93-kvm-kernel-base-virtual-machine-%E0%B8%84%E0%B8%B7%E0%B8%AD-%E0%B8%AD%E0%B8%B0%E0%B9%84%E0%B8%A3/