LogoTensorFusion Docs
LogoTensorFusion Docs
Homepage

Getting Started

OverviewKubernetes InstallVM/Server Install(K3S)Helm Quick InstallHost/GuestVM InstallTensorFusion Architecture

Application Operations

Create WorkloadAnnotation Usage ScenariosConfigure AutoScalingMigrate Existing WorkloadBest Practices

Customize AI Infra

Production-Grade DeploymentConfig QoS and BillingBring Your Own CloudManaging License

Maintenance & Optimization

Upgrade ComponentsSetup AlertsGPU Live MigrationPreload ModelOptimize GPU Efficiency

Troubleshooting

HandbookTracing/ProfilingQuery Metrics & Logs

Reference

Helm Install Values
Kubernetes EventsTensorFusion Metrics ReferenceBenchmark TestingCommand Line ReferenceGPU/Driver/OS Support MatrixTensorFusion Security Whitepaper

Comparison

Compare with NVIDIA vGPUCompare with MIG/MPSCompare with NVIDIA Run:aiCompare with HAMi
For System Admins

TensorFusion Metrics Reference

TensorFusion writes its metrics and component logs to GreptimeDB as nine tables, all prefixed with tf_. This page lists every table, its tags and its fields, so you can write SQL for dashboards, alert rules and cost reports.

How metrics are collected

SourceTablesInterval
Controllertf_system_metrics, tf_pool_metrics, tf_node_metrics, tf_gpu_metrics, tf_worker_resources, tf_gpu_allocation1 minute
Hypervisor (one per GPU node)tf_gpu_usage, tf_worker_usage1 minute by default, set with the hypervisor flag -metrics-interval
Vector (log collection)tf_system_logContinuous

The controller and the hypervisor append metrics to a local file. A Vector sidecar tails the file and posts the lines to GreptimeDB over the InfluxDB line protocol. Metrics stay inside your cluster unless you point the chart at an external GreptimeDB.

Three keys under dynamicConfig in the Helm values control this pipeline:

KeyDefaultMeaning
metricsTTL30dRetention period of every tf_ table. Changes apply without a restart.
metricsFormatinfluxLine format written to the metrics file: influx, json or otel. The bundled Vector sink expects influx.
metricsExtraPodLabels{}Map of Pod label key to tag name. Each listed label is copied onto tf_worker_resources and tf_gpu_allocation rows as an extra tag.

Conventions

  • Tags identify a time series and are indexed. Fields are the measured values.
  • Every table has a time index column, greptime_timestamp, written with millisecond precision. Tables created by the start-up DDL of earlier releases use ts instead; see which one a cluster has with SELECT table_name, column_name FROM information_schema.columns WHERE semantic_type = 'TIMESTAMP';.
  • TFLOPS values are FP16 TFLOPS. VRAM values are bytes. Fields whose name contains percent or percentage range from 0 to 100.
  • "Allocated" means the sum of workload requests. "Limited" means the sum of workload limits.
  • "Virtual capacity" is the physical capacity multiplied by the pool's oversubscription ratio.

Cluster and pool tables

tf_system_metrics

Scheduling and scaling counters, one row per pool. The counters are cumulative since the controller started and reset when it restarts, so query them as a difference over a time window.

TagDescription
poolGPUPool name
FieldTypeDescription
total_workers_cntint64Workers currently running in the pool
total_nodes_cntint64GPU nodes currently in the pool
total_allocation_success_cntint64Successful GPU allocations
total_allocation_fail_cntint64Failed GPU allocations
total_scale_up_cntint64Reserved for scale-up events. Not incremented in the current release; always 0.
total_scale_down_cntint64Reserved for scale-down events. Not incremented in the current release; always 0.
total_topo_satisfied_cntint64Scheduling attempts where at least one node met the GPU topology requirement
total_topo_unsatisfied_cntint64Scheduling attempts where no node met the GPU topology requirement
total_topo_fallback_cntint64Scheduling attempts that fell back to a looser topology
total_topo_search_degraded_cntint64Scheduling attempts where the topology search ran in degraded mode

