mcpField
J
jetson-optimize-memory

jetson-optimize-memory

github.com/nvidia開発3.8k1.2k 回インストール今日更新
リポジトリ

jetson-optimize-memory について

Jetson BSP のメモリ最適化向けスキルで、検証済みの headless、no-camera、SWIOTLB レシピを使い、ファームウェア、デバイスツリー、DMA バッファーを調整します。対象周辺機器を使わず DRAM を確保したい構成向けで、変更の検証が必要ですが、デバイスへの書き込みは行いません。

主な機能

  1. 013 種類の検証済み最適化レシピ
  2. 02起動各層の carveout 調整
  3. 03カーネルデバイスツリーの編集
  4. 04SWIOTLB DMA バッファープールの縮小
  5. 05統合設定と起動後の検証

活用シーン

  1. 01ヘッドレス構成で予約メモリを回収
  2. 02カメラなし構成で carveout を削減
  3. 03SWIOTLB を調整して DMA バッファーを縮小

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/nvidia/skills --skill jetson-optimize-memory

インストール後、Claude Code で/jetson-optimize-memoryを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

BENCHMARK.md
skill-card.md
skill.oms.sig
evals/
evals.json

詳細

jetson-optimize-memory

メモリは、起動時系列の順に並んだ4つのレイヤーにわたって確保されます (上の行ほど起動時の順序が早く、ハードウェアに近いことを示します)。

レイヤー内容主なファイル
MB1 BCTファームウェアのカーブアウトモジュールごとの misc DTS
MB2 BCTファームウェアの読み込み + AST 制御モジュールごとの misc DTS
Kernel DTSreserved-memory とドライバーのバインドモジュールごとの DTS
SWIOTLBDMA バウンスプールのサイズ<module>.conf.common(CMDLINE_ADD)

重要なルール:

  • 検証済みなのは、シナリオレシピに記載されたシナリオのみです。その表にないカーブアウト/クラスター/ノードの無効化を求められた場合は、拒否してください。
  • カーブアウトをゼロにするには、クラスターの読み込み制御を無効化し、それを参照する AST を削除する必要があります。
  • レシピに含まれるすべてのクラスターについて、ソースの #ifdef/#else の状態に関係なく、明示的なオーバーライドを出力してください。 マージ後のバイナリを検証してください。
  • GPU ソフトウェアスタックはチップに合わせる必要があります:T234 は nvgpu、T264 以降は OpenRM です。target-platform-contract.md にある共通の派生プラットフォームルールに従い、不一致があれば推測せず処理を停止してください。
  • SWIOTLB を 0 に設定しないでください。一部の周辺機器は IOMMU を使用できません。

シナリオレシピ

キーワードMB1 BCT カーブアウトMB2 BCTKernel DTS
headlessDCE ファミリー(チップ表を参照)DCE auxp_controls + DCE AST(s)display@<addr>(および公開されている場合は dce@<addr>)→ 無効化
no-cameraRCE/VI/ISP ファミリーRCE auxp_controls(各インスタンス)+ RCE AST(s)推奨:VI/ISP/NVCSI → 無効化
チップ固有のカーブアウト
シナリオT234(Orin)T264(Thor)
headlessCARVEOUT_BPMP_DCE、CARVEOUT_DCE、CARVEOUT_DCE_TSEC、CARVEOUT_TSEC_DCE、CARVEOUT_DISP_EARLY_BOOT_FBCARVEOUT_DCE、CARVEOUT_TSEC_DCE、CARVEOUT_HPSE_DCE、CARVEOUT_DISP_EARLY_BOOT_FB
no-cameraCARVEOUT_RCE、CARVEOUT_CAMERA_TASKLISTCARVEOUT_RCE、CARVEOUT_RCE1、CARVEOUT_RCE_RW、CARVEOUT_VI_TASKLIST、CARVEOUT_VI1_TASKLIST、CARVEOUT_ISP_TASKLIST、CARVEOUT_ISP1_TASKLIST

起動後: headless → sudo systemctl set-default multi-user.target。


MB1 BCT カーブアウトのオーバーライド

ファイル:Linux_for_Tegra/bootloader/generic/BCT/tegra<chip>-mb1-bct-misc-<module>.dts (例:Orin Nano の場合は tegra234-mb1-bct-misc-p3767-0000.dts、 Thor の場合は tegra264-mb1-bct-misc-p3834-0008-p4071-0000.dts)。

各カーブアウトについて、既存の carveout ノード内に追加します。

aux_info@<CARVEOUT_NAME> {
    pref_base = <0x0 0x0>;
    size      = <0x0 0x0>;
    alignment = <0x0 0x0>;
};

MB2 BCT クラスターと AST のオーバーライド

ファイル:Linux_for_Tegra/bootloader/generic/BCT/tegra<chip>-mb2-bct-misc-<module>.dts (tegra<chip>-mb2-bct-common.dtsi をインクルードします)。

対象の各クラスターについて:

  1. auxp_controls@<index> をオーバーライドします。
    auxp_controls@<index> {
        enable_init    = <0>;
        enable_fw_load = <0>;
        enable_unhalt  = <0>;
    };
    
  2. /delete-node/ auxp_ast_config@<idx>;

インデックスは common.dtsi で確認してください。auxp_controls@N にはクラスター名を示すコメントがあり、auxp_ast_config@N には所有者を特定する carveout = <CARVEOUT_…>; の行を含む ast_region 子ノードがあります。


Kernel DT reserved-memory

DTB=Linux_for_Tegra/kernel/dtb/<platform-dtb-name>.dtb
dtc -I dtb -O dts -o /tmp/platform.dts $DTB
# edit: status = "disabled" on target nodes
dtc -I dts -O dtb -o $DTB /tmp/platform.dts

