2 điểm bởi GN⁺ 2023-11-17 | 1 bình luận | Chia sẻ qua WhatsApp

Điểm đến cuối cùng của hỗ trợ preemption thời gian thực trên Linux

  • Công việc bổ sung hỗ trợ thời gian thực cho Linux đã bắt đầu từ năm 2004 và hiện đã bước vào giai đoạn hoàn thiện.
  • Mục tiêu của preemption thời gian thực là để tiến trình có mức ưu tiên cao nhất có thể chạy với độ trễ tối thiểu; để làm được điều đó, kernel được biến thành có thể bị preempt trong nhiều tình huống nhất có thể.
  • Công việc này đã dẫn tới việc viết lại các phần cốt lõi của kernel, đồng thời mang lại lợi ích vượt ra ngoài các trường hợp sử dụng thời gian thực.

Giải quyết vấn đề của printk()

  • Hàm printk() dùng trong kernel để gửi thông điệp tới console hệ thống và log hoạt động theo kiểu đồng bộ, nên sẽ không trả về cho đến khi thông điệp được gửi tới mọi đích đã cấu hình.
  • Các nhà phát triển thời gian thực đã chuyển đầu ra của printk() sang một luồng riêng để biến nó thành bất đồng bộ, nhưng đây chỉ là giải pháp tạm thời.
  • Vấn đề printk() đã được xử lý nghiêm túc từ năm 2018 đang dần được giải quyết thông qua khoảng 300 bản vá, dù vẫn còn một vài vấn đề phức tạp cần xử lý.

Triển vọng tích hợp mã preemption thời gian thực vào mainline

  • Bài viết bày tỏ hy vọng rằng phần còn lại của mã preemption thời gian thực sẽ được tích hợp vào mainline trước khi tròn 20 năm vào cuối năm 2024.
  • Dù gần đây không có thay đổi nào với mã printk(), mã handover đã được chỉnh sửa để có thể cập nhật từng console driver một.
  • Mã cũng đã được thay đổi để các thông điệp quan trọng được sao chép hoàn toàn vào bộ đệm thông điệp trước khi dòng đầu tiên được in ra, đồng thời ghi thông điệp vào console an toàn trước để tránh hệ thống bị sập do console driver lỗi.

Ý kiến của GN⁺

  • Công việc bổ sung hỗ trợ preemption thời gian thực vào kernel Linux gần như đã hoàn tất, và điều này sẽ mang lại lợi ích lớn cho các hệ thống cần xử lý tác vụ thời gian thực.
  • Việc biến hàm printk() thành bất đồng bộ sẽ cải thiện khả năng đáp ứng của hệ thống và đóng vai trò quan trọng trong việc đạt được mục tiêu của preemption thời gian thực.
  • Bài viết này cho thấy một bước tiến quan trọng trong phát triển kernel Linux và mang đến nội dung thú vị cho những ai quan tâm tới phát triển kernel.

1 bình luận

 
GN⁺ 2023-11-17
Ý kiến trên Hacker News
  • Ưu điểm của vi nhân QNX

    • Vi nhân QNX đã giới hạn thời gian tối đa cho mọi tác vụ từ hàng chục năm trước để bảo đảm độ tin cậy.
    • Mã vi nhân chỉ gồm vài chục nghìn dòng và chỉ phụ trách cấp phát bộ nhớ, điều phối CPU và truyền thông điệp giữa các tiến trình.
    • Mọi chức năng khác, bao gồm driver và logger, đều nằm ở không gian người dùng nên có thể bị các luồng ưu tiên cao chiếm quyền.
    • Nhân QNX hoàn toàn không thực hiện thao tác với chuỗi, nên không gặp các vấn đề phát sinh từ phân tích cú pháp chuỗi, định dạng hay truyền thông điệp.
  • Vấn đề xử lý thời gian thực của Linux

    • Linux có cấu trúc không phù hợp với xử lý thời gian thực, khi mã nhân lên tới hàng triệu dòng và phải biến toàn bộ mã thành có thể bị chiếm quyền.
    • Vì không phù hợp như một kiến trúc thời gian thực, việc sửa nó đã mất hàng chục năm.
    • Chỉ tập trung vào vấn đề của nhân có thể là đang bỏ qua các vấn đề ở cấp độ CPU.
  • Chức năng ghi log của nhân và các trường hợp sử dụng thực tế

    • Giải thích cách những ví dụ về việc nhân cố gắng đến mức nào để in thông điệp log ngay cả khi hệ thống sập đã được tận dụng ra sao trong triển khai thực tế.
  • Khả năng thay thế của các tổ hợp phần cứng/phần mềm thời gian thực

    • Đặt câu hỏi liệu các tổ hợp phần cứng/phần mềm cần xử lý thời gian thực có thể được thay thế bằng các chip ARM và x86 rẻ hơn, tiêu thụ điện thấp và xung nhịp cao hay không.
    • Đề cập rằng khi tốc độ xung nhịp tăng lên, tầm quan trọng của xử lý thời gian thực hoàn hảo có thể giảm xuống.
  • Phân biệt ứng dụng thời gian thực "cứng" và "mềm"

    • Với các ứng dụng thời gian thực "cứng", tốt hơn là không dùng hệ điều hành đa dụng như Linux.
    • Với các ứng dụng thời gian thực "mềm" (ví dụ: hội nghị truyền hình, phát âm thanh), một chút độ trễ hay mất khung hình không phải vấn đề lớn.
    • Các cuộc thảo luận về việc biến Linux thành hệ điều hành thời gian thực đang tập trung vào các trường hợp sử dụng thời gian thực "mềm" vốn đã khả thi.
    • Việc làm cho nhân hoàn toàn có thể bị chiếm quyền và tăng mức độ kiểm soát đối với lập lịch có ý nghĩa lớn hơn cho việc quản trị hệ thống lành mạnh, hơn là nhằm thay thế RTOS hay mã bare-metal.
  • Xử lý thời gian thực của nhân Linux và giới hạn của phần cứng

    • Dù nhân Linux hỗ trợ xử lý thời gian thực, phần cứng có thể vẫn không hỗ trợ thời gian thực do cache và các chức năng phức tạp bên trong CPU.
    • Để có xử lý thời gian thực thực sự, kiến trúc CPU đơn giản thường được ưu tiên hơn phần cứng phức tạp.
  • Vấn đề của ghi log đồng bộ

    • Từng gặp trường hợp ghi log đồng bộ như GLOG (thư viện ghi log của Google) bị chặn bởi I/O đĩa, khiến dịch vụ bị trễ.
  • Cách bảo đảm khả năng phản hồi của một tiến trình cụ thể

    • Nếu coi trọng khả năng phản hồi của một tiến trình cụ thể, cần cấp cho nó một lõi CPU chuyên dụng và một vùng bộ nhớ liên tục, đồng thời cho phép nó truy cập trực tiếp vào card mạng được tách biệt khỏi phần còn lại của hệ điều hành.
  • Tính năng chiếm quyền thời gian thực của Linux và kinh nghiệm trong quá khứ

    • Chia sẻ kinh nghiệm trước đây từng áp dụng bản vá RT_PREEMPT cho nhân Linux để dùng cho thiết bị khoa học, cùng ấn tượng về độ trễ và jitter được cải thiện nhờ đó.
  • Ảnh hưởng tới người dùng phổ thông

    • Đặt câu hỏi tính năng xử lý thời gian thực có ý nghĩa gì với người dùng phổ thông, liệu chỉ nên kích hoạt trong các tình huống nhất định hay cũng có thể giúp cải thiện độ phản hồi của hệ thống nói chung.