1 điểm bởi coderred 2026-04-09 | Chưa có bình luận nào. | Chia sẻ qua WhatsApp

Xin chào.

Trong quá trình thực hiện một dự án chạy không gian người dùng Ubuntu arm64 trên Android, nút thắt cổ chai lớn nhất đúng là chi phí ptrace của proot. Đặc biệt với các workload như Node.js hay Chromium, chi phí context switch phát sinh ở mỗi syscall được cảm nhận khá rõ.

Vì vậy tôi đang thử tạo proroot, có định hướng tương tự proot nhưng hoạt động không cần ptrace. Mục tiêu là vẫn cung cấp chuyển đổi đường dẫn và cô lập môi trường thực thi mà không cần root, đồng thời xử lý syscall interception bên trong tiến trình để giảm overhead.

Hiện tại, nó đang được triển khai bằng cách kết hợp LD_PRELOAD và binary patching, và tôi đã thử nghiệm các hạng mục dưới đây trên môi trường arm64.

  • Node.js 24 / npm
  • Python 3.12
  • Git 2.43
  • curl, jq, OpenSSL
  • Chromium headless_shell 131 (Playwright)

Cách triển khai đại khái như sau.

  • PLT interception đối với các hàm glibc (openat, stat, execve, dlopen v.v.)
  • Sau khi quét ELF tại thời điểm nạp, vá các điểm syscall để gọi trampoline
  • Bổ sung signal handler nhằm xử lý Android seccomp quirks và tương thích với Chrome

Cách sử dụng được điều chỉnh để giống proot nhất có thể, nên hiện tại vẫn có thể dùng nguyên các cờ CLI như -r, -w, --link2symlink.

Hiện nó mới chỉ dành cho arm64, và trước khi công khai toàn bộ mã nguồn thì vẫn cần thêm một chút thử nghiệm và ổn định hóa, nên trong thời gian này tôi chỉ phân phối dưới dạng binary. Tôi cho rằng thay vì công bố trước đoạn mã còn dang dở, sẽ tốt hơn nếu kiểm chứng thêm khả năng tương thích và độ ổn định trên các workload thực tế rồi mới sắp xếp lại và công khai.

Nếu ai từng có những trăn trở tương tự về hiệu năng của proot trên Android, rất mong nhận được ý kiến hoặc phản hồi.

Chưa có bình luận nào.

Chưa có bình luận nào.