drm_gpu_scheduler
flowchart TD
subgraph GPU
slot-0[HW Run Queue]
slot-1[HW Run Queue]
slot-2[HW Run Queue]
end
sched0[drm_gpu_scheduler]
sched1[drm_gpu_scheduler]
sched2[drm_gpu_scheduler]
runq00[drm_sched_rq<br>KERNEL]
runq01[drm_sched_rq<br>HIGH]
runq02[drm_sched_rq<br>NORMAL]
runq03[drm_sched_rq<br>LOW]
runq10[drm_sched_rq<br>KERNEL]
runq11[drm_sched_rq<br>HIGH]
runq20[drm_sched_rq<br>KERNEL]
runq21[drm_sched_rq<br>HIGH]
runq22[drm_sched_rq<br>NORMAL]
entity00@{shape: docs, label: "drm_sched_entity<br>job chain"}
entity01@{shape: docs, label: "drm_sched_entity<br>job chain"}
entity02@{shape: docs, label: "drm_sched_entity<br>job chain"}
entity03@{shape: docs, label: "drm_sched_entity<br>job chain"}
entity10@{shape: docs, label: "drm_sched_entity<br>job chain"}
entity11@{shape: docs, label: "drm_sched_entity<br>job chain"}
entity12@{shape: docs, label: "drm_sched_entity<br>job chain"}
entity20@{shape: docs, label: "drm_sched_entity<br>job chain"}
entity21@{shape: docs, label: "drm_sched_entity<br>job chain"}
entity22@{shape: docs, label: "drm_sched_entity<br>job chain"}
entity00 --> entity01 --> entity02 --> entity03 --> runq00
entity10 --> entity11 --> entity12 --> runq10
entity20 --> entity21 --> entity22 --> runq02
runq00 --> sched0
runq01 --> sched0
runq02 --> sched0
runq03 --> sched0
runq10 --> sched1
runq11 --> sched1
runq20 --> sched2
runq21 --> sched2
runq22 --> sched2
sched0 --> slot-0
sched1 --> slot-1
sched2 --> slot-2
这年初二
![]() |
小小的人儿 捂住双耳 这年初二 |
GPU Firmware
1 | VCE feature version: 0, firmware version: 0x00000000 |
Linux Power Management
QEMU
virtio
Piglit
flowchart TB
subgraph p [Main Thread]
subgraph p0 ["piglit_drm_create_dma_buf()"]
p.a["drv->create(w, h, fourcc, src_data, drm_buf)"]
p.b["drv->export(drm_buf)"]
end
end
subgraph t1 [Thread 1]
subgraph lo11 [Loop 1]
t1.a["eglCreateContext()"]
t1.b["eglMakeCurrent()"]
t1.c["egl_image_for_dma_buf_fd<br>(buf, fd, fourcc, img)"]
t1.d["texture_for_egl_image(img, texture)"]
t1.e["eglDestroyImageKHR(display, img)"]
t1.f["glDeleteTextures(1, &texture)"]
t1.g["glFinish()"]
end
end
subgraph t2 [Thread 2]
subgraph lo21 [Loop 1]
t2.a["eglCreateContext()"]
t2.b["eglMakeCurrent()"]
t2.c["egl_image_for_dma_buf_fd<br>(buf, fd, fourcc, img)"]
t2.d["texture_for_egl_image(img, texture)"]
t2.e["eglDestroyImageKHR(display, img)"]
t2.f["glDeleteTextures(1, &texture)"]
t2.g["glFinish()"]
end
end
p.a --> p.b
t1.a --> t1.b --> t1.c --> t1.d --> t1.e --> t1.f --> t1.g
t2.a --> t2.b --> t2.c --> t2.d --> t2.e --> t2.f --> t2.g
p --> t1
p --> t2
lo11 -- 100000 times --> lo11
lo21 -- 100000 times --> lo21
click p.a https://gitlab.freedesktop.org/mesa/piglit/-/blob/main/tests/util/piglit-framework-gl/piglit_drm_dma_buf.c#L519"
click p.b https://gitlab.freedesktop.org/mesa/piglit/-/blob/main/tests/util/piglit-framework-gl/piglit_drm_dma_buf.c#L519"