Bài đăng nổi bật

Redo log, undo log và binary log

Đây là ba loại log mà bạn đã từng nghe khi tiếp cận mysql. Trong các cơ sở dữ liệu quan hệ (RDBMS) khác, cũng sẽ có các thành phần có vai tr...

Chủ Nhật, 17 tháng 1, 2016

Virtualization

Lưu ý của người viết: Bài viết này hướng đến virtualization của vendor VMWare. Các vendor khác nhau sẽ có các kỹ thuật và hướng tiếp cận khác nhau.


Virtualization là gì


Động lực của virtualization: Là chia sẻ tài nguyên của một physical machine hiệu quả cho tất cả các user. Mỗi user sẽ có một environment độc lập. User này không thể nhìn thấy môi trường của user khác. User sẽ tưởng rằng nó đang hoàn toàn sở hữu physical machine. Nhưng thực ra nó chỉ thấy virtual machine mà nó được cấp.

Thử so với cách chia sẻ truyền thống, dùng share hosting, tất cả user trên cùng một machine nhưng không thể phân phối chi tiết đến mức bao nhiêu memory, bao nhiêu cpu, bao nhiêu disk… cho mỗi user được. Thêm nữa, sử dụng chroot và cấp phát mỗi host một user khác nhau cũng sẽ độc lập hóa môi trường các user nhưng hiệu năng không bằng và việc cấu hình lại phức tạp.

Virtualization là một lớp trừa tượng tất cả các tài nguyên của physical machine với user. Từ lớp trừu tượng, các tài nguyên cpu, memory, disk, network... có thể được cấp phát đến user. Lớp trừu tượng sẽ được map với physical resource.


Công nghệ ảo hóa không chỉ giới hạn trong compute mà còn vươn đến các lĩnh vực network và storage.

Sử dụng ý tưởng tương tự, toàn bộ chi tiết network, topology, các nối kết cable, vendor khác nhau bên dưới được che đi bởi một lớp ảo hóa. Toàn bộ hoạt động của network từ switching, routing đều được quản lý qua một network OS như NOX



Tương tự với storage, chúng ta cũng có các chi tiết storage bên dưới bị che đi bởi một lớp ảo hóa, toàn bộ hoạt động của storage được điều khiển qua HDFS, HBase…




Cơ chế hoạt động của cloud cũng dựa trên virtualization. Bằng việc ảo hóa các chi tiết bên dưới, cloud cung cấp cho chúng ta các service cần thiết như billing service, storage service, monitoring service…

Để phục vụ cho việc đi sâu vào cloud, đòi hỏi chúng ta phải hiểu về virtualization.


Kiến trúc ảo hóa


Virtualization có hai kiến trúc: Hosted architecture và hypervisor architecture.

Hosted architecture

Với kiến trúc hosted, lớp virtualization layer sẽ được cài đặt và chạy như một application trên OS. Ví dụ về các ảo hóa kiểu hosted như virtualbox, vmware server, vmware workstation...

Hypervisor architecture

Đây là kiến trúc thường sử dụng trong doanh nghiệp. Lớp virtualization được cài đặt và chạy ngay trên hardware của máy tính. Hypervisor architecture còn gọi là bare-metal architecture và hardware mà được cài đặt lớp ảo hóa trực tiếp còn gọi là bare hardware. Ví dụ về các ảo hóa kiểu hypervisor như vmware esxi.

Vì không phải deploy trên OS nên có thể thấy ngay là kiến trúc hypervisor thì hiệu năng, linh động, uyển chuyển hơn hẳn kiến trúc hosted.

Trong kiến trúc hypervisor, lớp ảo hóa là một software chịu trách nhiệm quản lý và host các VMM - Virtual Machine Monitor. Mỗi VMM sẽ implement một virtual machine (có đầy đủ các hardware như disk, memory, cpu…) và guest OS


Ảo hóa bao trùm ba thành phần chính của một physical machine: CPU virtualization, memory và device I/O.

CPU virtualization


Thách thức với x86 platform

Kiến trúc x86 định nghĩa ra 4 mức hoạt động, gọi là ring, từ ring 0, 1, 2 đến 3. Mỗi ring hiểu là một privileged level. OS luôn hoạt động ở ring 0 còn user level application hoạt động ở ring 3 nhưng trong kiến trúc ảo hóa, virtualization layer lại hoạt đông ở ring 0. Điều đáng ngại là một số chỉ thị của guest OS ( gọi là non-virtualizable instruction ) nếu không được thực hiện trong ring 0 thì sẽ không hoạt động được. Thách thức ở đây là bắt được các chỉ thị này và translate các chỉ thị này xuống hardware ngay trong khi hệ thống hoạt động. Để vượt qua thách thức này, vmware có đề xuất ba giải pháp: Full virtualization sử dụng binary translation, hardware assist virtualization và paravirtualization.


Giải pháp 1: Full, native virtualization với binary translation

Trong giải pháp này, các non virtualizable instruction từ guest OS được translate qua binary translation ở virtualization layer và cache lại kết quả dùng cho các lần sau. Còn user level application thì thực hiện direct execution xuyên qua virtualization layer. Bằng cách này, trở ngại các chỉ thị guest OS không hoạt động ở ring khác 0 bị vượt qua còn các user level application vẫn họat động ở native speed (tốc độ đáp ứng yêu cầu giống như khi không có ảo hóa). Guest OS hoàn toàn không nhận ra nó đang nằm trên một lớp ảo hóa vì các low-level request không có gì thay đổi. Do đó guestOS hoàn toàn không phải chỉnh sửa gì.


Giải pháp 2: Paravirtualization hay còn gọi là OS assisted virtualization

Trong paravirtualization, hypervisor sẽ cung cấp hypercall interface. Guest OS sẽ được chỉnh sửa kernel code để thay thế non-virtualizable instruction bằng các hypercall này. Do kernel code của guest OS phải chỉnh sửa nên giải pháp này không thể sử dụng được một số hệ điều hành mã nguồn đóng như windows. Thêm nữa, do guest OS sử dụng hypercall nên nó sẽ biết được nó đang nằm trên một virtualization layer.


Giải pháp 3: Hardware virtualization

Các giải pháp hỗ trợ ảo hóa của hardware vendor được công bố vào năm 2006 như VT-x của Intel hay AMD-v của AMD. Cả hai giải pháp này đều hướng đến việc xây dựng một CPU mode mới dành riêng cho virtualization layer gọi là root mode ( CPU mode -1). Bằng cách này, các OS request từ guest OS sẽ được tự động đi xuyên qua virtualization layer và cũng không cần kỹ thuật binary translation nữa do guest OS đã nằm ở ring 0. Trạng thái của guest OS sẽ được lưu trong Virtual machine control structure (VT-x) hoặc Virtual machine control block (AMD-v). Tuy rất hứa hẹn nhưng giải pháp này chưa tối ưu về code nên ứng dụng còn hạn chế. Hiện tại VMWare chỉ tận dụng hardware virtualization cho 64 bits guest OS.


So sánh các giải pháp

Xem bảng sau:


Memory virtualization


Làm cách nào chia sẻ physical memory và cấp phát động memory đến các virtual machine ? VMWare sử dụng cơ chế giống như virtual address trên OS. Trong các hệ điều hành ngày này, process sẽ truy cập đến physical address qua một virtual address. Virtual address này sẽ được map đến physical address qua một page table. CPU được thiết kế kèm một hardware unit gọi là MMU và một TLB để thực hiện công việc này.


MMU - Memory Management Unit, một mạch tích hợp nằm trong CPU hoặc có thể gắn ngoài đảm trách việc translate memory (virtual address sang physical address), memory protection, cache control

TLB - Translation Lookaside Buffer, một bộ nhớ cache để tăng hiệu quả translate memory.



Trong hình vẽ mô tả trên, virtual address sẽ được mapping vào physical address trong guest OS với sự trợ giúp của MMU virtualization. Nhưng guest OS sẽ không thể truy cập được vào machine memory. VMM sẽ giúp guest OS bằng cách map physical memory của guest vào machine memory. VMM cũng sử dụng TLB trên machine hardware để làm cache cho các translation physical address của guest OS vào machine memory.


Device I/O virtualization


Hypervisor sẽ áo hóa hardware để mô phỏng các thiết bị cho từng virtual machine.


Những virtual device như được trình bày trong hình vẽ sẽ translate các request xuống machine hardware. Lấy ví dụ networking, mỗi virtual machine sẽ có một số virtual NIC và virtual switch mà sẽ chia sẻ các physical NIC:



Tham khảo

https://communities.vmware.com/docs/DOC-8970
http://www.vmware.com/company/news/releases/64bit
https://www.vmware.com/files/pdf/VMware_paravirtualization.pdf
http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1003944
http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1008170
http://www.slideshare.net/Cameroon45/vmware-and-cpu-virtualization-technology

Không có nhận xét nào:

Đăng nhận xét