Android arm64'te proot darboğazını azaltmak için ptrace'siz proroot geliştirdim
(github.com/coderredlab)Merhaba.
Android'de Ubuntu arm64 kullanıcı alanını çalıştıran bir proje üzerinde çalışırken, en büyük darboğazın yine proot'un ptrace ek yükü olduğunu gördüm. Özellikle Node.js veya Chromium gibi iş yüklerinde, her syscall için oluşan context switch maliyeti oldukça belirgin hissediliyordu.
Bu yüzden, proot'a benzer bir yaklaşımı olan ama ptrace olmadan çalışan proroot üzerinde çalışıyorum. Amaç, root gerektirmeden yol dönüşümü ve çalıştırma ortamı izolasyonu sağlarken, syscall interception işlemlerini süreç içinde ele alarak ek yükü azaltmak.
Şu anda bunu LD_PRELOAD ile ikili dosya patching'ini birleştiren bir yöntemle uyguluyorum ve arm64 ortamında aşağıdaki bileşenleri test ettim.
- Node.js 24 / npm
- Python 3.12
- Git 2.43
- curl, jq, OpenSSL
- Chromium headless_shell 131 (Playwright)
Uygulama kabaca şu şekilde çalışıyor.
glibcişlevleri (openat,stat,execve,dlopenvb.) için PLT interception- Yükleme anında ELF taraması yapıp
syscallnoktalarını trampoline çağrısı olacak şekilde patch etme - Android
seccomptuhaflıkları ve Chrome uyumluluğu içinsignal handleriyileştirmeleri
Kullanım biçimini proot'a mümkün olduğunca benzer tuttum; bu yüzden şu anda -r, -w, --link2symlink gibi CLI bayraklarını aynen kullanabiliyor.
Henüz yalnızca arm64'e özel ve tüm kaynak kodu açmadan önce biraz daha test ve stabilizasyon gerekiyor; bu nedenle bir süre daha sadece ikili dosya biçiminde dağıtıyorum. Yarı düzenlenmemiş kodu önce yayımlamaktansa, gerçek iş yüklerinde uyumluluk ve kararlılığı biraz daha doğrulayıp düzenledikten sonra paylaşmanın daha iyi olacağına karar verdim.
Android'de proot performansı nedeniyle benzer dertleri yaşamış olan varsa, görüş veya geri bildirimlerinizi duymak isterim.
Henüz yorum yok.