Bài viết này được viết dựa trên tổng hợp nhiều công nghệ, không nghiên cứu sâu vào một phương pháp tiếp cận hoặc một ứng dụng cụ thể nhưng có giải thích về các thuật ngữ, nếu có kiến thức nào sai vui lòng cung cấp để hoàn thiện bài viết.
Trong phần trước, mình đã giới thiệu về Virtual Machine (VM) và Hypervisor. Trong phần này mình sẽ nói về CPU virtualization và Memory Managment.
- vCPU (virtual CPU) là một khái niệm trong ảo hóa dùng để phân bổ tài nguyên. Khi máy ảo (VM) đang chạy, các vCPU thực chất được ánh xạ tới các lõi CPU thực, nơi mà cơ chế ảo hóa phân bổ khả năng xử lý CPU thực cho các VM theo yêu cầu.
- Thông thường, các nền tảng ảo hóa cố gắng đạt được sự phân phối tải công việc sao cho tất cả các máy khách có được tài nguyên cần thiết khi cần. Trong trường hợp này 1 vCPU (được gán cho một máy khách hoặc máy chủ ảo) tương đương với 1 lõi CPU trong hypervisor.
- Tuy nhiên, trong nhiều trường hợp, không phải tất cả các VM đều hoạt động với tải CPU tối đa cùng lúc hoặc liên tục. Điều này cho phép phân bổ một mức độ nhất định, tức là có thể gán nhiều vCPU cho các máy ảo hơn so với số lượng lõi thực tế trong hypervisor.
Năm 2024, công nghệ ảo hóa doanh nghiệp phát triển mạnh với các bộ vi xử lý mới của Intel và AMD.
Mỗi VM được phân bổ một lượng RAM cụ thể từ bộ nhớ vật lý khi nó được tạo ra. Lượng RAM này được giữ cố định trong suốt quá trình hoạt động của VM, ngay cả khi VM không sử dụng hết dung lượng đó. (Cái này đơn giản quá cho nên mình không gắn tài liệu)
Hypervisor có thể điều chỉnh lượng RAM được phân bổ cho VM dựa trên nhu cầu sử dụng thực tế. Ví dụ, trong trường hợp VM không sử dụng hết dung lượng bộ nhớ đã phân bổ, hypervisor có thể giải phóng bộ nhớ này để cung cấp cho các VM khác hoặc hệ thống chủ.( Hyper-V Dynamic Memory Overview | Microsoft Learn)
Trong phần trước, mình đã giới thiệu về Virtual Machine (VM) và Hypervisor. Trong phần này mình sẽ nói về CPU virtualization và Memory Managment.
III. CPU Virtualization
1. vCPU là gì?
- vCPU (virtual CPU) là một khái niệm trong ảo hóa dùng để phân bổ tài nguyên. Khi máy ảo (VM) đang chạy, các vCPU thực chất được ánh xạ tới các lõi CPU thực, nơi mà cơ chế ảo hóa phân bổ khả năng xử lý CPU thực cho các VM theo yêu cầu.
2. Vấn đề và giải pháp với vCPU
- Thông thường, các nền tảng ảo hóa cố gắng đạt được sự phân phối tải công việc sao cho tất cả các máy khách có được tài nguyên cần thiết khi cần. Trong trường hợp này 1 vCPU (được gán cho một máy khách hoặc máy chủ ảo) tương đương với 1 lõi CPU trong hypervisor.
- Tuy nhiên, trong nhiều trường hợp, không phải tất cả các VM đều hoạt động với tải CPU tối đa cùng lúc hoặc liên tục. Điều này cho phép phân bổ một mức độ nhất định, tức là có thể gán nhiều vCPU cho các máy ảo hơn so với số lượng lõi thực tế trong hypervisor.
- Khi điều này hoạt động đúng cách, 1 vCPU vẫn tương đương với 1 lõi CPU trong hypervisor khi đó là lượng tài nguyên mà VM cần.
- Khi điều này không hoạt động đúng và hypervisor bị quá tải nghiêm trọng, sẽ có tranh chấp tài nguyên (CPU contention), đôi khi gọi là "thời gian đánh cắp CPU" (CPU steal time), và phần mềm ảo hóa sẽ can thiệp. Khi đó, thay vì nhận được toàn bộ khả năng xử lý của một lõi, VM sẽ nhận ít tài nguyên hơn cho mỗi vCPU so với một lõi hoàn chỉnh.
- Co-stop Contention: Đây là hiện tượng xảy ra khi các máy ảo có nhiều vCPU (virtual CPU) phải đợi để đồng bộ hóa và sử dụng cùng một lúc các lõi vật lý trên máy chủ. Điều này có thể gây chậm trễ nếu hệ thống không thể phân phối đủ lõi vật lý cho tất cả các vCPU cùng lúc. Giải pháp là giảm số lượng vCPU cho mỗi máy ảo nếu không cần thiết(Support Portal)(Know IT Like Pro).
- CPU Ready Time: Đây là thời gian mà máy ảo sẵn sàng thực hiện tác vụ nhưng phải đợi vì CPU vật lý đang bị quá tải. Khi thời gian này quá cao, hiệu suất của máy ảo sẽ bị giảm sút nghiêm trọng. Các công cụ như ESXTOP có thể được sử dụng để theo dõi và điều chỉnh tài nguyên CPU, giúp giảm thời gian chờ(Mihai MATEI)(Know IT Like Pro).
- Power Management Settings: Một số hệ điều hành hoặc phần mềm ảo hóa có thể không sử dụng hiệu quả tất cả các lõi hiệu suất (P-Cores) mà thay vào đó sử dụng lõi tiết kiệm năng lượng (E-Cores), dẫn đến hiệu suất không ổn định. Điều chỉnh các tùy chọn quản lý năng lượng và vô hiệu hóa các tính năng không cần thiết như Hyper-V có thể giúp cải thiện tốc độ của VM(Broadcom Community).
- Over-Provisioning: Phân bổ quá nhiều tài nguyên vCPU cho máy ảo có thể làm giảm hiệu suất tổng thể, đặc biệt là khi hệ thống phải xử lý nhiều máy ảo cùng lúc. Thay vì gán nhiều vCPU cho mỗi VM, bạn nên bắt đầu với số lượng nhỏ và tăng dần nếu cần thiết(Mihai MATEI).
3. Chọn CPU nào cho ảo hóa?
Năm 2024, công nghệ ảo hóa doanh nghiệp phát triển mạnh với các bộ vi xử lý mới của Intel và AMD.
- Intel ra mắt các chip Xeon Sierra Forest và Granite Rapids:
- Sierra Forest có kiến trúc "e-core", hỗ trợ tới 288 lõi, phù hợp cho số lượng lớn máy ảo.
- Granite Rapids tập trung vào hiệu suất cao với kiến trúc mô-đun.
- AMD ra mắt bộ vi xử lý Epyc Zen 5 với số lượng lõi cao hơn, phù hợp cho công việc đa luồng và nhiều máy ảo.
- Cả hai hỗ trợ các công nghệ ảo hóa quan trọng như Intel VT-x và AMD-V.
- Những tiến bộ này giúp cải thiện hiệu suất, bảo mật, và tính linh hoạt cho các trung tâm dữ liệu.
IV. Memory Management in Virtual Machines
1. Phân bổ bộ nhớ tĩnh
Mỗi VM được phân bổ một lượng RAM cụ thể từ bộ nhớ vật lý khi nó được tạo ra. Lượng RAM này được giữ cố định trong suốt quá trình hoạt động của VM, ngay cả khi VM không sử dụng hết dung lượng đó. (Cái này đơn giản quá cho nên mình không gắn tài liệu)
2. Phân bổ bộ nhớ động
Hypervisor có thể điều chỉnh lượng RAM được phân bổ cho VM dựa trên nhu cầu sử dụng thực tế. Ví dụ, trong trường hợp VM không sử dụng hết dung lượng bộ nhớ đã phân bổ, hypervisor có thể giải phóng bộ nhớ này để cung cấp cho các VM khác hoặc hệ thống chủ.( Hyper-V Dynamic Memory Overview | Microsoft Learn)
3. Kỹ thuật tối ưu RAM: Memory Sharing, Overcommitment, TPS, Ballooning, Swapping
- Kỹ thuật chia sẻ bộ nhớ (Memory Sharing): Hypervisor có thể nhận diện và chia sẻ bộ nhớ giống nhau giữa các VM thường là sử dụng TPS. Điều này có thể xảy ra khi các VM chạy các hệ điều hành hoặc ứng dụng tương tự, giúp giảm lượng RAM vật lý cần thiết. VMware có hỗ trợ kĩ thuật này trên esxi (Memory Sharing (vmware.com)).
- Bộ nhớ ảo hóa (Memory Overcommitment): Hypervisor có thể cho phép tổng lượng RAM phân bổ cho tất cả các VM lớn hơn bộ nhớ vật lý thực tế của hệ thống chủ. Kỹ thuật này tận dụng các khoảng thời gian mà các VM không sử dụng hết bộ nhớ được phân bổ, từ đó tối ưu hóa hiệu quả sử dụng tài nguyên.( điều này có thể dẫn đến việc sử dụng ổ đĩa làm bộ nhớ ảo khi cần, làm chậm hệ thống do sự phụ thuộc vào tốc độ của bộ lưu trữ). Memory Overcommitment (vmware.com).
- Transparent Page Sharing (TPS): phương pháp cho phép chia sẻ các trang bộ nhớ giống nhau giữa các máy ảo. Nếu nhiều VM chạy cùng một hệ điều hành hoặc phần mềm, các trang bộ nhớ giống nhau có thể được chia sẻ, giảm thiểu việc sử dụng bộ nhớ vật lý. TPS tự động phát hiện các trang giống nhau và chia sẻ chúng. CloudHealth Secure State Docs (vmware.com)
- Ballooning: Đây là một cơ chế mà hypervisor sử dụng để điều chỉnh động lượng RAM của các VM. Khi một VM cần thêm bộ nhớ, hypervisor có thể tạm thời lấy RAM từ các VM khác đang không sử dụng hết tài nguyên của mình, mà không cần phải truy cập bộ nhớ vật lý mới từ hệ thống chủ. Memory ballooning - Wikipedia