一,工具简介
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