Skip to content

Sách trắng ​

Tài liệu này đi sâu vào thiết kế kiến trúc, lựa chọn công nghệ cũng như logic triển khai nền tảng của các tính năng chính trong WSL Dashboard, nhằm cung cấp góc nhìn kỹ thuật chuyên sâu cho nhà phát triển và người dùng cao cấp.

1. Tổng quan kiến trúc ​

WSL Dashboard áp dụng kiến trúc kinh điển UI phản ứng làm driver + tác vụ backend bất đồng bộ, tận dụng hệ thống kiểu dữ liệu và mô hình sở hữu của ngôn ngữ Rust để đảm bảo an toàn bộ nhớ và hiệu năng đồng thời cao.

Các thành phần cốt lõi ​

  • Frontend (UI): Giao diện khai báo dựa trên Slint. Luồng UI chịu trách nhiệm vẽ và tương tác với người dùng.
  • Backend (Runtime): Runtime bất đồng bộ dựa trên Tokio. Chịu trách nhiệm phân phối, thực thi lệnh hệ thống (CLI), I/O tệp và giám sát mạng.
  • Communication: Luồng UI giao tiếp với các tác vụ bất đồng bộ thông qua Channel (MPSC) và Shared State (Arc/Mutex/RwLock) một cách hiệu quả và an toàn luồng.

2. Lý do lựa chọn công nghệ ​

Vì sao chọn Rust? ​

  • Hiệu năng: Trừu tượng không chi phí (zero-cost), biên dịch thành mã máy gốc, không có hiện tượng giật do GC.
  • An toàn bộ nhớ: Loại bỏ tràn bộ đệm và đua dữ liệu ngay tại thời điểm biên dịch, điều này vô cùng quan trọng đối với công cụ thao tác ở tầng hệ thống (như di chuyển đĩa, cấu hình mạng).
  • Kích thước nhị phân: Liên kết tĩnh toàn bộ phụ thuộc, tạo ra chương trình thực thi di động dạng tệp đơn.

Vì sao chọn Slint + Skia? ​

  • Cú pháp khai báo: Mô tả giao diện tách rời logic, mã dễ bảo trì.
  • Vẽ bằng Skia: Trực tiếp tận dụng tăng tốc GPU (thông qua engine Skia), mang lại chữ rõ nét ở mức dưới pixel và hiệu ứng chuyển động mượt mà.
  • Chi phí thấp: So với Electron hay WPF, chi phí runtime của Slint cực nhỏ.

3. Triển khai kỹ thuật then chốt ​

3.1 Phát hiện và phân tích phiên bản WSL ​

Ứng dụng gọi wsl.exe --list --verbose và phân tích đầu ra của nó (xử lý mã hóa UTF-16) để lấy trạng thái phiên bản theo thời gian thực.

  • Giải mã tầng dưới: Bộ giải mã mã hóa hiệu quả tự phát triển, đảm bảo phân tích chính xác đầu ra trên mọi môi trường Windows với các cài đặt vùng miền khác nhau.
  • Đồng bộ trạng thái: Áp dụng cơ chế đồng bộ kép gồm thăm dò định kỳ + kích hoạt bằng thao tác.

3.2 Di chuyển ảnh đĩa (VHDX Move) ​

Tính năng di chuyển tận dụng cơ chế xuất-nhập của WSL nhưng được trừu tượng hóa và nguyên tử hóa ở mức cao.

  • Đảm bảo giao dịch: Trước khi bắt đầu di chuyển, ứng dụng khóa bản phân phối đích bằng Mutex để ngăn thao tác đồng thời gây hỏng dữ liệu.
  • Tự động đăng ký: Sau khi di chuyển hoàn tất, ứng dụng tự động trỏ lại đường dẫn VHDX và đăng ký lại bản phân phối, người dùng không cần can thiệp thủ công.

3.3 Tự động hóa chuyển tiếp cổng và tường lửa ​

Tính năng mạng không chỉ đơn thuần gọi netsh interface portproxy.

  • Quản lý vòng đời quy tắc: Ứng dụng tự động phát hiện các quy tắc tường lửa hiện có. Khi người dùng tạo chuyển tiếp, ứng dụng dùng Windows API hoặc CLI để đồng bộ tạo quy tắc ngoại lệ gửi đến.
  • Tự động lấy IP: Phân tích kết quả wsl hostname -I, tự động ánh xạ IP mạng ảo giữa máy chủ và phiên bản.

3.4 Tích hợp USBIP ​

Tận dụng giao diện dòng lệnh của usbipd-win.

  • Xử lý nâng quyền: Thao tác bind yêu cầu quyền quản trị viên, logic backend triển khai việc chuyển tiếp yêu cầu nâng quyền UAC một cách mượt mà.
  • State machine trạng thái: Nội bộ duy trì một state machine kết nối thiết bị USB, đảm bảo quá trình Attach/Detach có thể truy vết.

3.5 Giám sát tài nguyên và tối ưu nhẹ ​

Ứng dụng gọi các API gốc của Windows (như GetProcessMemoryInfo) để giám sát mức sử dụng tài nguyên của chính nó.

  • Cực kỳ nhẹ: Ở chế độ nền khay, ứng dụng chủ động giải phóng các tài nguyên UI không cần thiết. Với các bộ ký tự chuẩn như tiếng Anh, mức sử dụng bộ nhớ có thể thấp tới 10MB; với các bộ ký tự phức tạp như Trung-Nhật-Hàn, do phải tải cache kết xuất phông chữ lớn, mức sử dụng khoảng 38MB.

4. Các chỉ số tối ưu hiệu năng ​

Chỉ sốMục tiêu/Thực tếBiện pháp tối ưu
Tốc độ khởi động< 500msBiên dịch trước giao diện Slint, giảm phân tích lúc runtime.
Bộ nhớ cơ bản (khay)~10MBGiảm thiểu tần suất thăm dò nền, giải phóng cache kết xuất theo nhu cầu.
Mức sử dụng CPU (tĩnh)< 0.1%Dùng mô hình điều khiển theo sự kiện Windows, tránh thăm dò vòng lặp rỗng.
Tốc độ khung hình kết xuất60 FPSTăng tốc GPU Skia, chống răng cưa mức dưới pixel.

5. Logic phân phối tác vụ backend ​

Để đảm bảo giao diện mượt mà, mọi thao tác tốn thời gian (như xuất VHDX) đều được phân phối qua các tác vụ bất đồng bộ:

  1. Đóng gói yêu cầu: Luồng UI đóng gói thao tác người dùng thành thông điệp Command.
  2. Kênh thông điệp: Gửi đến trình xử lý tác vụ nền thông qua tokio::sync::mpsc.
  3. Trả về trạng thái: Sau khi tác vụ nền hoàn tất, cập nhật UI qua callback hoặc chia sẻ trạng thái. Thiết kế này đảm bảo ngay cả khi xử lý tác vụ sao lưu lên tới vài GB, giao diện vẫn phản hồi theo thời gian thực với các cú nhấp của người dùng.

6. Cân nhắc bảo mật ​

  • Thao tác nguyên tử: Đối với việc gỡ cài đặt và di chuyển phiên bản then chốt, đã triển khai kiểm tra trước.
  • Quản lý nâng quyền UAC: Chỉ yêu cầu quyền khi cần thiết (như bind thiết bị USB), tuân thủ nguyên tắc đặc quyền tối thiểu.
  • Lưu trữ cục bộ: Cấu hình chỉ được lưu tại ~\.wsldashboard cục bộ, không thực hiện bất kỳ đồng bộ đám mây nào, bảo vệ quyền riêng tư của người dùng.