The four total_topo_* fields are written only after the scheduler has handled at least one allocation for the pool.

tf_pool_metrics

Capacity and allocation summary per pool.

TagDescription
poolGPUPool name
phaseGPUPool phase
FieldTypeDescription
allocated_tflopsfloat64TFLOPS requested by workloads
allocated_tflops_percentfloat64Requested TFLOPS as a share of physical capacity
allocated_tflops_percent_virtualfloat64Requested TFLOPS as a share of virtual capacity
allocated_vram_bytesfloat64VRAM requested by workloads
allocated_vram_percentfloat64Requested VRAM as a share of physical capacity
allocated_vram_percent_virtualfloat64Requested VRAM as a share of virtual capacity
limited_tflopsfloat64Sum of workload TFLOPS limits
limited_tflops_percent_virtualfloat64TFLOPS limits as a share of virtual capacity
limited_vram_bytesfloat64Sum of workload VRAM limits
limited_vram_percent_virtualfloat64VRAM limits as a share of virtual capacity
gpu_countint64GPUs in the pool

Node and GPU tables

tf_node_metrics

Allocation and hardware cost per GPU node.

TagDescription
nodeGPUNode name
poolGPUPool name
phaseGPUNode phase
FieldTypeDescription
allocated_tflopsfloat64TFLOPS requested by workloads on the node
allocated_tflops_percentfloat64Requested TFLOPS as a share of the node's physical capacity
allocated_tflops_percent_virtualfloat64Requested TFLOPS as a share of the node's virtual capacity
allocated_vram_bytesfloat64VRAM requested by workloads on the node
allocated_vram_percentfloat64Requested VRAM as a share of the node's physical capacity
allocated_vram_percent_virtualfloat64Requested VRAM as a share of the node's virtual capacity
gpu_countint64GPUs on the node
raw_costfloat64Hardware cost of the node's GPUs since the previous sample, in USD, from the hourly price of each GPU model

tf_gpu_metrics

Capacity and allocation per GPU, as seen by the scheduler.

TagDescription
gpuGPU resource name
nodeGPUNode name
poolGPUPool name
gpu_modelGPU model, for example A10G
phaseGPU phase
FieldTypeDescription
capacity_tflopsfloat64TFLOPS capacity of the GPU
available_tflopsfloat64TFLOPS not yet requested
allocated_tflopsfloat64TFLOPS requested by workloads
allocated_tflops_percentfloat64Requested TFLOPS as a share of capacity
capacity_vram_bytesfloat64VRAM capacity of the GPU
available_vram_bytesfloat64VRAM not yet requested
allocated_vram_bytesfloat64VRAM requested by workloads
allocated_vram_percentfloat64Requested VRAM as a share of capacity

tf_gpu_usage

Hardware readings per physical GPU, reported by the hypervisor through the vendor library.

TagDescription
uuidGPU UUID, lowercase
nodeGPUNode name
poolGPUPool name
FieldTypeDescription
compute_percentagefloat64GPU utilization
memory_bytesint64VRAM in use
temperaturefloat64GPU temperature in °C
power_usagefloat64Power draw in watts
rxfloat64PCIe receive throughput in bytes per second
txfloat64PCIe transmit throughput in bytes per second
memory_percentagefloat64Reserved. The current hypervisor reports 0; divide memory_bytes by capacity_vram_bytes from tf_gpu_metrics instead.
compute_tflopsfloat64Reserved. The current hypervisor reports 0.

The table also has the columns graphics_clock_mhz, sm_clock_mhz, memory_clock_mhz, video_clock_mhz, nvlink_rx and nvlink_tx. They are filled only when the vendor library reports them as extra metrics; the bundled NVIDIA library does not, so they are normally empty.

Workload tables

tf_worker_resources

Requests, limits and billed cost per worker Pod, recorded by the controller.

