Criei o proroot sem ptrace para reduzir o gargalo do proot no Android arm64
(github.com/coderredlab)Olá.
Enquanto eu tocava um projeto para subir e usar um espaço de usuário Ubuntu arm64 no Android, o maior gargalo era, como esperado, o overhead de ptrace do proot. Principalmente em cargas de trabalho como Node.js e Chromium, o custo de context switch gerado a cada syscall era bem perceptível.
Por isso, estou desenvolvendo o proroot, que segue uma direção parecida com a do proot, mas funciona sem ptrace. O objetivo é fornecer conversão de caminhos e isolamento do ambiente de execução sem root, ao mesmo tempo processando a interceptação de syscalls dentro do próprio processo para reduzir o overhead.
No momento, a implementação combina LD_PRELOAD com patching de binários, e testei os itens abaixo em ambiente arm64.
- Node.js 24 / npm
- Python 3.12
- Git 2.43
- curl, jq, OpenSSL
- Chromium
headless_shell131 (Playwright)
A implementação funciona, em linhas gerais, da seguinte forma.
- interceptação de PLT para funções da glibc (
openat,stat,execve,dlopenetc.) - após escanear o ELF no momento do carregamento, faz patch dos pontos de syscall para chamadas via trampoline
- ajustes no signal handler para lidar com quirks do seccomp no Android e compatibilidade com o Chrome
A forma de uso foi mantida o mais parecida possível com a do proot, então por enquanto dá para usar diretamente flags de CLI como -r, -w e --link2symlink.
Ainda é algo exclusivo para arm64 e, antes de abrir todo o código-fonte, preciso de mais testes e estabilização, então por enquanto a distribuição está sendo feita apenas em formato binário. Em vez de publicar primeiro um código ainda meio desorganizado, concluí que faz mais sentido validar um pouco mais a compatibilidade e a estabilidade em cargas de trabalho reais e depois organizar tudo para publicar.
Se alguém já passou por preocupações parecidas por causa da performance do proot no Android, agradeço opiniões ou feedback.
Ainda não há comentários.