Aura 四象限 GC ライフサイクル:メモリロックと自動解放のバランス

Published on 2026.04.28
#Aura #GC #Rust #Memory Management #Engineering

Aura 四象限 GC ライフサイクル:メモリロックと自動解放のバランス

Aura GC ライフサイクル可視化

1 秒間に数千回のノードジャンプを処理するエージェントエンジンにとって、従来の「Stop-the-world」型のガベージコレクション(GC)は、受け入れがたいパフォーマンスのブラックホールです。Aura は高性能データベースのメモリ管理戦略を借用し、Rust 言語をベースに四象限ライフサイクル体系を構築しました。

1. 永続ロック領域:システムの「ハードコア」ストレージ

24-bit ポインタが実行ノードを瞬時にヒットすることを保証するために、私たちはコアとなるハッシュインデックス表(約 256MB)を永続リソースとしてマークしています。

1.1 mlock とページフォルトの排除

オペレーティングシステムの mlock() API を呼び出すことで、このメモリブロックを物理ページ内に強制的にロックします。これは、Linux カーネルがこれをディスクにスワップ(Swap)させないことを意味します。高頻度なジャンプ中、CPU は常にキャッシュまたは物理メモリからアドレスを取得でき、アクセス遅延をナノ秒レベルで安定させます。

2. タスクレベルリソース:Arc に基づく参照カウント

長期タスクに関わるすべての中間コンテキスト(Context)は、第二象限に属します。私たちは Rust の Arc<RwLock<T>> を利用して、スレッドセーフな共有を実現しています。Meta がタスクパイプライン全体の終了とアーカイブを判定すると、参照カウントがゼロになり、関連するメモリブロックは直ちに再利用可能としてマークされます。

3. ノードレベルリソース:RAII の究極の応用

Matrix が各 24-bit アクションを実行する際に生成される一時変数は、第三象限に属します。これは Aura のパフォーマンスが最も強力な部分です。私たちは Rust の RAII(Resource Acquisition Is Initialization:リソースの取得は初期化である) に完全に依存しています。

3.1 ゼロクリーニング・オーバーヘッド

Matrix は無状態(ステートレス)な実行器であるため、その関数スタック上のオブジェクトは実行が完了した瞬間に自動的に Drop トレイトを呼び出します。このメモリ回収はコードの実行フローと「同期して発生」し、バックグラウンドのクリーニングスレッドは存在しません。これにより、メモリ回収に起因するパフォーマンスのジッター(Jitter)を完全に排除しています。

4. WASM インスタンス:物理的なメモリ隔離

各スキルプラグインのメモリ空間は完全に隔離されています。 スキルが実行完了すると、Wasmtime インスタンス全体とその占有していた線形メモリセグメントが瞬時に破棄されます。この「暴力的かつ効率的」なクリーニング方法により、サードパーティのスキルプラグインにメモリリークがあったとしても、Aura ホストのメモリ安定性に影響を与えることは決してありません。

5. 結論

Aura のメモリ設計の本質は**「分割統治」**です。私たちは汎用的な GC を追求するのではなく、データの時効性に基づいて、最も適切な生存境界をカスタマイズしています。この設計により、Aura は高性能なタスク実行時においても、メモリ使用曲線が極めて平坦かつ精密に推移します。


Dark Lattice 構造研究所 出品