TagDescription
workerWorker Pod name
workloadTensorFusionWorkload name
namespaceNamespace of the worker
poolGPUPool name
qosQoS level: low, medium, high or critical. Defaults to medium.
FieldTypeDescription
tflops_requestfloat64TFLOPS request per GPU
tflops_limitfloat64TFLOPS limit per GPU
vram_bytes_requestfloat64VRAM request per GPU
vram_bytes_limitfloat64VRAM limit per GPU
gpu_countint64GPUs allocated to the worker
raw_costfloat64Cost of the worker since the previous sample, in USD, from the pool's QoS pricing. 0 when the pool has no price for this QoS level.
readyboolWhether the worker Pod is ready

raw_cost is an increment, not a running total. Sum it over a time range to get the cost for that period.

tf_worker_usage

Actual GPU usage per worker and per GPU, measured by the hypervisor. A worker that uses two GPUs produces two rows per sample.

TagDescription
workerPod UID of the worker
pod_nameWorker Pod name
workloadTensorFusionWorkload name, or unknown
namespaceNamespace of the worker
poolGPUPool name
nodeGPUNode name
uuidUUID of the GPU the row refers to
FieldTypeDescription
compute_percentagefloat64GPU utilization of the worker's processes, summed
memory_bytesint64VRAM used by the worker's processes
memory_percentagefloat64VRAM used as a share of the worker's VRAM limit
compute_tflopsfloat64Reserved. The current hypervisor reports 0.

The columns compute_throttled_cnt, vram_freezed_cnt and vram_resumed_cnt exist in the table schema, but the current hypervisor does not write them.

Note that worker holds the Pod name in tf_worker_resources and the Pod UID in tf_worker_usage. To join the two tables, match tf_worker_resources.worker with tf_worker_usage.pod_name.

tf_gpu_allocation

Which GPUs each Pod holds, one row per Pod.

TagDescription
podPod name
namespaceNamespace of the Pod
pod_uuidPod UID
nodeNode the Pod runs on
gpu_nameComma-separated names of the allocated GPUs
gpu_model_indexComma-separated model:index pairs, for example A10G:0,A10G:1
FieldTypeDescription
gpu_countint64GPUs allocated to the Pod

Log table

tf_system_log

Container logs of the controller, the hypervisors and the workers, collected by Vector.

ColumnTypeDescription
componentstringValue of the Pod label tensor-fusion.ai/component: operator, hypervisor or worker
namespacestringNamespace of the Pod
podstringPod name
containerstringContainer name
messagestringLog line, full-text indexed
streamstringstdout or stderr
timestampstringTime the line was written
greptime_timestamptimestampTime index, millisecond precision

Example queries

Requested versus used VRAM per workload over the last hour:

SELECT r.workload,
       max(r.vram_bytes_request) AS requested_bytes,
       max(u.memory_bytes)       AS peak_used_bytes
FROM tf_worker_resources r
JOIN tf_worker_usage u ON r.worker = u.pod_name
WHERE r.greptime_timestamp > now() - INTERVAL '1 hour'
  AND u.greptime_timestamp > now() - INTERVAL '1 hour'
GROUP BY r.workload;

Cost per namespace over the last day:

SELECT namespace, sum(raw_cost) AS cost_usd
FROM tf_worker_resources
WHERE greptime_timestamp > now() - INTERVAL '1 day'
GROUP BY namespace;

Next steps

  • Query metrics and logs shows how to connect to GreptimeDB.
  • Set up alerts covers alert rules built on these tables.

Kubernetes Events

Previous

Benchmark Testing

Next

Table of Contents

How metrics are collected
Conventions
Cluster and pool tables
tf_system_metrics
tf_pool_metrics
Node and GPU tables
tf_node_metrics
tf_gpu_metrics
tf_gpu_usage
Workload tables
tf_worker_resources
tf_worker_usage
tf_gpu_allocation
Log table
tf_system_log
Example queries
Next steps