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:
- 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_devicecó 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ủaib_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 ->
- 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ớiib_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_clientcủ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ó.