使用ftrace 定位显示卡顿问题分析 问题背景在3OS 虚拟化平台下在安卓系统中其中一个guest OS优盘拔掉的时候 显示界面卡顿。异常情况下当前usb 的hub event work 在worker0:4 上面runing 状态此时gpu的work无法被加载到worker0:4或者worker0:1 上执行。一直到usb event work runing 结束worker0:1才被拉起。去执行gpu的work。正常情况下GPU的 cpu200收到IRQ552-virtio-gpu-notify 中断触发以后 gpu中断下半部的 virtio_gpu_dequeue_ctrl_func work 工作任务会立刻执行, 如下图从这个图cpu 0上有2个worker 工作线程来执行work任务。是1和和4号work。备注cpu20就是是安卓的vcpu0. vcpu0 运行在物理cpu1上)异常情况下当前usb 的hub event work 在worker0:4 上面runing 状态此时gpu的work无法被加载到worker0:4或者worker0:1 上执行。一直到usb event work runing 结束worker0:1才被拉起。去执行gpu的work。这个问题就涉及到woker机制。linux 内核里面会给每个cpu 创建多个worker 线程去执行工作队列的work 但是如果是普通worker 同一时刻只能有一个普通worker 在running状态。 当usb event所在的worker0:4 一直在执行usb event 那么其它worker 无法被唤醒 因此gpu会有延迟处理出现卡顿。问题根因 优盘拔除的时候 很多cache 数据要回写磁盘此时有很多I/O 处理 导致usb event 耗时长。