>- Reclaim DRAM by disabling unused subsystems across MB1 BCT, MB2 BCT, kernel reserved-memory, and SWIOTLB. Use for headless or no-camera Jetson deployments; not for CPU/GPU frequency tuning.
npx skills add https://github.com/NVIDIA/skills --skill jetson-optimize-memory
Memory is reserved across four layers ordered by boot chronology
(higher row = earlier in boot, closer to hardware):
| Layer | Content | Key files |
|---|---|---|
| MB1 BCT | firmware carveouts | per-module misc DTS |
| MB2 BCT | firmware loading + AST controls | per-module misc DTS |
| Kernel DTS | reserved-memory and driver binding | per-module DTS |
| SWIOTLB | DMA bounce pool size | <module>.conf.common (CMDLINE_ADD) |
Critical rules:
request to disable a carveout/cluster/node not in that table.
controls AND removing the AST that references it.**
of how the source #ifdef/#else looks. Verify the merged binary.
-> OpenRM. Follow the shared derived-platform rule in
target-platform-contract.md; stop on mismatches instead of guessing.
| Keyword | MB1 BCT carveouts | MB2 BCT | Kernel DTS |
|---|---|---|---|
| headless | DCE-family (see chip table) | DCE auxp_controls + DCE AST(s) | display@<addr> (and dce@<addr> if exposed) → disabled |
| no-camera | RCE/VI/ISP-family | RCE auxp_controls (each instance) + RCE AST(s) | recommended: VI/ISP/NVCSI → disabled |
| Scenario | T234 (Orin) | T264 (Thor) |
|---|---|---|
| headless | CARVEOUT_BPMP_DCE, CARVEOUT_DCE, CARVEOUT_DCE_TSEC, CARVEOUT_TSEC_DCE, CARVEOUT_DISP_EARLY_BOOT_FB | CARVEOUT_DCE, CARVEOUT_TSEC_DCE, CARVEOUT_HPSE_DCE, CARVEOUT_DISP_EARLY_BOOT_FB |
| no-camera | CARVEOUT_RCE, CARVEOUT_CAMERA_TASKLIST | CARVEOUT_RCE, CARVEOUT_RCE1, CARVEOUT_RCE_RW, CARVEOUT_VI_TASKLIST, CARVEOUT_VI1_TASKLIST, CARVEOUT_ISP_TASKLIST, CARVEOUT_ISP1_TASKLIST |
> Post-boot: headless → sudo systemctl set-default multi-user.target.
File: Linux_for_Tegra/bootloader/generic/BCT/tegra<chip>-mb1-bct-misc-<module>.dts
(e.g. tegra234-mb1-bct-misc-p3767-0000.dts for Orin Nano,
tegra264-mb1-bct-misc-p3834-0008-p4071-0000.dts for Thor).
For each carveout, add inside the existing carveout node:
aux_info@<CARVEOUT_NAME> {
pref_base = <0x0 0x0>;
size = <0x0 0x0>;
alignment = <0x0 0x0>;
};
File: Linux_for_Tegra/bootloader/generic/BCT/tegra<chip>-mb2-bct-misc-<module>.dts
(includes tegra<chip>-mb2-bct-common.dtsi).
For each target cluster:
auxp_controls@<index>: auxp_controls@<index> {
enable_init = <0>;
enable_fw_load = <0>;
enable_unhalt = <0>;
};
/delete-node/ auxp_ast_config@<idx>;Look up indices in common.dtsi: auxp_controls@N carries a comment
naming its cluster; auxp_ast_config@N has ast_region children whose
carveout = <CARVEOUT_…>; lines identify the owner.
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 — disable display@<addr>, plus dce@<addr> if exposed as
a separate kernel node.
Camera — under host1x@<addr>, disable whichever of vi* / isp*
/ nvcsi exist on the BSP (only emit present nodes):
Locate the display controller node in the decompiled DTS and disable it.
The node's unit address is chip-specific — find it by compatible string
(e.g. nvidia,tegra234-display) rather than hard-coding the address.
host1x@<addr> {
vi0@<addr> { status = "disabled"; };
vi1@<addr> { status = "disabled"; };
isp@<addr> { status = "disabled"; };
isp1@<addr> { status = "disabled"; };
nvcsi@<addr> { status = "disabled"; };
};
The NVIDIA IOMMU covers peripheral DMA, so SWIOTLB is rarely used.
Edit CMDLINE_ADD (never CMDLINE) in Linux_for_Tegra/<module>.conf.common:
# Total bytes = swiotlb_value × 2048; 4 MiB pool:
CMDLINE_ADD="... swiotlb=2048"
After every patched MB1/MB2 BCT .dts, reproduce the BSP's compile +
decompile using the same -D… flags from bct_flags.append(...) in
bootloader/tegraflash_impl_t<chip>.py:
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
Confirm in the merged output:
aux_info@<NAME> (or aux_info@<id>U post macro expansion)has size = <0x0 0x0> and pref_base = <0x0 0x0>.
auxp_controls@<idx> has all three enable_* fields <0>./delete-node/'d auxp_ast_config@<idx> is absent.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
| Scenario | Sysfs | dmesg grep |
|---|---|---|
| Display off | ls /sys/class/drm/ (empty) | tegra-drm\|nvdisplay\|dce\|host1x\|fb0 |
| Camera off | ls /dev/video* 2>/dev/null (none) | rce\|nvcsi\|tegra-camera\|vi0\|vi1\|isp |
| SWIOTLB shrink | cat /sys/kernel/debug/swiotlb/io_tlb_nslabs matches cmdline | swiotlb |
For SWIOTLB: /proc/cmdline must contain swiotlb=<value>, and
watch -n5 cat /sys/kernel/debug/swiotlb/io_tlb_used must stay under
io_tlb_nslabs during full workload — if exceeded, restore original
CMDLINE_ADD and re-flash kernel-dtb.
Cut the unused DRAM carveouts that ship enabled in the reference BSP
when a Jetson deployment skips display, camera, or other peripherals,
freeing the freed bytes for the application. Always edits the four
layers in boot order so an early-stage carveout never outranks a
later-stage shrink.
../../context/target-platform-contract.md.
(/jetson-init-image, /jetson-init-source complete).
need display or camera.
headless, no-camera, swiotlb) areexposed; ad-hoc subsystem disables outside the recipe set are
refused.
io_tlb_nslabs requires reverting the change.
Build + Deploy run; this skill does not flash on its own.
misc DTS and re-flash; the missing carveout is mandatory for the
active SoC.
io_tlb_used exceeds io_tlb_nslabs — revert swiotlb= inCMDLINE_ADD and re-flash the kernel DTB partition.
matched the deployment (e.g. display still attached); use the
dmesg | grep -iE 'firmware|carveout' check in this file to confirm.
dmesg shows the disabled subsystem still probing —the change probably did not promote through to bsp_image; re-run
/jetson-promote-image.
Assess Kubernetes workloads and cluster configuration for AKS Automatic compatibility. Identifies incompatibilities, generates fixes, and guides migration from AKS Standard to AKS Automatic. WHEN: migrate to AKS Automatic, check AKS Automatic readiness, validate manifests for Automatic, assess cluster for Automatic compatibility, fix deployment for Automatic compatibility, identify AKS Automatic migration blockers, is my cluster ready for AKS Automatic.
Discovers available Azure OpenAI model capacity across regions and projects. Analyzes quota limits, compares availability, and recommends optimal deployment locations based on capacity requirements. USE FOR: find capacity, check quota, where can I deploy, capacity discovery, best region for capacity, multi-project capacity search, quota analysis, model availability, region comparison, check TPM availability. DO NOT USE FOR: actual deployment (hand off to preset or customize after discovery), quota increase requests (direct user to Azure Portal), listing existing deployments.
Interactive guided deployment flow for Azure OpenAI models with full customization control. Step-by-step selection of model version, SKU (GlobalStandard/Standard/ProvisionedManaged), capacity, RAI policy (content filter), and advanced options (dynamic quota, priority processing, spillover). USE FOR: custom deployment, customize model deployment, choose version, select SKU, set capacity, configure content filter, RAI policy, deployment options, detailed deployment, advanced deployment, PTU deployment, provisioned throughput. DO NOT USE FOR: quick deployment to optimal region (use preset).
Unified Azure OpenAI model deployment skill with intelligent intent-based routing. Handles quick preset deployments, fully customized deployments (version/SKU/capacity/RAI policy), and capacity discovery across regions and projects. USE FOR: deploy model, deploy gpt, create deployment, model deployment, deploy openai model, set up model, provision model, find capacity, check model availability, where can I deploy, best region for model, capacity analysis. DO NOT USE FOR: listing existing deployments (use foundry_models_deployments_list MCP tool), deleting deployments, agent creation (use agent/create), project creation (use project/create).
Intelligently deploys Azure OpenAI models to optimal regions by analyzing capacity across all available regions. Automatically checks current region first and shows alternatives if needed. USE FOR: quick deployment, optimal region, best region, automatic region selection, fast setup, multi-region capacity check, high availability deployment, deploy to best location. DO NOT USE FOR: custom SKU selection (use customize), specific version selection (use customize), custom capacity configuration (use customize), PTU deployments (use customize).
This skill should be used when working with LaminDB, an open-source data framework for biology that makes data queryable, traceable, reproducible, and FAIR. Use when managing biological datasets (scRNA-seq, spatial, flow cytometry, etc.), tracking computational workflows, curating and validating data with biological ontologies, building data lakehouses, or ensuring data lineage and reproducibility in biological research. Covers data management, annotation, ontologies (genes, cell types, diseases, tissues), schema validation, integrations with workflow managers (Nextflow, Snakemake) and MLOps platforms (W&B, MLflow), and deployment strategies.
Latch platform for bioinformatics workflows. Build pipelines with Latch SDK, @workflow/@task decorators, deploy serverless workflows, LatchFile/LatchDir, Nextflow/Snakemake integration.
Run Python code in the cloud with serverless containers, GPUs, and autoscaling. Use when deploying ML models, running batch processing jobs, scheduling compute-intensive tasks, or serving APIs that require GPU acceleration or dynamic scaling.
Take nvidia/jetson-optimize-memory from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.