一,工具简介

wqlat工具统计线程阻塞的时间,并显示执行唤醒操作的线程的堆栈跟踪,以及唤醒进程和目标进程的进程名,以及总的阻塞时间。这个阻塞时间是从一个线程阻塞时开始统计的,直到发送唤醒信号时结束。请注意,这个时间不包括目标线程的一些运行队列延迟,因为目标线程如果需要等待在CPU上的轮次,可能不会立即执行。所有显示的数据,包括堆栈跟踪、进程名和时间,都在内核中使用eBPF映射进行高效汇总。

该工具旨在在offcputime之后使用,offcputime显示了直接阻塞的堆栈。然后可以使用wakeuptime来显示执行唤醒操作的堆栈。

二,代码示例

#!/usr/bin/env python

from __future__ import print_function
from bcc import BPF
from bcc.utils import printb
from time import sleep
import argparse
import signal
import errno
from sys import stderr

# arg validation
def positive_int(val):
    try:
        ival = int(val)
    except ValueError:
        raise argparse.ArgumentTypeError("must be an integer")

    if ival < 0:
        raise argparse.ArgumentTypeError("must be positive")
    return ival

def positive_nonzero_int(val):
    ival = positive_int(val)
    if ival == 0:
        raise argparse.A
03-17 05:33