Computer >> Hướng Dẫn Máy Tính >  >> Phần Mềm >> Máy Ảo

Bật tăng tốc 3D trong máy ảo Linux: Sâu hơn với VMGL

Đây là bài thứ ba về ảo hóa. Và có lẽ là khó nhất. Cho đến nay, chúng ta có hỗ trợ DirectX trong sản phẩm VMware và OpenGL trong VirtualBox, cả hai chỉ dành cho guest Windows. Nền tảng host không quan trọng. Nhưng guest Linux thì sao?

Tôi nghĩ điều đó không thể. Nhưng rồi tôi đọc bài trên linux.com, cho thấy 3D có thể tận hưởng trên guest Linux, dùng ứng dụng tên VMGL. Nó trông rất hứa hẹn. Rất tuyệt vời; nhưng cũng trông rất khó. Không phải chỉ 5-10 phút hack. Nhiệm vụ lớn. Vì vậy, tôi quyết định xem liệu có thực sự làm được không.

Và câu trả lời là...

Câu trả lời: Khi bạn thấy bài viết/hướng dẫn/dẫn đường/how-to dùng cụm từ như "nên sẽ hoạt động" và "tất cả những gì bạn phải làm là..." – hãy cảnh giác! Bạn sẽ gặp nhiều rắc rối.

Bài gốc, cũng như tài liệu của tác giả ứng dụng, không kể đến khoảng 90% công việc "bẩn" bạn phải làm chỉ để tiến gần mục tiêu. Trong hướng dẫn này, tôi sẽ chỉ cho bạn tất cả chi tiết rợn người liên quan đến (có lẽ) làm 3D chạy trong máy ảo Linux. P.S. Đọc thêm 2 bài đầu:

3D acceleration in virtual machines - Part 1: VMware & DirectX - Tutorial

3D acceleration in virtual machines - Part 2: VirtualBox & OpenGL - Tutorial

VMGL: Tăng tốc OpenGL 3D - phiên bản không cắt giảm

Chúng ta bắt đầu với VMware Server rồi thử VirtualBox.

Cài đặt

Tải gói và cài đặt dễ dàng. Chúng ở định dạng RPM, nên nếu bạn chạy distro dựa trên Debian (như Ubuntu), bạn phải cài gói alien trước và chuyển RPM sang DEB. Vậy trước tiên, cài alien:

sudo apt-get install alien

Sau đó, chuyển đổi gói RPM sang DEB:

alien -k package.rpm package.deb

Cuối cùng, cài đặt:

rpm -i package.rpm
hoặc
dpkg -i package.deb

Thay tên chung bằng tên gói VMGL thực tế và cài đặt, một lần trên host và một lần trên guest.

Lưu ý: Khi cài RPM/DEB, bạn không thấy lỗi (hiển thị). Tuy nhiên, thử cài từ source là một hỗn độn hoàn toàn. Bạn phải thỏa mãn hàng loạt dependency, bao gồm tất cả gói build-essential – gcc, make, kernel source, kernel headers – cộng nhiều cái khác, như imake, python và opengl headers.

Rất tiếc, tác giả không cho danh sách dependency hoàn chỉnh, nên bạn phải đoán, thử sai thử đúng, xem bạn có cần gì không.

Và source dường như hoàn toàn hỏng:

Và trên guest Ubuntu:

Rất có thể bạn sẽ bỏ cuộc ở giai đoạn này. Nhưng nếu bạn dùng gói RPM/DEB, bạn có thể nghĩ mọi thứ ổn, nên tiếp tục...

Nạp module

Bước tiếp theo: thay đổi file xorg.conf. Thêm section như sau:

Section "Module"
Load "vmglext"
EndSection

Khởi động lại X windows của guest (Ctrl + Alt + Backspace) để thay đổi có hiệu lực.

Khởi động Xvnc server

Tiếp theo, trong guest, chạy Xvnc server đã sửa đổi, vốn được cho là làm tất cả đường hầm OpenGL thần kỳ cho chúng ta.

À, đây là phần khó. Vì tác giả dùng phiên bản server cũ, vì lý do không rõ, trừ việc họ dùng bất cứ gì tại trường đại học của họ, nó sẽ thất bại trên distro hiện đại, vì nó giả định vị trí file/thư mục không còn tồn tại trên distro hiện đại.

