Skip to navigation

Troubleshooting

View as Markdown

Find the message or symptom in the tables below. Each table names the place the message appears; Logs lists every log and the commands to read it. After any fix, stop the Safety Core and start it again, as in Stop.

The container stops at start-up

The container checks its options and files before it starts anything. On a problem it prints one of these messages and stops with status 1. For a learning run the message appears in the terminal. For a container started with docker run -d, docker ps -a --filter name=nv-psf --format '{{.Status}}' shows Exited (1), and docker logs nv-psf shows the message. Remove the stopped container with docker rm nv-psf before you start it again.

MessageCauseFix
docker run reports that the container name nv-psf is already in useA container from an earlier start still existsStop and remove it as in Stop
Error: --saim-mode is required and must be learn, active, or skip or the same for --pcm-modeA monitor mode is missing or misspeltPass both --saim-mode and --pcm-mode after the image name; see Required monitors
Error: Unknown option '<option>'The container does not take that option. Its receiver options are --cmd_rx_ip and --cmd_rx_port, with underscores, and it has no --modeUse the options listed in Container options
Error: --saim-mode <mode> conflicts with required_safety_monitor = <n> in /opt/nvidia/psf/bin/nvpss.conf. or the same for --pcm-mode and required_perception_monitorThe monitor modes and nvpss.conf disagree: a monitor in active must have its key at 1, one in learn or skip at 0Use the modes that match the file, or edit your copy of nvpss.conf and mount it; see Required monitors
Error: --skip-pcm conflicts with --pcm-mode <mode>The old option and its replacement disagreeLeave out --skip-pcm
Error: <key> is missing from /opt/nvidia/psf/bin/nvpss.conf., ... is defined more than once ... or ... is not 0 or 1.A required-monitor key in the mounted nvpss.conf is missing, repeated or invalidKeep exactly one required_safety_monitor and one required_perception_monitor line, each 0 or 1
Error: deploymentMode is missing from /opt/nvidia/psf/bin/nvpss.conf.nvpss.conf does not state 2D or 3DAdd deploymentMode = 2D
Error: --app parameter is requiredNo application given in a run that starts the SEI daemonAdd --app atl (or your application)
Error: unsupported app '<app>'--app value not supportedUse atl, pxc, atl,pxc, pxc,atl, atl,atl or pxc,pxc
Error: sensor config file '<file>' not found or not readableThe camera file is not mounted at the container path given with --sensor-configMount the file written in Write the camera file at /opt/nvidia/psf/bin/sensor_config.conf
Error: --sdm-config must contain 1 non-empty comma-separated value(s)No decision maker configuration givenAdd --sdm-config <container path>, one file per application in --app
Error: SDM 1 config '<file>' is not a readable fileThe configuration is not mounted at the container path given with --sdm-configMount it there, read-only
Error: command receiver ports must contain 2 non-empty comma-separated value(s) or Error: each SDM needs a different command receiver portTwo decision makers need two different --cmd_rx_port valuesPass --cmd_rx_port <port>,<port>
Error: SDM configs overlap on EVENT_<n>; use distinct application event codesTwo decision maker configurations bind the same codeUse configurations with different codes; see Decision maker configuration
Error: multi-SDM combinations support CCPLEX only, not --sdm-on-fsiTwo decision makers with --sdm-on-fsiRun one decision maker on the FSI
Error: SDM configs must be supplied to the launcher that starts the SDMs--sdm-config given with --sdm-on-fsiLeave out --sdm-config; the FSI firmware has its bindings built in
Error: monitor log is not writable: /var/log/psf/<saim|pcm>.log or Error: cannot create SDM log '<file>'The log file does not exist in the mounted /var/log/psf, or is not writable by the container userCreate it with mode 666, as in Prepare the log files
Error: SAIM baseline folder '<dir>' does not exist (bind-mount it or pass --baseline-dir) or Error: PCM baseline folder '<dir>' is not readable (bind-mount it or pass --pcm-baseline-dir)The baseline directory is not mountedMount /opt/nvidia/psf/bin/saim_baseline and /opt/nvidia/psf/bin/pcm_baseline as in the Quick Deployment
Error: no SAIM baselines (*_baseline.cfg or *_baseline.cfg.default) found in '<dir>'The mounted SAIM baseline directory is emptyMount the directory the Debian package installed, or learn into it; see Baselines
Error: SAIM baseline folder '<dir>' is not writable for LEARN or Error: PCM baseline folder '<dir>' is not writable for LEARNA learning run got a read-only baseline mountMount the baseline directories without :ro for learning
Error: PCM config '<file>' not found or not readableThe PCM configuration is not mounted where the container reads itMount your copy at /opt/nvidia/psf/bin/pcm_monitor.cfg, or leave the mount out to use the image’s copy
Error: /run/nvpsf is a symlink; refusing to use it ...The mounted /run/nvpsf is a link (SDM on FSI only)sudo rm /run/nvpsf && sudo mkdir -m 1777 /run/nvpsf, then start again
Error: /run/nvpsf is not writable by nvidia (mode <mode>, ...The mounted /run/nvpsf has the wrong mode (SDM on FSI only)sudo chmod 1777 /run/nvpsf
Error: Failed to start <binary>A process exited during start-up, for example the decision maker on a bad configurationRead the lines just before it in docker logs nv-psf and the tables below
Process <pid> has exited unexpectedlyA process in the container stopped while running; the container then stops everythingRead docker logs nv-psf, /var/log/psf/saim.log and /var/log/psf/pcm.log
Error: SAIM exited (status <n>) or Error: PCM exited (status <n>)A monitor stopped, or could not learn its baselineRead its log, /var/log/psf/saim.log or /var/log/psf/pcm.log; see the Perception Monitor table

SEI daemon and container

These messages appear in docker logs nv-psf. Messages from the SEI daemon, NvPSD Gateway and MDX client also appear in /var/log/psf/psf.log.

MessageCauseFix
Retired configuration key present; refusing to start with key=PSSDToPSDComBackendThe key is no longer supportedDelete the line from nvpss.conf
Required configuration keys are missing; refusing to start, after Error: Required config key missing: <key> linesnvpss.conf lacks a mandatory keyAdd each named key; compare with the demo nvpss.conf
deploymentMode is required but missing; refusing to start or enableFusion is required but missing; refusing to startMandatory key missingAdd deploymentMode = 2D and enableFusion = true
<key> is not a plain decimal integer; refusing to start or <key> is out of range; refusing to startA required_* key has a bad valueUse 0 or 1 for the monitors and 0 to 8 for required_mdx_instances
Failed to load sensor config from <path>: <reason>The camera file is malformed. <reason> is one of malformed line ..., duplicate pipelineId, duplicate sensorName, pipelineId out of range [1..8], too many entries (max 8), empty rtspUrlFix the named problem in the file passed with --sensor-config
nvpsf_transport: SO_RCVBUF granted <n> bytes but <m> are required ...; raise net.core.rmem_max (or SO_SNDBUF and wmem_max)Kernel socket buffers too smallRaise both to at least 836436; see Kernel socket buffers
nvpsf_transport: peer GID <g> does not match the required PSF group <G>.A process on the host with another primary group ID tried to connect to the container, so its connection is refused, for example fsicom-agent or an SDM started without the container user’s group. A decision maker refused this way holds its safe stateStart the process with the container user’s group ID, as in SDM on FSI, or start the decision makers in the container, as in Quick Deployment. See Shared process group
nvpsf_transport: bind(/run/nvpsf/<socket>) failed: Permission denied/run/nvpsf mode is wrongsudo chmod 1777 /run/nvpsf
nvpsf_transport: bind(<path>) refused -- a LIVE server is already listening on this path.Another Safety Core is already running and shares the socket directoryStop it: docker ps lists a running Safety Core container; stop it as in Stop
Error: baseline file '<name>_baseline.cfg' (or '<name>_baseline.cfg.default') not found for sensor '<name>'.No baseline for that camera nameLearn baselines for your cameras
[Config] BaselineValues: <file> was learned on a 0x0 tile grid but this build uses 15x15. Re-run LEARN to regenerate this baseline.The baseline was learned by an earlier release, or the package on the host is older than the image, so the mounted templates are oldLearn the camera again; install the Debian package of the same release as the image
[<camera>] Baseline validation failed or <file> is incomplete. Re-run LEARN to regenerate it.The learned baseline is unusable, usually from too few framesLearn again with a steady stream and the default --learn-duration
In a learning run, [QA] <w>x<h> is not compatible with the 15x15 analysis grid ([QA-PVA] on IGX Thor) or another [QA] <w>x<h> ... size error, then FATAL: frame quality analyzer cannot startThe camera’s frame size is not 1920×1080 or 3840×2160. SAIM learns no baseline for that cameraStream the camera at 1920×1080 or 3840×2160 and learn its baseline at that size
[<camera>] profile was learned at <w>x<h> but the stream is <w>x<h>; re-run LEARN for this cameraThe camera’s frame size differs from its baseline’s, for example because it changed or is not 1920×1080 or 3840×2160. SAIM reports the camera invalid and stops watching itStream the camera at 1920×1080 or 3840×2160 and learn it again at that size
[<camera>] LEARN: tiles: <n> series too short for a band; run LEARN longerThe learning run was too short for some tile checks. The baseline is saved, but those checks can never alert for that cameraLearn again with a longer --learn-duration
Error: failed to initialize CUDA, Error: no CUDA GPUs found, [<camera>] CUDA initialization failed or [<camera>] Decoder capability query failedSAIM cannot use the GPU or its video decoderCheck the driver and the NVIDIA Container Toolkit, and that the docker run command has <gpu-options> and -e NVIDIA_DRIVER_CAPABILITIES=compute,utility,video
[<camera>] RTSP connection failed, retrying every 5sIn active mode SAIM cannot open that camera. It keeps retrying; a camera that was never trusted stays at its start-up state and is not counted as failedCheck the URL with ffprobe, and rewrite the camera file if VSS was redeployed. SAIM picks the camera up when it streams
[<camera>] RTSP: exceeded 5 connection retries (<reason>), giving upinit failed: the URL in the camera file is malformed; SAIM stops watching that camera, and a learning run stops every camera. connection failed or stream interrupted: a learning run could not open or keep a camera, and stops every cameraFix the URL, or check the stream with ffprobe, then start again
[<camera>] analyzer permanent fault; shutting down this threadRepeated frame-analysis failures on one camera. SAIM reports it invalid until SAIM restartsCheck that stream and GPU load, then start the Safety Core again
Dropping event: sensor not in sensor_config, so it has no pipelineID: <name>Perception reports a camera name that is not in the camera fileMake sensorName equal the VST sensor name
Event from unregistered sensor: <id>, Rejecting event: pipelineID <id> not in sensor_config, Rejecting event: sensorIdentifier '<name>' does not match sensor_config entry ... or Rejecting event: empty sensorIdentifier for pipelineID <id> ...An event’s pipeline ID is above maxPipelines, does not match the camera file, or carries no sensor name. The SEI daemon drops the eventMake maxPipelines in nvpss.conf cover every pipeline ID, use one camera file for every component, and set sensorIdentifier to the configured name
PSS_SAFETY_MONITOR_LOST, PSS_PERCEPTION_MONITOR_LOST or PSS_MDX_CLIENT_LOST with reason=never_registeredA required source did not register within about 4 minutes of start-upRead that source’s log (saim.log, pcm.log, or the container output for the MDX client); fix it, then release the safe state
The same lines with another reason=, such as heartbeat_budget_exhausted or connection_droppedA source stopped after it registeredSame as above

Decision maker

These messages appear in /var/log/psf/atl_sdm.log (or pxc_sdm.log). Messages printed before the log opens are in docker logs nv-psf.

MessageCauseFix
error: --config <file>: <reason>, for example line N: unknown key 'k'The decision maker configuration is invalidFix the named line; compare with the shipped sample
ATL: cannot load the reviewed sensor set; refusing to start: <reason>: <path>sensor_pipelines_config.conf is missing or malformedFix the mounted sensor_pipelines_config.conf, or leave the mount out to use the image’s copy
SDM: psdGateway transport not available at launch (UNIX_SOCKET); waiting for the gateway, repeatedThe decision maker cannot connect to the NvPSD GatewayCheck docker logs nv-psf for the gateway, the socket buffers and the group ID messages above
SDM: the gateway refused this SDM's registration; reason=<reason>The gateway is full, rate-limited the registration or found it malformedStop extra decision makers; start the Safety Core again
ATL: DecisionRequest freshness timeout; entering safe holdNo decision request for 7 secondsCheck that the container is running and the SEI daemon is up
HB-PSD: gateway HB fault latched (tier 3) — local fail-safe, no PSS connectionGateway heartbeats lost for about 55 secondsSame as above
ATL: Gateway DecisionRequest sequence gap; entering safe holdA decision request was lost on the wayLook for DecisionRequest dropped, consumer not keeping up in docker logs nv-psf; release once recovered
ATL: SW_FAIL received — triggering safe hold; cause=<n> (...)The SEI daemon reported a fault. The note in brackets names a lost source when there is oneFix the named source, then release
ATL: AI pipeline reported INVALID; entering safe holdPCM no longer trusts perceptionSee the PCM row below
ATL: All safety-relevant sensors failed; entering safe holdSAIM reports every reviewed camera invalidCheck the cameras and saim.log; release when they recover
WARNING: No acknowledgment received for command: <command> (SeqNo: <n>) after 3 secondsNo command receiver answers on --cmd_rx_portStart the receiver on that port
SDM: dropping PLC packet with unsupported command, right after a releaseThe reference receiver acknowledges the release responseNo action needed

Perception Monitor

These messages appear in /var/log/psf/pcm.log, after the [<date> <time>] [PCM][<level>] prefix.

MessageCauseFix
-> AI_PIPELINE_INVALID active=[health]A container in PCM’s list stopped, paused, restarted, turned unhealthy or disappeared after PCM had seen itStart the container again; then release the safe state. If the list does not match this host, see Required monitors
-> AI_PIPELINE_INVALID active=[dvm]The data check found a fault on mdx-frames: a camera that stopped sending, a camera not in the baseline, stale frames, unusable ROI or proximity data, or messages that cannot be decodedCheck perception. If the cameras or the decision maker configuration changed, learn again
checks: container_health=... data_validation=off (no baseline)No usable PCM baseline remains: none is installed, or it is unreadable or corrupt (invalid or unreadable baseline camera set, malformed or conflicting baseline), or it was learned for other decision makers (decision mapping changed for <camera>). PCM checks only the containersRead the warnings logged just before it. Reinstall the package for the reference files, or learn the baselines again with the same --app and --sdm-config as this run
DVM: decision mapping changed for <camera>; baseline not used, re-run LEARNThe baseline was learned with other --app, --sdm-config or --event-mapping valuesSame as above
nothing is being checked (causes above); PCM stays registered with PSS but sends no VALID/INVALIDBoth checks are off, for example no baseline and no container in the list is foundFix the causes logged just before it
not checking <n> listed container(s) that are not present: <names> (checked once they appear)Containers in PCM’s list do not run on this hostCorrect the list; see Required monitors
Docker socket unreachable; container health is NOT checked until Docker answers againPCM cannot reach /var/run/docker.sockCheck that Docker is running on this host
Failed to register with PSS daemon after 6 attempts. Exiting.The SEI daemon was not reachable. The container then stopsRead /var/log/psf/psf.log, then start again
cannot read PCM monitor config or [fault_aggregator] requires bad_ticks_to_invalid and good_ticks_to_validThe mounted pcm_monitor.cfg is unreadable, or is a copy from an earlier release that lacks the [fault_aggregator] section. PCM exits and the container stopsStart again from /opt/nvidia/psf/bin/pcm_monitor.cfg and repeat your edits
DVM: baseline write skipped: ...A learn run could not record a usable baseline, for example because no frames arrived on mdx-frames or a camera’s frame rate was unstable. The previous baseline is keptRun the Kafka check, then learn again

Command receiver

These messages appear in the receiver’s terminal.

MessageCauseFix
Error binding socket: Address already in useAnother process, such as VST’s overlay listener, uses the portGive the receiver a free port with -p, and the same port to --cmd_rx_port
cmd_rx: upstream CMD_HEARTBEAT fault latched (tier 3) — local fail-safe, no PSS — stoppingNo heartbeat from the decision maker for about 55 secondsCheck that the Safety Core runs and that --cmd_rx_port equals the receiver’s -p, then start the receiver again
Dropped packet from unexpected SDM senderThe decision maker runs on another machineStart the receiver with --sdm_ip <safety-core-host-ip>
Invalid packet identifier: 0x<nn>The receiver does not match the applicationUse atl_sdm_cmd_receiver for the forklift safety function and proximity_sdm_cmd_receiver for Proximity Monitoring
Ignoring safe-release input until SDM reports a release-ready safe state.No safe state is heldNo action needed
safe-release DENIED (SeqNo <n>) — latch cause still active.A fault is still activeSee Release a latched safe state

Perception and cameras

SymptomCauseFix
Commands never change and atl_sdm.log has no ATL: Forklift entered trailer linesNo tripwire or ROI events reach the Safety CoreRun the calibration and Kafka checks. Check that the tripwire and ROI IDs in the calibration equal the rule_id values in the event mapping
VST lists a camera as online but ffprobe fails on its URLThe proxy stream is staleRefresh or re-add the camera in VST, then write the camera file again
Adding a VST camera fails because the name existsA camera with that name is left from an earlier runRemove the old camera in VST, or use a new name and update the camera file
SAIM reports cameras invalid after VSS was redeployed or the host rebootedVST issued new stream URLsWrite the camera file again and start the Safety Core again
sudo is needed to delete baseline filesThe container user or root wrote themDelete them with sudo rm

Decision maker on the FSI

These messages appear in the terminal that runs fsicom-agent.

MessageCauseFix
Stops at [INIT] Initializing FSI communication..., or [ERROR] FSI COM initialization failednvFsiCom is not running, or the FSI firmware is not loadedStart nvFsiCom before fsicom-agent; flash the firmware and reset the board; see SDM on FSI
[ERROR] Reading channel configuration failedThe device tree lacks the FSI communication channelFlash the BSP and SEP again
[GW] Awaiting NvPSDGateway (UNIX_SOCKET)... and never [GW] Connected to gatewayThe gateway is not up, the container was started without -v /run/nvpsf:/run/nvpsf, or the socket buffers are below 5283840Check docker logs nv-psf and the start command; raise the buffers as in SDM on FSI
nvpsf_transport: peer GID <g> does not match the required PSF group <G>., then nvpsf_transport: server credential rejected; refusing to treat the connection as trustedfsicom-agent runs with another primary group ID than the gateway in the containerStop it and start it again with sudo setpriv --regid <container-gid> --keep-groups --, as in SDM on FSI
[GW] The gateway refused this agent's registration; reason=<reason>The gateway refused the registrationStop other decision makers, then start again
The receiver logs UTC epoch: 0.000000 for every commandThe FSI decision maker leaves the time stamp at zeroNo action needed

launch_hoisa.sh with the Docker runtime

These come from a control-plane run of launch_hoisa.sh --runtime docker, which starts the SDMs or fsicom-agent on the host with the container user’s group. See Host processes and the container’s group.

MessageCauseFix
Error: 'sudo -n setpriv' is not available; install util-linux and allow setpriv for passwordless sudo, ...setpriv is missing, or sudo asks for a password for itInstall util-linux and run the launcher as root, or allow setpriv for passwordless sudo
Error: Docker user-namespace remapping/rootless mode is not supported: ...Docker runs with userns-remap or in rootless mode, so no host process can share the container’s group IDRun the launcher against a Docker daemon without user-namespace remapping, start the container directly as in Quick Deployment, or use --runtime host
Error: cannot read the Docker security options (docker info)Docker answered, but docker info could not report its security options, for example on an old Docker releaseUse a current Docker Engine
Error: cannot read the GID of user nvidia in container <name>, or Error: container <name> runs PSF processes with GID '<gid>', which cannot be used for host peersThe container stopped right after it started, or the image’s nvidia user is missing or has an unusable group ID. The launcher removes the container and starts no SDMCheck the image with docker run --rm --entrypoint id <image> nvidia; use a Safety Core image from this release
Warning: GID <gid> of the Safety Core container is also used on this host ... or Warning: UID <uid> of the Safety Core container belongs to <j> host account(s).Host accounts share the container user’s group or user ID and can reach the Safety Core sockets. The launcher continuesRun the getent commands in the warning; see Host accounts with the container’s group

Logs

LogWritten byRead it with
Container outputEverything in the nv-psf container: SEI daemon, NvPSD Gateway, MDX client, decision makers, SAIM and PCM, including their error output. Gone once the container is removeddocker logs nv-psf 2>&1 | less
/var/log/psf/psf.logThe system log of the container processes (SEI daemon, NvPSD Gateway, MDX client)tail -f /var/log/psf/psf.log
/var/log/psf/atl_sdm.log, /var/log/psf/pxc_sdm.logThe decision makers in the containertail -f /var/log/psf/atl_sdm.log
/var/log/psf/saim.logSAIMtail -f /var/log/psf/saim.log
/var/log/psf/pcm.logPCM, in the container. Each line starts with [<date> <time>] [PCM][INFO], [PCM][WARNING] or [PCM][ERR]tail -f /var/log/psf/pcm.log
Receiver consoleThe command receiver: latch, clear and release events, and errorsThe receiver’s terminal
/tmp/cmdrx.logThe command receiver: every packet received and acknowledgedtail -f /tmp/cmdrx.log
fsicom-agent terminalfsicom-agent, when the decision maker runs on the FSIThe terminal that runs it
FSI UARTThe decision maker on the FSItcu_muxer gives the device node

Error messages from the socket layer (nvpsf_transport: ...) of processes in the container appear only in the container output, not in psf.log. The log files are appended to across runs; check the time stamps.

The searches that answer most questions:

# Faults that latched the safe state, and their recovery
grep -E 'safe hold|fault latched|latch awaits PLC release|safe-release' /var/log/psf/atl_sdm.log | tail -n 20
# Sources lost, refused connections and configuration errors in the container
docker logs nv-psf 2>&1 | grep -E '_LOST|does not match the required PSF group|refusing to start|nvpsf_transport' | tail -n 20
# Perception Monitor verdicts
grep -E 'AI_PIPELINE_(VALID|INVALID)' /var/log/psf/pcm.log | tail -n 5
# Commands the receiver got
grep 'Received ATL command' /tmp/cmdrx.log | tail -n 5

For a browser view of these logs, see Log Viewer.