1 ポイント 投稿者 coderred 2026-04-09 | まだコメントはありません。 | WhatsAppで共有

こんにちは。

AndroidでUbuntu arm64のユーザー空間を立ち上げて使うプロジェクトを進める中で、最大のボトルネックはやはりprootのptraceオーバーヘッドでした。特にNode.jsやChromiumのようなワークロードでは、syscallごとに発生するcontext switchのコストがかなり大きく感じられました。

そこで、prootと似た方向性を持ちながらもptraceなしで動作するprorootを作ってみています。目標は、rootなしでパス変換と実行環境の分離を提供しつつ、syscall interceptionをプロセス内部で処理してオーバーヘッドを減らすことです。

現在はLD_PRELOADとバイナリパッチングを組み合わせる方式で実装しており、arm64環境で以下の項目をテストしました。

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

実装はおおむね以下の方式です。

  • glibc関数(openat, stat, execve, dlopenなど)に対するPLT interception
  • ロード時点でELFをスキャンし、syscall地点をtrampoline呼び出しにパッチ
  • Android seccomp quirksおよびChrome互換性のためのsignal handler補強

使い方はprootにできるだけ近づけており、現在は -r, -w, --link2symlink のようなCLIフラグをそのまま使えます。

まだarm64専用で、ソース全体を公開する前にもう少しテストと安定化が必要なため、当面はバイナリ形式でのみ配布しています。半端に整理されていないコードを先に公開するより、実際のワークロードで互換性と安定性をもう少し検証したうえで、整理して公開するほうがよいと判断しました。

Androidでprootの性能のために同じような悩みを持ったことがある方がいれば、ご意見やフィードバックをお願いします。

まだコメントはありません。

まだコメントはありません。