Bứt tốc máy ảo VMware: Chuyển sang Virtual NVMe để giải phóng sức mạnh SSD

VMware tutorial - IT technology blog
VMware tutorial - IT technology blog

Cơn ác mộng Disk Latency lúc 2 giờ sáng

2 giờ sáng, điện thoại rung bần bật. Hệ thống monitoring Zabbix báo cảnh báo đỏ: Disk I/O Latency trên con Database server chạm ngưỡng 500ms. Một con số không tưởng vì dàn server vật lý bên dưới đang chạy toàn ổ Samsung PM1733 NVMe Enterprise.

Sau khi SSH kiểm tra, mình phát hiện máy ảo (VM) vẫn đang dùng controller LSI Logic SAS. Đây là thiết lập mặc định từ thời VMware đời cũ để giữ tính tương thích. Với các ứng dụng hiện đại, cái “nút thắt cổ chai” này đang bóp nghẹt hiệu năng phần cứng SSD của bạn.

Việc chuyển sang Virtual NVMe (vNVMe) là cách nhanh nhất để tận dụng sức mạnh SSD vật lý. Bạn sẽ thấy tốc độ cải thiện rõ rệt mà không tốn một xu mua thêm linh kiện.

Tại sao LSI Logic SAS hay SATA không còn đủ tốt?

Thói quen nhấn “Next” liên tục khi tạo VM khiến bạn vô tình kẹt lại với các chuẩn cũ. Vấn đề nằm ở giới hạn công nghệ:

  • LSI Logic SAS: Thiết kế cho ổ đĩa cơ (HDD). Nó tạo ra độ trễ phần mềm (software overhead) rất lớn khi xử lý dữ liệu.
  • SATA: Giới hạn hàng đợi lệnh (Queue Depth) chỉ dừng lại ở con số 32.
  • Virtual NVMe: Hỗ trợ tới 64k hàng đợi. Mỗi hàng đợi xử lý được 64k lệnh cùng lúc. Nó giúp giảm số lượng chu kỳ CPU cần thiết để xử lý mỗi tác vụ I/O.

Nếu dùng SSD NVMe thật nhưng lại giả lập SCSI bên trên, bạn đang lãng phí khoảng 20-30% hiệu năng thực tế. Ví dụ, một ổ NVMe có thể đạt 500,000 IOPS nhưng qua controller cũ chỉ còn khoảng 350,000 IOPS.

Điều kiện cần để nâng cấp vNVMe

Đừng vội vàng thay đổi ngay. Hãy kiểm tra danh sách dưới đây để tránh lỗi màn hình xanh (BSOD):

  1. Hardware Version: Máy ảo phải đạt version 13 trở lên. Cấu hình này tương đương ESXi 6.5 hoặc VMware Workstation 14.
  2. Hệ điều hành: Windows 8.1 hoặc Windows Server 2012 R2 trở lên. Với Linux, nhân Kernel cần từ bản 3.3 (Ubuntu 20.04+, CentOS 7+ đều hỗ trợ tốt).
  3. Backup: Hãy Snapshot máy ảo trước khi thực hiện. Đừng để sai sót nhỏ biến đêm trực thành thảm họa cài lại hệ điều hành.

Cách chuyển đổi an toàn cho Windows

Nếu đổi trực tiếp Controller trong Settings, Windows sẽ bị lỗi “Inaccessible Boot Device”. Hệ thống chưa nạp driver NVMe vào tiến trình khởi động. Hãy dùng mẹo “mồi” driver sau đây.

Bước 1: Thêm ổ đĩa NVMe giả lập

  1. Tắt máy ảo hoàn toàn.
  2. Vào Edit Settings, thêm thiết bị mới là NVMe Controller.
  3. Thêm một ổ cứng mới (Hard Disk) dung lượng 1GB. Gán ổ này vào controller NVMe vừa tạo.
  4. Khởi động Windows bình thường.

Bước 2: Nạp Driver vào hệ thống

Khi vào desktop, Windows sẽ tự nhận diện phần cứng mới. Bạn mở Device Manager để kiểm tra. Nếu thấy “Standard NVM Express Controller” xuất hiện trong mục Storage controllers là thành công.

Bước 3: Chuyển đổi ổ đĩa hệ điều hành

  1. Tắt máy ảo. Xóa bỏ ổ đĩa 1GB và NVMe Controller tạm ở bước 1.
  2. Chọn ổ đĩa chính (Hard Disk 1). Đổi Virtual Device Node từ SCSI sang NVMe (0:0).
  3. VMware sẽ tự động kích hoạt lại controller NVMe cho ổ boot.
  4. Bật máy và kiểm tra tốc độ khởi động.

Triển khai trên Linux (Ubuntu/CentOS/Debian)

Linux xử lý driver NVMe linh hoạt hơn vì chúng thường nằm sẵn trong nhân. Tuy nhiên, bạn cần đảm bảo driver có mặt trong initramfs để tránh lỗi mount ổ đĩa.

Kiểm tra hỗ trợ NVMe bằng lệnh:

grep -i nvme /boot/config-$(uname -r)

Nếu kết quả trả về CONFIG_NVME_CORE=y, bạn đã sẵn sàng. Hãy nạp module vào quá trình boot:

# Cho Ubuntu/Debian
echo "nvme" | sudo tee -a /etc/initramfs-tools/modules
sudo update-initramfs -u

# Cho CentOS/RHEL
sudo dracut --force --add-drivers nvme

Lưu ý quan trọng: Tên ổ đĩa sẽ đổi từ /dev/sda sang /dev/nvme0n1. Bạn nên sử dụng UUID trong file /etc/fstab để hệ thống không bị treo khi khởi động lại.

Hiệu quả thực tế sau khi tối ưu

Mình đã đo đạc lại bằng fioCrystalDiskMark sau khi chuyển đổi. Các chỉ số thay đổi rất tích cực:

  • Độ trễ (Latency): Giảm trung bình 15%. Các tác vụ ghi log Database phản hồi nhanh hơn hẳn.
  • Random Read/Write (4K): Tăng khoảng 20% nhờ tận dụng hàng đợi lệnh lớn.
  • CPU Overhead: Giảm tải cho CPU máy chủ khi xử lý các luồng dữ liệu nặng.

Thử nghiệm nhanh trên Linux với lệnh fio:

fio --name=test --ioengine=libaio --rw=randwrite --bs=4k --size=1g --iodepth=32 --runtime=60 --direct=1

Lời kết

Tối ưu máy ảo không chỉ là tăng thêm RAM hay CPU. Đôi khi, thay đổi nhỏ ở Controller ổ đĩa lại mang về hiệu quả vượt mong đợi. Nếu bạn đang sở hữu hạ tầng SSD xịn, đừng để nó phải chạy với cái “phanh tay” mang tên LSI Logic. Chúc các bạn có những hệ thống mượt mà và những đêm trực bình yên!

Share: