Skip to content

Seat Management

Seat management covers the full lifecycle of a game seat: updates, software deployment, pre/post session scripts, and rollback.

WARNING

Transitional state observed.SeatUpdater\\pre_session_software_updater.bat still calls net start nvgridsvc, but the newer service package includes GS2 (services\\gs2) and does not include a services\\NvGridSvc directory. Keep this flow as legacy compatibility behavior.

SeatUpdater Service

SeatUpdater handles package management for seat software.

install_seat_packages.py

Downloads and installs seat packages from the update server:

  1. Reads update server from userdata LoggingServerAddresses
    • Falls back to 10.0.21.4 if not set
  2. Downloads package ZIP files
  3. Extracts to temp directory
  4. Executes deploy/install.py in each package

Exit codes:

CodeMeaning
0Success, no reboot needed
212Success, reboot required
500Cannot download packages
600Production zone failure (non-fatal)

pre_session_software_updater.bat

Runs before each session:

batch
python install_seat_packages.py SeatPackage-Startup
net start nvgridsvc

Handles exit codes 0, 2 (service start), 212, 500, 600.

post_session_backuplog.bat

Runs after each session:

batch
python GamestreamLogsMerger.py
python AnalyzeGameStreamMergedLog.py

NvRollbackWrapper

Manages driver rollback when upgrades fail:

  • Monitors driver installation success
  • Rolls back to previous driver version on failure
  • Maintains rollback state in Redis

Seat States

From SeatStateDef protobuf:

The seat goes through these states:

IDLE → INITIALIZING → READY → ALLOCATED → SESSION_STARTING
     → IN_SESSION → SESSION_ENDING → CLEANING_UP → IDLE

Error states can branch to FAILED or MAINTENANCE.

Content Volume Setup

json
{
  "volume_setup": {
    "fastInstallImageSizeGB": 250,
    "imageBufferMB": 1024,
    "systemDriveReservedSpaceMB": 4096
  }
}

The fast install scratch disk is 250GB, with 4GB reserved on the system drive.

Seat Pool

The rig's pool assignment (GS-gl40g_1.br25_2xlarge) determines:

  • Which sessions get allocated to this rig
  • Available resolutions and features
  • Queue priority

Seat Heartbeat

The rig sends periodic heartbeats to the GSG:

json
{
  "enableSeatHeartbeat": true,
  "heartbeatPeriodMs": 60000,
  "heartbeatJitterFactor": 0.1
}

Heartbeat jitter (±10%) prevents thundering herd from many seats syncing simultaneously.

GameSeat2 Transition Notes

The newer service package now includes:

  • services\gs2\gs2-agent.exe
  • services\gs2\mb-repeater.exe
  • services\gs2\dummy-svc.exe

String analysis also exposes:

  • initToLegacy
  • initFromLegacy
  • IsLegacyRequired
  • MessageBusIp / MessageBusPort

This indicates a migration period where GS2 is present while compatibility stubs for legacy seat flows remain compiled in.

Scheduler API

NGS uses v2 API for session and seat messages:

json
{
  "SchedulerServices": {
    "maxBackChannelResponsesStored": 8,
    "useV2ApiForSessionMessages": true,
    "useV2ApiForSeatMessages": true
  }
}

admindesk.top — Reversed & documented from Asgard rig backups and GCIS plugin binaries.