Cả trên SUSE 11.0 và Ubuntu 8.10, tôi phải hack khá nhiều để chạy server không lỗi. Bạn sẽ gặp nhiều lỗi, kiểu:

Bật tăng tốc 3D trong máy ảo Linux: Sâu hơn với VMGL

Đây là chuyện gì khi dùng gói năm 2003 để tạo ứng dụng. May mắn thay, giải pháp "đơn giản". Vậy, để fix:

Tải rgb.txt

Đó là lỗi đầu tiên. Tìm file đâu đó trên Internet (google). Tải về và đặt nơi gói mong đợi tìm thấy. Trong chính file, xóa dòng trống, vì chúng gây lỗi cú pháp.

Đặt file nơi Xvnc server mong đợi – hoặc tốt hơn, đặt dưới /etc/X11/rgb.txt và tạo symbolic link:

cd /usr/X11R6/lib/X11
sudo ln -s /usr/share/X11/rgb.txt
cd /usr/share/X11
sudo ln -s /etc/X11/rgb.txt

Trông như sau:

Bật tăng tốc 3D trong máy ảo Linux: Sâu hơn với VMGL

Trông xấu, và đúng là xấu!

Bước tiếp theo: tạo symbolic link cho tất cả font bị thiếu.

cd /usr/X11R6/lib/X11/fonts
sudo ln -s /usr/share/fonts/X11/100dpi
sudo ln -s /usr/share/fonts/X11/75dpi
sudo ln -s /usr/share/fonts/X11/encodings
sudo ln -s /usr/share/fonts/X11/misc
sudo ln -s /usr/share/fonts/X11/Type1
sudo ln -s /usr/share/fonts/X11/util

Và bạn được:

Bật tăng tốc 3D trong máy ảo Linux: Sâu hơn với VMGL

Bây giờ, khi bạn khởi động Xvnc server, bạn VẪN gặp lỗi, nhưng lần này, nó chạy:

Trên host, chạy vncviewer. Cụm từ không cần nói, guest phải có IP có thể truy cập từ host. Nghĩa là bạn cần mạng bridged hoặc NAT cho máy ảo guest.

vncviewer guest-ip-address:1

Sẽ trông như thế này:

Trên guest, export GLSTUB:

export GLSTUB=guest-ip-address:port

Trong trường hợp chúng ta, GLSTUB trỏ đến cổng 7001. IP guest là 192.168.34.129, nên export GLSTUB như sau:

export GLSTUB=192.168.34.129:7001

Và phép màu! Mọi thứ nên hoạt động.

Um, chỉ là nó không. Chạy glxinfo không thấy driver vmglext được dùng và chạy glxgears như gợi ý cho hiệu suất tệ như trước. Không ngạc nhiên, coi gói bị hỏng.

Làm lại toàn bộ trong VirtualBox

Tôi nghĩ VMware Server với NAT và code proprietary là vấn đề. Vì vậy tôi thử thủ thuật tương tự, dùng host Ubuntu, chạy VirtualBox phiên bản OSE, với guest Ubuntu. Cấu hình Bridged Networking để làm việc.

Mặc dù cấu hình bridged networking không chuyên biệt liên quan đến chủ đề, đây là bộ lệnh đẹp bạn phải chạy để host và guest giao tiếp. Để chi tiết hơn, bạn có thể đọc:

VirtualBox - Community Ubuntu Documentation

Đây là những gì tôi làm (có thể không phản ánh chính xác nhu cầu/cấu hình của bạn):

1. Cài bridge utilities trên host

Bước đầu: cài bridge utilities, để cầu nối interface mạng và chia sẻ IP.

sudo apt-get install bridge-utils

2. Khai báo bridge trong script mạng

Sau khi cài bridge utilities, bạn phải khai báo trong file cấu hình mạng. Trên hệ thống Debian-based (như demo), cấu hình nằm trong file đơn /etc/network/interfaces. Distro dựa trên RedHat dùng script cấu hình riêng cho mỗi card mạng.

P.S. Hãy dùng IP tĩnh do bạn chọn.

