NVIDIA, AMD và Intel: Họ đã ảo hóa GPU như thế nào?

Hiện tại, 3 công ty này cạnh tranh với nhau trong thị trường ảo hóa GPU. Hãy tìm hiểu những tính năng chính giữa chúng và cách mà họ thực hiện việc ảo hóa GPU.

Điều gì tạo nên GPU?

Chúng ta đều biết, GPU sinh ra là để giải quyết vấn đề trình diễn hình ảnh, video 2D hoặc 3D lên màn hình. Càng có nhiều GPU, càng giải quyết dễ dàng. GPU càng nhanh, vấn đề càng giải quyết nhanh. Có thể nói, trình diễn là một tính năng quan trọng nhất của GPU.

Trình diễn không chỉ dành cho đồ họa. Và bạn đã từng nghe về GPGPU (General Purpose GPU – GPU mục đích chung. Ngoại trừ việc GPU đảm nhận các trình hỗ trợ đồ họa (như đổ bóng hoặc xử lý các dấu chấm chuyển động) nó còn có thể thực hiện nhiều phép tính toán tại cùng 1 thời điểm, còn gọi là tính toán song song. Hầu hết các nhà cung cấp đều hỗ trợ cả trên GPU vật lý hoặc GPU ảo (vGPU – virtual GPU).

Khi bạn nghe về CUDA hoặc OpenCL, điều đó có nghĩa là GPU thực hiện khả năng tính toán bằng GPGPU, được truy vấn thông qua các API lập trình song song CUDA hoặc OpendCL. Ngoài ra, GPU cũng bao gồm khả năng decode và endcodes video. Điều này phụ thuộc vào các ứng dụng hoặc media player bạn đang sử dụng có hỗ trợ tăng tốc phần cứng encoding/decoding, và GPU có đang hỗ trợ các CODEC đó hay không.

Ảo hóa GPU – Virtual GPU

Tổng quan, GPU ảo hóa thông qua 3 hình thức cơ bản: API Intercept, Virtualized GPU và Pass-through.

API Intercept

Đây là hình thức xuất hiện từ lâu, API Intercept, hoạt động ở cấp OpenGL và DirectX. Nó chặn các lệnh thông qua một API, gửi chúng tới GPU, sau đó đưa chúng trở lại và hiển thị kết quả cho người dùng. Vì tất cả được thực hiện trong phần mềm.
API Intercrept thường có hiệu suất tốt khi hoạt động nhưng không có khả năng tương thích tốt với các ứng dụng 3D. Hiện tại, nó là phương pháp duy nhất hỗ trợ vMotion.

Virtualized GPU

Đây là điểm nóng nhất trong ảo hóa máy tính để bàn (virtual desktop) hiện nay, hoàn toàn tương thích với hạ tầng siêu hội tụ. Với GPU ảo hóa (vGPU), người dùng có thể truy cập trực tiếp vào một phần của GPU. Điều này là thích hợp hơn với Intercept API vì hệ điều hành sử dụng được các trình điều khiển của AMD/ NVIDIA/ Intel. Điều này có nghĩa là các ứng dụng gọi thẳng xuống các GPU mà không cần đi qua các ứng dụng hoặc API nào khác.
GPU ảo hóa có hiệu suất tốt hơn so với API Intercept. Mặc dù nó cho phép các ứng dụng truy cập trực tiếp vào CPU, nhưng người dùng chỉ nhận được một phần của CPU, vì vậy nó vẫn có thể bị hạn chế trong một số tình huống nhất định. Điều đó nói rằng, khả năng tương thích ứng dụng là tốt, nhưng lại không hỗ trợ vMotion.

Pass-through

Trong trường hợp bộ nhớ đệm tồn tại lâu hơn so với vGPU, hãy kết nối các máy ảo trực tiếp với GPU. Nếu bạn có hai card trong server thì bạn nên kết nối hai máy ảo (VMs) với GPU. Điều này là rất tốt cho công việc cần phải tối ưu năng lực xử lý, vì VM có quyền truy cập vào tất cả các GPU và các tính năng của nó và khả năng tương thích với các ứng dụng. Có thể nói, Pass-through là lựa chọn tốt nhất tại thời điểm này.

Các loại GPU

Chúng tôi sẽ tập trung vào vGPU, vì đó là công nghệ GPU được áp dụng rộng rãi nhất cho ảo hóa. Hiện tại, có 3 hãng cung cấp GPU có khả năng ảo hóa: Intel (GVT-g), AMD (MxGPU) và NVIDIA (vGPU). Mỗi hãng có một thuật ngữ khác nhau, nhưng chúng thực sự chỉ là tên sản phẩm. Sự khác biệt nằm ở cơ chế ảo hóa GPU.RAM video

Mỗi VM đều được cung cấp VRAM, là một phần của RAM vật lý. Điểm khác biệt quan trọng trong cách xử lý của VRAM, nơi chứa bộ nhớ tạm thời cho mỗi VM, được tách biệt về mặt vật lý với nhau. Với MxGPU của AMD là 100% dựa trên phần cứng. Trong khi với NVIDIA và Intel, điều đó lại được thực hiện bởi phần mềm. Đây có lẽ không phải là vấn đề đối với hầu hết mọi người, nhưng có thể quan trọng trong các tình huống mà vấn đề bảo mật bộ nhớ tạm thời VRAM là một yêu cầu.

Shader Engines

AMD khác với những hãng khác trong cách nó cắt các cơ chế đổ bóng đồ họa. Với MxGPU của AMD, các máy ảo nhận được tài nguyên để xử lý từ một lớp chuyên dụng được tách ra từ GPU vật lý. Trong khi với Intel và NVIDIA, quy trình đó được xử lý bởi phần mềm.
Với Intel hoặc NVIDIA, nếu GPU không được sử dụng, nguồn lực này sẽ được giải phóng cho các VM khác. Với AMD, nếu GPU không được sử dụng, nguồn lực đó vẫn được giữ lại tại các VMs. Điều đó nói rằng, với NVIDIA và Intel, năng lực xử lý được tạo ra bởi phần mềm, nguồn lực của GPU được sử dụng triệt để cho đến khi hoàn tất công việc. Nhưng, điều này cũng có nghĩa là các ứng dụng hoạt động sai sẽ vẫn tiêu tốn năng lực của GPU, trong khi các VMs khác vẫn đang rất cần.

Encoding / Decoding Video

AMD không có khả năng encode/decode trong MxGPU. Intel và NVIDIA thì có thể, cả 2 đều cắt lát phần cứng để encoding/ decoding. Nhưng NVIDIA có lợi thế hơn Intel khi họ sử dụng cơ chế cắt lớp thời gian khác nhau cho mỗi tác vụ (shaders, encoding, decoding). Điều này giúp cho việc phân phối năng lực GPU trở nên linh hoạt hơn. Người dùng GPU để encode video sẽ không ảnh hưởng đến người dùng GPU để decoding video.

Tính toán GPU

AMD và Intel đều hỗ trợ OpenCL API thông qua các VMs, trong khi NVIDIA chỉ hỗ trợ các trường hợp sử dụng GPGPU chế độ Pass-through.

Trình ảo hóa – Hypervisors

Cả Intel và NVIDIA đều yêu cầu một trình quản lý phần mềm được cài đặt vào hypervisor. Đây không phải là vấn đề lớn vì cả hai GPU đều được chứng nhận chạy trên một số nền tảng nhất định. AMD sử dụng SR-IOV, về cơ bản có nghĩa là họ đã tích hợp sẵn để BIOS hiểu mà không cần cài đặt trình ảo hóa riêng.

AMD hiện chỉ được chứng nhận trên ESX, Intel hỗ trợ KVM và XenServer, NVIDIA hỗ trợ cả ESX và XenServer. Đáng chú ý, Hyper-V hiện chưa được hỗ trợ.