Skip to content

Sách trắng

Tài liệu này cung cấp cái nhìn sâu sắc về kiến trúc设计, lựa chọn công nghệ và逻辑 triển khai底层 của các tính năng chính trong WSL Dashboard, dành cho nhà phát triển và người dùng nâng cao寻找视角 kỹ thuật.

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

WSL Dashboard áp dụng kiến trúc UI reactive驱动 + tác vụ backend bất đồng bộ cổ điển,利用 hệ thống kiểu và mô hình sở hữu của Rust để đảm bảo an toàn bộ nhớ và hiệu suất đồng thời cao.

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

  • Frontend (UI): Được xây dựng trên giao diện khai báo Slint. Luồng UI负责 render và tương tác người dùng.
  • Backend (Runtime): Được xây dựng trên runtime bất đồng bộ Tokio.负责 phân phối và thực thi các lệnh hệ thống (CLI), I/O tệp và trình lắng nghe mạng.
  • Giao tiếp: Luồng UI và các tác vụ bất đồng bộ giao tiếp hiệu quả và an toàn luồng thông qua Channels (MPSC)Shared State (Arc/Mutex/RwLock).

2. Lý do công nghệ

Tại sao Rust?

  • Hiệu suất: 抽象零成本, biên dịch thành mã máy gốc, không có暂停 GC.
  • An toàn bộ nhớ: Loại bỏ缓冲区溢出 và竞争 dữ liệu tại thời điểm biên dịch — rất quan trọng cho công cụ hoạt động ở cấp hệ thống (di chuyển ổ đĩa, cấu hình mạng).
  • Kích thước nhị phân: Liên kết tĩnh tất cả các phụ thuộc để tạo ra tệp thực thi di động单文件.

Tại sao Slint + Skia?

  • Cú pháp khai báo: Tách biệt mô tả UI khỏi逻辑, giữ cho codebase sạch sẽ và dễ bảo trì.
  • Render Skia: Tận dụng加速 GPU trực tiếp (thông qua công cụ Skia), mang lại độ rõ nét văn bản cận像素 và动画 mượt mà.
  • Chi phí thấp: So với Electron hoặc WPF, footprint runtime của Slint là tối thiểu.

3. Triển khai kỹ thuật chính

3.1 Phát hiện & Phân tích Instance WSL

Ứng dụng lấy trạng thái instance thời gian thực bằng cách gọi wsl.exe --list --verbose và phân tích đầu ra (xử lý编码 UTF-16).

  • Giải mã cấp thấp: Bộ mã hóa/giải mã tùy chỉnh, hiệu quả确保 phân tích đầu ra chính xác trên các môi trường Windows với cài đặt khu vực khác nhau.
  • Đồng bộ trạng thái: Sử dụng cơ chế đồng bộ双重 kết hợp轮询定期 và cập nhật触发 thao tác.

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

Tính năng di chuyển利用 cơ chế nhập/xuất của WSL, nhưng với mức độ抽象 và nguyên tử cao.

  • Bảo đảm事务: Trước khi di chuyển bắt đầu, ứng dụng khóa bản phân phối mục tiêu thông qua Mutex để防止 các 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 chuyển hướng đường dẫn VHDX và đăng ký lại bản phân phối — không cần can thiệp thủ công.

3.3 Chuyển tiếp cổng & Tự động hóa tường lửa

Tính năng mạng超越简单的 netsh interface portproxy lệnh gọi.

  • 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 quy tắc chuyển tiếp, nó同时 tạo例外规则 gửi đến thông qua Windows API hoặc CLI.
  • Phân giải IP tự động: Bằng cách phân tích đầu ra của wsl hostname -I, nó tự động ánh xạ các IP mạng ảo giữa máy chủ và instance.

3.4 Tích hợp USBIP

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

  • Xử lý提升: Thao tác ràng buộc yêu cầu quyền quản trị. Backend实现 yêu cầu提升 UAC优雅.
  • Máy trạng thái: Duy trì máy trạng thái kết nối thiết bị USB nội bộ để确保可追溯性 đầy đủ của các thao tác Attach/Detach.

3.5 Giám sát tài nguyên & Chiếm dụng tối thiểu

Ứng dụng giám sát việc sử dụng tài nguyên của chính nó bằng cách gọi Windows API gốc (ví dụ: GetProcessMemoryInfo).

  • Hiệu quả极端: Trong chế độ khay im lặng, ứng dụng chủ động giải phóng tài nguyên UI không cần thiết. Đối với bộ ký tự tiêu chuẩn (ví dụ: tiếng Anh), mức sử dụng bộ nhớ có thể thấp至 10MB; đối với bộ ký tự phức tạp (ví dụ: CJK), nó大约 38MB do bộ đệm render phông chữ lớn hơn cần thiết.

4. Hiệu chuẩn hiệu suất

Chỉ sốMục tiêu / Đo đượcPhương pháp tối ưu hóa
Thời gian khởi động< 500msGiao diện Slint已 biên dịch trước, giảm thiểu phân tích runtime.
Bộ nhớ cơ bản (tray)~10MBGiảm thiểu tần suất轮询 nền, giải phóng bộ đệm render theo nhu cầu.
Sử dụng CPU (nhàn rỗi)< 0.1%Mô hình驱动 sự kiện Windows, không có轮询忙.
Tỷ lệ khung render60 FPS加速 GPU Skia, render chống răng cưa cận像素.

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

Để确保响应 UI, tất cả các thao tác花费 thời gian (ví dụ: xuất VHDX) được phân phối作为 các tác vụ bất đồng bộ:

  1. Đóng gói yêu cầu: Luồng UI đóng gói hành động người dùng thành消息 Command.
  2. Kênh消息: Gửi chúng đến trình xử lý tác vụ nền thông qua tokio::sync::mpsc.
  3. Trạng thái回调: Khi tác vụ nền hoàn tất, nó cập nhật UI thông qua回调 hoặc trạng thái共享. Thiết kế này确保 rằng ngay cả khi xử lý tác vụ备份多千兆字节, giao diện vẫn完全响应 với đầu vào người dùng.

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

  • Thao tác nguyên tử: Xác minh trước được triển khai cho các thao tác hủy đăng ký và di chuyển instance quan trọng.
  • Quản lý提升 UAC: Quyền提升 được yêu cầu仅 khi必要 (ví dụ: ràng buộc thiết bị USB),遵循 nguyên lý特权最小.
  • Lưu trữ cục bộ: Cấu hình仅保存 vào thư mục cục bộ ~\.wsldashboard而不任何 đồng bộ đám mây, bảo vệ quyền riêng tư người dùng.