Vietnamese (machine translation)

Lưu ý

Mục đích của file này là để độc giả tiếng Việt có thể đọc và hiểu tài liệu nhân kernel dễ dàng hơn, không phải để tạo ra một nhánh tài liệu riêng. Nếu bạn có bất kỳ nhận xét hoặc cập nhật nào cho file này, vui lòng thử cập nhật file tiếng Anh gốc trước. Nếu bạn thấy có sự khác biệt giữa bản dịch và bản gốc, hoặc có vấn đề về bản dịch, vui lòng gửi góp ý hoặc patch cho người dịch của file này, hoặc nhờ người bảo trì và người review tài liệu tiếng Việt giúp đỡ.

Bản gốc:

InfiniBand Midlayer Locking

Người dịch:

Google Translate (machine translation)

Phiên bản gốc:

8541d8f725c6

Cảnh báo

Tài liệu này được dịch tự động bằng máy và chưa được review bởi người dịch. Nội dung có thể không chính xác hoặc khó hiểu ở một số chỗ. Khi có sự khác biệt với bản gốc, bản gốc luôn là chuẩn. Bản dịch chất lượng cao (được review) được đặt trong thư mục vi_VN/.

Khóa lớp giữa InfiniBand

Hướng dẫn này là một nỗ lực để làm rõ các giả định khóa

được thực hiện bởi lớp giữa của InfiniBand. Nó mô tả các yêu cầu về cả trình điều khiển cấp thấp nằm bên dưới lớp giữa và lớp trên các giao thức sử dụng lớp giữa.

Bối cảnh ngủ và gián đoạn

Với các ngoại lệ sau đây, việc triển khai trình điều khiển cấp thấp của

tất cả các phương thức trong struct ib_device có thể ở chế độ ngủ. Những ngoại lệ có bất kỳ phương pháp nào trong danh sách:

  • tạo_ah
    • sửa đổi_ah

    • truy vấn_ah

    • tiêu diệt_ah

    • gửi_gửi

    • post_recv

    • thăm dò ý kiến_cq

    • req_notify_cq

có thể không ngủ và phải có thể gọi được từ bất kỳ ngữ cảnh nào.

Các chức năng tương ứng được xuất sang giao thức cấp trên

người tiêu dùng:

  • rdma_create_ah

    -rdma_modify_ah -rdma_query_ah - rdma_destroy_ah - ib_post_send - ib_post_recv - ib_req_notify_cq

do đó an toàn để gọi từ bất kỳ bối cảnh nào.

Ngoài ra, chức năng

  • ib_dispatch_event

được sử dụng bởi trình điều khiển cấp thấp để gửi các sự kiện không đồng bộ thông qua

lớp giữa cũng an toàn để gọi từ bất kỳ bối cảnh nào.

Tái nhập

Tất cả các phương thức trong struct ib_device được xuất bởi cấp độ thấp

người lái xe phải được quay lại đầy đủ. Trình điều khiển cấp thấp được yêu cầu thực hiện tất cả sự đồng bộ hóa cần thiết để duy trì tính nhất quán, thậm chí nếu nhiều lệnh gọi hàm sử dụng cùng một đối tượng được chạy đồng thời.

Lớp giữa IB không thực hiện bất kỳ việc tuần tự hóa các lệnh gọi hàm nào.

Bởi vì trình điều khiển cấp thấp được cấp lại, giao thức cấp cao hơn

người tiêu dùng không bắt buộc phải thực hiện bất kỳ việc xê-ri hóa nào. Tuy nhiên, một số tuần tự hóa có thể được yêu cầu để có được kết quả hợp lý. cho ví dụ: người tiêu dùng có thể gọi ib_poll_cq() một cách an toàn trên nhiều CPU đồng thời. Tuy nhiên, thứ tự hoàn thành công việc thông tin giữa các cuộc gọi khác nhau của ib_poll_cq() không được xác định.

Cuộc gọi lại

Trình điều khiển cấp thấp không được thực hiện lệnh gọi lại trực tiếp từ

chuỗi cuộc gọi giống như lệnh gọi phương thức ib_device. Ví dụ, nó không phải là được phép trình điều khiển cấp thấp gọi sự kiện hoàn thành của người tiêu dùng xử lý trực tiếp từ phương thức post_send của nó. Thay vào đó, cấp độ thấp người lái xe nên trì hoãn cuộc gọi lại này bằng cách, ví dụ: lên lịch tasklet để thực hiện gọi lại.

Trình điều khiển cấp thấp có trách nhiệm đảm bảo rằng nhiều

trình xử lý sự kiện hoàn thành cho cùng một CQ không được gọi đồng thời. Người lái xe phải đảm bảo chỉ có một sự kiện CQ trình xử lý cho một CQ nhất định đang chạy tại một thời điểm. Nói cách khác, sự tình huống sau đây không được phép:

CPU1 CPU2

trình điều khiển cấp thấp ->
gọi lại sự kiện CQ của người tiêu dùng:

/* ... */ ib_req_notify_cq(cq, ...);

trình điều khiển cấp thấp ->

/* ... */ gọi lại sự kiện CQ của người tiêu dùng:

/* ... */

trả về từ trình xử lý sự kiện CQ

Bối cảnh trong đó sự kiện hoàn thành và sự kiện không đồng bộ

cuộc gọi lại chạy không được xác định. Tùy thuộc vào trình điều khiển cấp thấp, nó có thể là bối cảnh quá trình, bối cảnh softirq hoặc bối cảnh ngắt. Người tiêu dùng giao thức cấp cao hơn có thể không ngủ trong cuộc gọi lại.

Cắm nóng

Trình điều khiển cấp thấp thông báo rằng thiết bị đã sẵn sàng để sử dụng bởi

người tiêu dùng khi nó gọi ib_register_device(), tất cả khởi tạo phải hoàn tất trước cuộc gọi này. Thiết bị phải vẫn có thể sử dụng được cho đến khi lệnh gọi tới ib_unregister_device() của trình điều khiển được trả về.

Trình điều khiển cấp thấp phải gọi ib_register_device() và

ib_unregister_device() từ ngữ cảnh quá trình. Nó không được giữ bất kỳ các ngữ nghĩa có thể gây ra bế tắc nếu người tiêu dùng gọi lại người lái xe thực hiện các cuộc gọi này.

Người tiêu dùng giao thức cấp cao hơn có thể bắt đầu sử dụng thiết bị IB như

ngay sau khi phương thức add của struct ib_client của nó được gọi cho điều đó thiết bị. Người tiêu dùng phải hoàn thành tất cả việc dọn dẹp và giải phóng tất cả tài nguyên liên quan đến một thiết bị trước khi quay lại từ phương thức xóa.

Người tiêu dùng được phép ngủ trong các phương thức thêm và xóa của nó.