Skip to main content
Version: v0.41.0

profile_cpu

The profile cpu gadget takes samples of stack traces.

Getting started

Running the gadget:

$ kubectl gadget run ghcr.io/inspektor-gadget/gadget/profile_cpu:v0.41.0 --map-fetch-interval 0 [flags]

Guide

Here we deploy a small demo pod "random":

$ kubectl run --restart=Never --image=busybox random -- sh -c 'cat /dev/urandom > /dev/null'
pod/random created

Using the profile cpu gadget, we can see the list of stack traces. The following command filters only for pods named "random", execute the command and interrupt it after ~30 seconds. The --kernel-stacks-only option is passed to show only the kernel stack traces.

$ kubectl gadget run ghcr.io/inspektor-gadget/gadget/profile_cpu:v0.41.0 --podname random --kernel-stacks-only --map-fetch-interval 0

After a while press with Ctrl-C to stop trace collection

$ kubectl gadget run ghcr.io/inspektor-gadget/gadget/profile_cpu:v0.41.0 --timeout 5 --podname random --kernel-stacks-only
K8S.NODE K8S.NAMESPACE K8S.PODNAME K8S.CONTAINERNAME PID COMM SAMPLES KERN_STACK
minikube-docker default random random 38130 containerd-shim 5 [0]chacha_permute; [1]ge…
minikube-docker default random random 38130 containerd-shim 1 [0]chacha_permute; [1]ge…
minikube-docker default random random 38130 containerd-shim 2 [0]chacha_block_generic;…
minikube-docker default random random 38130 containerd-shim 2 [0]chacha_permute; [1]ge…
minikube-docker default random random 38130 containerd-shim 2 [0]chacha_permute; [1]ge…

From the traces above, you can see that the pod is spending CPU time in the Linux function urandom_read.

Instead of waiting, you can use the --timeout argument:

$ kubectl gadget run ghcr.io/inspektor-gadget/gadget/profile_cpu:v0.41.0 --timeout 5 --podname random --kernel-stacks-only --map-fetch-interval 0
K8S.NODE K8S.NAMESPACE K8S.PODNAME K8S.CONTAINERNAME PID COMM SAMPLES KERN_STACK
minikube-docker default random random 38130 containerd-shim 1 [0]chacha_permute; [1]ge…
minikube-docker default random random 38130 containerd-shim 1 [0]_copy_to_iter; [1]get…
minikube-docker default random random 38130 containerd-shim 2 [0]chacha_permute; [1]ge…
minikube-docker default random random 38130 containerd-shim 5 [0]chacha_permute; [1]ge…
minikube-docker default random random 38130 containerd-shim 1 [0]chacha_permute; [1]ge…
minikube-docker default random random 38130 containerd-shim 1 [0]chacha_permute; [1]ge…
minikube-docker default random random 38130 containerd-shim 1 [0]chacha_permute; [1]ge…
minikube-docker default random random 38130 containerd-shim 1 [0]get_random_bytes_user…

Finally, we need to clean up our pod:

$ kubectl delete pod random