sudo gedit /etc/network/interfaces
Thêm vào file:
auto br0
iface br0 inet static
address 192.168.3.100
netmask 255.255.255.0
gateway 192.168.3.1
bridge_ports eth0 vbox0

3. Khai báo card mạng ảo cho VirtualBox

Điều này cho phép VirtualBox dùng bridge br0:

sudo gedit /etc/vbox/interfaces
Thêm vào file:
vbox0 <your user name> br0

4. Khởi động lại network và driver VirtualBox

Sau khi thêm thay đổi vào file cấu hình, cần khởi động lại cả dịch vụ mạng và VirtualBox để thay đổi có hiệu lực.

sudo service networking restart
sudo /etc/init.d/virtualbox-ose restart

5. Hack file ở đây và đó để có quyền đúng

Bạn có thể cần đổi quyền thiết bị tunnel mạng để VirtualBox cũng dùng được. Làm như sau:

sudo chown root:vboxusers /dev/net/tun
sudo chmod 666 /dev/net/tun

6. Cấu hình guest dùng card ảo vbox0

Làm trên host, truy cập menu Settings cho máy ảo liên quan. Ảnh chụp màn hình đẹp:

7. Bật guest và gán IP tĩnh

Địa chỉ này nên thuộc cùng subnet với bridge. Nói cách khác, tăng octet cuối lên 1.

sudo ifconfig <device> <ip address> up
Trong trường hợp chúng ta:
sudo ifconfig eth3 192.168.3.101 up

8. Lặp lại tất cả bước trước

Quay lại đầu phiên bản "uncut" và chạy toàn bộ setup lại. Và lại, nó không chạy. Phép màu?

Kết luận

Kết luận: tận hưởng tăng tốc 3D trên máy ảo Linux vượt quá khả năng của 99.999995% người dùng, bao gồm geek am hiểu như tôi. Dự án, rõ ràng là luận án tiến sĩ của ai đó, cảm giác như công trình học thuật thực sự: nửa chừng, không dùng được bởi người bình thường.

Điều khiến tôi bối rối là tuyên bố "bạn đã sẵn sàng" sau chỉ vài hack nhỏ, như thể chúng ta nói về ly sương mai tươi mát. Và hack 5 phút biến thành 3-4 giờ khổ đau. Trên trời, tại sao ai lại dùng phiên bản Xvnc 6 năm tuổi cho nhiệm vụ?

Tuy nhiên, tôi nghĩ điều thực sự khiến tôi bực mình nhất là việc ai đó phát hành sản phẩm trong trạng thái tồi tệ như vậy. Xấu hổ. Được, không phải tất cả đều mất. Chúng ta đã có 2/3 chạy được. Hỗ trợ DirectX của VMware cho guest Windows và OpenGL của VirtualBox cho guest Windows được chứng minh là viên ngọc.

Đừng than vãn! VMware và Sun là "big shots" trong ngành ảo hóa. Chỉ là vấn đề thời gian trước khi tăng tốc 3D trở thành hiện thực vui vẻ cho người dùng Linux chạy guest Linux.

Khi xét tất cả, nhu cầu tăng tốc 3D Linux host/Linux guest dường như ít quan trọng hơn. Người dùng Windows có thể chỉ dùng Windows. Nếu và khi họ cần Linux, họ sẽ dual-boot. Người dùng Linux thường muốn guest Windows để chạy ứng dụng legacy, và cho việc này họ đã có giải pháp (hoặc hai). Ảo hóa Linux-trong-Linux là ý tưởng tàn ác, nhưng không phải ưu tiên với hầu hết mọi người. Nó sẽ xảy ra. Tôi đánh đố.

Để kết thúc, hãy xem lại những gì chúng ta làm. Chúng ta học vài bài học quý giá trong loạt bài này. Chúng ta học cách dùng VMware Server và VirtualBox để tận hưởng tăng tốc 3D trong guest Windows. Chúng ta học thêm vài hack và thủ thuật cool. Quan trọng nhất, chúng ta học rằng ảo hóa desktop đang tiến hóa liên tục, đưa chúng ta xa hơn trong mục tiêu và khát vọng.

Chúc vui!