Blog
Thoughts on engineering, design, and building great products.
Off-CPU và Độ Trễ Scheduler: Đo Thời Gian Tiến Trình KHÔNG Chạy
Profiling on-CPU (Bài 17) chỉ thấy lúc CPU bận. Nhưng phần lớn độ trễ một ứng dụng cảm nhận lại nằm ở lúc nó KHÔNG chạy: chờ đĩa, chờ khóa, chờ tới lượt CPU. eBPF đo được khoảng off-CPU đó qua tracepoint của scheduler. Bài này đo hai thứ trên node thật: run-queue latency — thời gian từ lúc một tác vụ được đánh thức tới lúc thật sự chạy, phơi ra cái đuôi 16-32ms khi CPU bị tranh; và off-CPU time — một tác vụ nằm ngoài CPU bao lâu mỗi lần, với đuôi tới vài giây cho tác vụ bị chặn.
Scheduler và scheduling framework
Mỗi pod ta tạo đều có ai đó âm thầm chọn node cho nó — đó là kube-scheduler, thứ ta đã dựng ở Bài 8 mà chưa nhìn kỹ. Bài này mở Part VII bằng cách đào đúng cách nó chọn: lọc bỏ node không vừa (filter), chấm điểm node còn lại (score), rồi bind. Test thật một pod bị treo vì không node nào đủ chỗ, một pod được chọn node, và xem scoring dồn pod vào node ít tải hơn — không phải chia đều ngây thơ.
controller-manager và scheduler: Control Loop và Leader Election
Hai thành phần biến trạng thái mong muốn thành hành động: kube-controller-manager chạy hàng chục control loop, kube-scheduler chọn node cho pod. Bài này dựng cả hai trên ba controller, giải thích cách scheduler lọc và chấm điểm node, rồi xem leader election hoạt động thật — ba bản chạy nhưng chỉ một làm việc.