Brandon Schneider
6d4d099625
fix(infra): tier limits leave headroom for device function
...
Each tier now reserves resources for its primary function:
GPU_CUDA: 8GB VRAM (not 12 — keep 4GB for display/compositor)
GPU_VAAPI: 256MB (keep VRAM headroom for desktop)
GPU_APU: 128MB (shared DDR, OS needs bandwidth)
CPU_FFMPEG: 64MB, half cores (leave for OS/k3s)
BATCH: 1500 min/month (reserve 500 for actual CI/CD)
ETHERNET: 500ms timeout (leave bandwidth for SSH/mgmt)
FRAMEBUFFER: 768KB (half — keep display visible, compute in top rows)
WASM: 512B payload, 8ms CPU (leave 2ms for JSON overhead)
DSP: 2048 samples (half FFT, leave for overlap buffer)
ESP32: 512B (WiFi/BLE stack needs ~80KB of 520KB SRAM)
2026-05-30 20:45:50 -05:00
Brandon Schneider
ba1bf871f8
feat(infra): per-tier device limitations for Ray scheduling
...
DeviceLimitations dataclass with hard constraints per tier:
GPU_CUDA: 1GB payload, 16 concurrent, 60s, NVENC, 12GB VRAM
GPU_VAAPI: 512MB payload, 8 concurrent, 60s, VAAPI HW
GPU_APU: 256MB payload, 4 concurrent, 30s, shared DDR
CPU_FFMPEG: 128MB payload, 2 concurrent, 120s, software
BATCH: 64MB payload, 1 concurrent, 6h, 2000 min/month
ETHERNET: 1400B payload, 1 concurrent, 1s, virtio-net
FRAMEBUFFER: 1.5MB payload, 1 concurrent, 100ms, DMA only
WASM: 1KB payload, 1 concurrent, 10ms, 100K req/day
DSP: 16KB payload, 1 concurrent, 5s, FFT only
ESP32: 2KB payload, 1 concurrent, 100ms, Q0_16 scalar
get_limitations(caps) returns actual hardware-aware limits
(vram override, framebuffer capacity, memory override)
2026-05-30 20:44:31 -05:00
Brandon Schneider
cadb38cc1b
feat(infra): add AMD VAAPI + FLAC DSP to FrameDispatcher
...
FrameDispatcher now routes 6 tags:
TAG_STRAND(0x01) → BraidBackend (VCN compute)
TAG_CROSSING(0x02) → BraidBackend (VCN compute)
TAG_PIST(0x03) → BraidBackend (VCN compute)
TAG_LUPINE(0x04) → CUDABackend (NVIDIA CUDA)
TAG_VAAPI(0x05) → VAAPIBackend (AMD/Intel VA-API) ← NEW
TAG_FLAC(0x06) → FLACBackend (PipeWire/FLAC DSP) ← NEW
New backends:
- VAAPIBackend/LocalVAAPIBackend: AMD/Intel hardware encode/decode
- FLACBackend/LocalFLACBackend: FFT spectral analysis, centroid, RMS
- RayVAAPIBackend: Ray actor for VA-API operations
- SyncVAAPIWrapper/SyncFLACWrapper: sync bridges for FrameDispatcher
Capability probe: DSP tier(1) added between FRAMEBUFFER(2) and ESP32(0)
2026-05-30 20:35:42 -05:00
Brandon Schneider
66abf92214
fix(infra): handle Cirrus Logic virtual VGA and DRM naming edge cases
...
- Add Cirrus Logic (0x1013) and virtio (0x1af4) to vendor map
- Fix DRM card parsing for names like "card0-VGA-1"
- Virtual GPUs (cirrus, virtio) never classified as discrete
- Virtual GPUs skip VA-API tier, fall to FRAMEBUFFER
Racknerd microVM (2vCPU, 715MB, Cirrus VGA) correctly classified as
FRAMEBUFFER tier: 1024x768 @ 16bpp = 1.57 MB DMA backplane.
2026-05-30 19:59:38 -05:00
Brandon Schneider
16101a787f
feat(infra): device capability probe with framebuffer fallback
...
device_capability_probe.py: classify every device into a compute tier.
Tiers (highest to lowest):
GPU_CUDA — NVIDIA discrete + CUDA (NVENC, Ray GPU worker)
GPU_VAAPI — AMD/Intel discrete + VA-API (hardware encode)
GPU_APU — AMD integrated, yuvj420p, bandwidth-optimized
CPU_FFMPEG — Software encode only (libx264)
FRAMEBUFFER — /dev/fb0 DMA backplane (8.29 MB/frame at 1080p)
ESP32 — MCU, Q0_16 scalar in FreeRTOS idle hook
RELAY — Network only, no compute
OFFLINE — Unreachable
Features:
- Multi-GPU DRM render node scanning (card0=AMD, card1=NVIDIA)
- APU vs dGPU classification via device name + VRAM heuristics
- Framebuffer detection with /sys/class/graphics/fb0 resolution
- Ray scheduling helpers (get_ray_placement_strategy)
- Cluster probe via SSH
- JSON + human-readable output
2026-05-30 19:57:07 -05:00