SysTutorials

Getting vCPU Thread IDs in QEMU/KVM

When you’re managing KVM virtual machines on a Linux host, you often need to identify which OS threads correspond to vCPU threads. This is essential for CPU pinning, performance analysis, and troubleshooting resource contention.

Using virsh to List vCPU Thread IDs

The most straightforward approach is through virsh, libvirt’s command-line tool:

virsh vcpuinfo <domain-name>

This returns output showing vCPU number, CPU affinity, and crucially, the PID of the vCPU thread:

VCPU:           0
CPU:            2
State:          running
CPU time:       12.3s
PID:            2847

For a compact view of just the PIDs:

virsh vcpuinfo <domain-name> | grep PID

If you need vCPU info for all running domains:

for vm in $(virsh list --name); do
  echo "VM: $vm"
  virsh vcpuinfo "$vm" | grep -E "VCPU|PID"
done

Using ps and ps aux

Once you have the PID from virsh, you can monitor that specific thread’s resource usage:

ps -p <pid> -o pid,tid,comm,vsz,rss,%cpu,%mem

To see all threads associated with a QEMU process and filter for vCPU threads:

ps -eLf | grep qemu | grep <pid>

The output shows thread IDs (TID) which you can cross-reference with virsh output.

Checking CPU Affinity

After identifying vCPU threads, verify their CPU affinity with taskset:

taskset -c -p <tid>

This shows which CPUs the thread is pinned to. To pin a vCPU thread to specific CPUs:

taskset -c 0,1 -p <tid>

Using /proc for Direct Access

You can also inspect the host kernel’s perspective directly:

cat /proc/<pid>/status | grep VmPeak
ls /proc/<pid>/task/

Each entry in the task directory represents a thread. Combined with /proc/<pid>/stat, you can get detailed scheduling information.

Libvirt Domain XML Method

For static configuration, check the domain XML:

virsh dumpxml <domain-name> | grep -A5 vcpu

This shows the vCPU configuration but not runtime thread mappings. For that, you still need virsh vcpuinfo.

Performance Analysis with eBPF Tools

For deeper vCPU performance insights, use eBPF-based tools like bpftrace or perf:

perf stat -p <pid> -e context-switches,cpu-migrations sleep 10

This captures scheduling events without the overhead of traditional profiling. For even more granular analysis:

bpftrace -e 'tracepoint:sched:sched_switch { if (pid == <pid>) printf("%s\n", comm); }'

Common Use Cases

CPU pinning for low-latency workloads:

Identify vCPU PIDs with virsh, then pin them to isolated CPUs using taskset or cgroup v2:

systemctl set-property --runtime qemu-system-x86_64.scope CPUAffinity=2-5

Monitoring specific vCPU load:

watch -n 1 'ps -p <vcpu-pid> -o %cpu,%mem,comm'

Correlating host and guest metrics:

Keep a mapping of vCPU PIDs during monitoring so you can correlate host-side CPU time with guest-side workload metrics from tools like atop or custom monitoring agents.

Troubleshooting

If virsh vcpuinfo returns no PIDs, the VM may be paused or the vCPU thread hasn’t started. Check the domain state:

virsh domstate <domain-name>

For offline analysis, inspect the QEMU process arguments to understand vCPU configuration:

ps aux | grep qemu | grep <domain-name>

The command line includes the -smp option showing CPU topology, though it won’t reveal active thread IDs.

2026 Comprehensive Guide: Best Practices

This extended guide covers Getting vCPU Thread IDs in QEMU/KVM with advanced techniques and troubleshooting tips for 2026. Following modern best practices ensures reliable, maintainable, and secure systems.

Advanced Implementation Strategies

For complex deployments, consider these approaches: Infrastructure as Code for reproducible environments, container-based isolation for dependency management, and CI/CD pipelines for automated testing and deployment. Always document your custom configurations and maintain separate development, staging, and production environments.

Security and Hardening

Security is foundational to all system administration. Implement layered defense: network segmentation, host-based firewalls, intrusion detection, and regular security audits. Use SSH key-based authentication instead of passwords. Encrypt sensitive data at rest and in transit. Follow the principle of least privilege for access controls.

Performance Optimization

Troubleshooting Methodology

Follow a systematic approach to debugging: reproduce the issue, isolate variables, check logs, test fixes. Keep detailed logs and document solutions found. For intermittent issues, add monitoring and alerting. Use verbose modes and debug flags when needed.

These tools complement the techniques covered in this article:

Integration with Modern Workflows

Modern operations emphasize automation, observability, and version control. Use orchestration tools like Ansible, Terraform, or Kubernetes for infrastructure. Implement centralized logging and metrics. Maintain comprehensive documentation for all systems and processes.

Quick Reference Summary

This comprehensive guide provides extended knowledge for Getting vCPU Thread IDs in QEMU/KVM. For specialized requirements, refer to official documentation. Practice in test environments before production deployment. Keep backups of critical configurations and data.

← All posts