Skip to main content
Version: latest

Using top block-io

The top block-io gadget is used to visualize the containers generating the most block device input/output.

On Kubernetes

First, we need to create one pod for us to play with:

$ kubectl run test-pod --image busybox:latest sleep inf

You can now use the gadget, but output will be empty:

$ kubectl gadget top block-io
K8S.NODE K8S.NAMESPACE K8S.PODNAME K8S.CONTAINERNAME PID COMM R/W MAJOR MINOR BYTES TIME(µs) IOs

Indeed, it is waiting for I/O to occur. So, open another terminal and keep and eye on the first one, exec the container and use dd:

$ kubectl exec -ti test-pod -- dd if=/dev/zero of=/tmp/foo count=16384

On the first terminal, you should see:

K8S.NODE         K8S.NAMESPACE    K8S.PODNAME      K8S.CONTAINERNAME PID     COMM             R/W MAJOR  MINOR  BYTES   TIME(µs) IOs
minikube default test-pod test-pod 7767 dd W 0 0 1564672 3046 4

This line correspond to the block device I/O initiated by dd.

Clean everything

Congratulations! You reached the end of this guide! You can now delete the pod you created:

$ kubectl delete pod test-pod
pod "test-pod" deleted

With ig

Start a container that performs some IO activity:

$ docker run --rm --name test-top-block-io busybox /bin/sh -c'while true; do dd if=/dev/zero of=/tmp/foo count=4096; sync; done'

Start the gadget on another terminal and you'll see the activity produced by the test-top-block-io container.

$ sudo ig top block-io -c test-top-block-io
RUNTIME.CONTAINERNAME PID COMM R/W MAJOR MINOR BYTES TIME OPS
test-top-block-io 63666 sync W 253 0 24576 428 5
test-top-block-io 63715 dd W 253 0 2097152 4816 5
...