ディスプレイ — display@<addr> を無効化します。別のカーネルノードとして公開されている場合は、dce@<addr> も無効化します。

カメラ — host1x@<addr> の下で、BSP に存在する vi*/isp*/nvcsi のうち該当するノードを無効化します(存在するノードのみを出力してください)。

逆コンパイルした DTS でディスプレイコントローラーノードを特定し、無効化してください。 ノードのユニットアドレスはチップによって異なります。アドレスをハードコードするのではなく、compatible 文字列(例:nvidia,tegra234-display)で検索してください。

host1x@<addr> {
    vi0@<addr>   { status = "disabled"; };
    vi1@<addr>   { status = "disabled"; };
    isp@<addr>   { status = "disabled"; };
    isp1@<addr>  { status = "disabled"; };
    nvcsi@<addr> { status = "disabled"; };
};

SWIOTLB DMA バウンスプール

NVIDIA IOMMU が周辺機器の DMA を処理するため、SWIOTLB が使用されることはほとんどありません。 Linux_for_Tegra/<module>.conf.common の CMDLINE_ADD を編集してください(CMDLINE は絶対に編集しないでください)。

# Total bytes = swiotlb_value × 2048; 4 MiB pool:
CMDLINE_ADD="... swiotlb=2048"

オーバーライドの検証(必須)

MB1/MB2 BCT の各 .dts にパッチを適用した後、BSP のコンパイルとデコンパイルを、bootloader/tegraflash_impl_t<chip>.py の bct_flags.append(...) と同じ -D… フラグを使って再現します。

gcc -E -nostdinc -x assembler-with-cpp \
    -DENABLE_<FLAG_1> -DENABLE_<FLAG_2> \
    -I bootloader -I bootloader/generic/BCT \
    -o /tmp/cpp.dts <patched-bct.dts>
dtc -q -I dts -O dtb -o /tmp/cpp.dtb /tmp/cpp.dts
dtc -q -I dtb -O dts /tmp/cpp.dtb | less

マージ後の出力で、次の点を確認します。

  • ゼロ化された各 aux_info@<NAME>(またはマクロ展開後の aux_info@<id>U)で、size = <0x0 0x0> および pref_base = <0x0 0x0> になっていること。
  • 無効化された各 auxp_controls@<idx> で、3 つすべての enable_* フィールドが <0> になっていること。
  • /delete-node/ で削除された各 auxp_ast_config@<idx> が存在しないこと。

検証(起動済みターゲット上)

sudo cat /proc/iomem | grep -iE 'nv-reserved|cma|fb|carveout'
ls /proc/device-tree/reserved-memory/
dmesg | grep -iE 'firmware|carveout|bpmp|reserved|fail|error' | head -20
free -m
シナリオSysfsdmesg grep
ディスプレイ無効ls /sys/class/drm/(空)tegra-drm|nvdisplay|dce|host1x|fb0
カメラ無効ls /dev/video* 2>/dev/null(なし)rce|nvcsi|tegra-camera|vi0|vi1|isp
SWIOTLB 縮小cat /sys/kernel/debug/swiotlb/io_tlb_nslabs が cmdline と一致swiotlb

SWIOTLB の場合、/proc/cmdline に swiotlb=<value> が含まれている必要があります。また、全負荷時に watch -n5 cat /sys/kernel/debug/swiotlb/io_tlb_used の値が io_tlb_nslabs を下回り続けることを確認します。超過した場合は、元の CMDLINE_ADD に戻して kernel-dtb を再フラッシュしてください。

目的

Jetson のデプロイでディスプレイ、カメラ、その他の周辺機器を使用しない場合に、リファレンス BSP で有効になっている未使用の DRAM カーブアウトを削減し、解放されたバイトをアプリケーションに割り当てます。起動順序に従って常に 4 つのレイヤーを編集し、初期段階のカーブアウトが後段の縮小に優先しないようにします。

前提条件

  • ../../context/target-platform-contract.md に従ってアクティブなターゲットプロファイルが解決されていること。
  • BSP イメージが展開され、ソースツリーが初期化されていること(/jetson-init-image、/jetson-init-source が完了していること)。
  • ヘッドレス/カメラなしのレシピの場合、ワークロードでディスプレイまたはカメラが本当に不要であることを確認してください。

制限事項

  • 検証済みのレシピ(headless、no-camera、swiotlb)のみを利用できます。レシピに含まれないサブシステムの個別の無効化は拒否されます。
  • SWIOTLB の縮小は、処理中の DMA のピーク量によって制限されます。新しい io_tlb_nslabs を超えた場合は変更を元に戻す必要があります。
  • BPMP-DTB の編集がオーバーレイトラッカーに反映されるのは、Customize + Build + Deploy の実行後です。このスキル自体でフラッシュは行いません。

トラブルシューティング

  • MB1 BCT のカーブアウト無効化後に起動できない — 元の misc DTS を復元して再フラッシュしてください。該当のカーブアウトはアクティブな SoC に必須です。
  • io_tlb_used が io_tlb_nslabs を超える — CMDLINE_ADD の swiotlb= を元に戻し、カーネル DTB パーティションを再フラッシュしてください。
  • 再利用可能になった容量が想定より少ない — レシピが実際のデプロイ構成に合致していること(例:ディスプレイが接続されたままになっていないこと)を確認してください。このファイルの dmesg | grep -iE 'firmware|carveout' チェックを使って確認します。
  • 検証時の dmesg に、無効化したサブシステムが引き続きプローブされていると表示される — 変更が bsp_image に反映されていない可能性があります。/jetson-promote-image を再実行してください。

コメント