.. SPDX-License-Identifier: GPL-2.0 .. include:: ../../../disclaimer-vi.rst :Original: Documentation/arch/arm/cluster-pm-race-avoidance.rst :Translator: Google Translate (machine translation) :Upstream-at: 8541d8f725c6 .. warning:: 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/. ============================================================== Thuật toán tránh cuộc đua tăng/tắt nguồn trên toàn cụm ============================================================== Tệp này ghi lại thuật toán được sử dụng để phối hợp CPU và các hoạt động thiết lập và phân chia cụm và để quản lý tính nhất quán của phần cứng điều khiển một cách an toàn. Phần "Cơ sở lý luận" giải thích thuật toán dùng để làm gì và tại sao cần thiết. "Mô hình cơ bản" giải thích các khái niệm chung bằng cách sử dụng chế độ xem đơn giản của hệ thống. Các phần khác giải thích chi tiết thực tế của thuật toán đang sử dụng. Cơ sở lý luận ------------- Trong một hệ thống có nhiều CPU, điều mong muốn là có khả năng tắt từng CPU khi hệ thống không hoạt động, giảm tiêu thụ điện năng và tản nhiệt. Trong một hệ thống chứa nhiều cụm CPU, điều mong muốn là để có khả năng tắt toàn bộ cụm. Tắt và bật toàn bộ cụm là một công việc mạo hiểm, bởi vì nó liên quan đến việc thực hiện các hoạt động có khả năng phá hoại ảnh hưởng đến một nhóm CPU chạy độc lập trong khi hệ điều hành vẫn tiếp tục chạy. Cái này có nghĩa là chúng ta cần có sự phối hợp để đảm bảo rằng các hoạt động ở cấp độ cụm chỉ được thực hiện khi thực sự an toàn vậy. Khóa đơn giản có thể không đủ để giải quyết vấn đề này, bởi vì các cơ chế như spinlock của Linux có thể dựa vào các cơ chế mạch lạc không được kích hoạt ngay lập tức khi một cụm bật nguồn. Kể từ khi kích hoạt hoặc việc vô hiệu hóa các cơ chế đó có thể là một hoạt động phi nguyên tử (chẳng hạn như ghi một số thanh ghi phần cứng và vô hiệu hóa bộ đệm lớn), khác Cần có các biện pháp phối hợp để đảm bảo an toàn tắt nguồn và bật nguồn ở cấp độ cụm. Cơ chế được trình bày trong tài liệu này mô tả một bộ nhớ mạch lạc dựa trên giao thức để thực hiện sự phối hợp cần thiết. Nó nhằm mục đích trở thành như nhẹ nhất có thể, đồng thời cung cấp các đặc tính an toàn cần thiết. Mô hình cơ bản -------------- Mỗi cụm và CPU được gán một trạng thái như sau: -DOWN -COMING_UP - LÊN -GOING_DOWN :: +---------> LÊN ----------+ | v COMING_UP GOING_DOWN ^ | +-------- DOWN <--------+ DOWN: CPU hoặc cụm không mạch lạc và bị tắt nguồn hoặc bị đình chỉ hoặc sẵn sàng tắt nguồn hoặc tạm dừng. COMING_UP: CPU hoặc cụm đã cam kết chuyển sang trạng thái UP. Nó có thể là một phần của quá trình khởi tạo và tạo điều kiện cho sự mạch lạc. LÊN: CPU hoặc cụm đang hoạt động và mạch lạc ở phần cứng cấp độ. CPU ở trạng thái này không nhất thiết phải được sử dụng tích cực bởi kernel. GOING_DOWN: CPU hoặc cụm đã cam kết chuyển sang DOWN trạng thái. Nó có thể là một phần của quá trình phân hủy và lối thoát mạch lạc. Mỗi CPU được gán một trong các trạng thái này vào bất kỳ thời điểm nào. Các trạng thái CPU được mô tả trong phần "Trạng thái CPU" bên dưới. Mỗi cụm cũng được gán một trạng thái, nhưng cần phải phân chia giá trị trạng thái thành hai phần (trạng thái "cụm" và trạng thái "vào") và để giới thiệu các trạng thái bổ sung nhằm tránh các cuộc đua giữa các quốc gia khác nhau Các CPU trong cụm đồng thời sửa đổi trạng thái. Cụm- trạng thái cấp độ được mô tả trong phần "Trạng thái cụm". Để giúp phân biệt trạng thái CPU với trạng thái cụm trong phần này thảo luận, tên trạng thái được đặt tiền tố ZZ0000ZZ cho các trạng thái CPU, và tiền tố ZZ0001ZZ hoặc ZZ0002ZZ cho các trạng thái cụm. Trạng thái CPU -------------- Trong thuật toán này, mỗi lõi riêng lẻ trong bộ xử lý đa lõi được được gọi là "CPU". CPU được coi là đơn luồng: do đó, CPU chỉ có thể làm một việc tại một thời điểm. Điều này có nghĩa là CPU rất phù hợp với mô hình cơ bản. Thuật toán xác định các trạng thái sau cho mỗi CPU trong hệ thống: -CPU_DOWN -CPU_COMING_UP -CPU_UP -CPU_GOING_DOWN :: thiết lập cụm và Quyết định chính sách hoàn chỉnh thiết lập CPU +----------->CPU_UP-------------+ | v CPU_COMING_UP CPU_GOING_DOWN ^ | +---------- CPU_DOWN <----------+ quyết định chính sách CPU đã hoàn tất việc phân tích hoặc sự kiện phần cứng Các định nghĩa của bốn trạng thái tương ứng chặt chẽ với các trạng thái của mô hình cơ bản. Sự chuyển đổi giữa các trạng thái xảy ra như sau. Một sự kiện kích hoạt (tự phát) có nghĩa là CPU có thể chuyển sang trạng thái tiếp theo do chỉ đạt được tiến bộ cục bộ, không có yêu cầu cho bất kỳ sự kiện bên ngoài nào xảy ra. CPU_DOWN: CPU đạt trạng thái CPU_DOWN khi nó sẵn sàng tắt nguồn. Khi đạt đến trạng thái này, CPU thường sẽ tự tắt nguồn hoặc tự tạm dừng thông qua lệnh WFI hoặc cuộc gọi phần mềm. Trạng thái tiếp theo: CPU_COMING_UP Điều kiện: không có Sự kiện kích hoạt: a) hoạt động bật nguồn phần cứng rõ ràng, dẫn đến từ quyết định chính sách trên một chiếc CPU khác; b) một sự kiện phần cứng, chẳng hạn như một sự gián đoạn. CPU_COMING_UP: CPU không thể bắt đầu tham gia vào tính nhất quán phần cứng cho đến khi cụm được thiết lập và mạch lạc. Nếu cụm chưa sẵn sàng, thì CPU sẽ đợi ở trạng thái CPU_COMING_UP cho đến khi cụm đã được thiết lập. Trạng thái tiếp theo: CPU_UP Điều kiện: Cụm gốc của CPU phải nằm trong CLUSTER_UP. Sự kiện kích hoạt: Chuyển đổi cụm gốc sang CLUSTER_UP. Tham khảo phần "Trạng thái cụm" để biết mô tả về Trạng thái CLUSTER_UP. CPU_UP: Khi CPU đạt đến trạng thái CPU_UP, CPU có thể an toàn bắt đầu tham gia vào sự gắn kết địa phương. Điều này được thực hiện bằng cách nhảy tới mã sơ yếu lý lịch CPU của kernel. Lưu ý rằng định nghĩa của trạng thái này hơi khác một chút từ định nghĩa mô hình cơ bản: CPU_UP không có nghĩa là CPU vẫn mạch lạc nhưng điều đó có nghĩa là nó có thể tiếp tục an toàn hạt nhân. Hạt nhân xử lý phần còn lại của sơ yếu lý lịch quy trình, do đó các bước còn lại sẽ không hiển thị như một phần của quy trình thuật toán tránh chủng tộc. CPU vẫn ở trạng thái này cho đến khi có quyết định chính sách rõ ràng được thực hiện để tắt hoặc tạm dừng CPU. Trạng thái tiếp theo: CPU_GOING_DOWN Điều kiện: không có Sự kiện kích hoạt: quyết định chính sách rõ ràng CPU_GOING_DOWN: Khi ở trạng thái này, CPU thoát khỏi trạng thái kết hợp, bao gồm mọi các hoạt động cần thiết để đạt được điều này (chẳng hạn như làm sạch dữ liệu bộ nhớ đệm). Trạng thái tiếp theo: CPU_DOWN Điều kiện: việc phân tích CPU cục bộ đã hoàn tất Sự kiện kích hoạt: (tự phát) Trạng thái cụm -------------- Cụm là một nhóm các CPU được kết nối với một số tài nguyên chung. Bởi vì một cụm chứa nhiều CPU nên nó có thể thực hiện nhiều mọi thứ cùng một lúc. Điều này có một số ý nghĩa. Đặc biệt, một CPU có thể khởi động trong khi một CPU khác đang phá bỏ cụm. Trong cuộc thảo luận này, "phía bên ngoài" là chế độ xem trạng thái cụm như được thấy bởi một chiếc CPU đang xé nát cụm này. “Bên vào” là chế độ xem trạng thái cụm mà CPU nhìn thấy khi thiết lập CPU. Để có thể phối hợp an toàn trong những tình huống như vậy, điều quan trọng là rằng CPU đang thiết lập cụm có thể quảng cáo trạng thái của nó độc lập với CPU đang phá bỏ cụm. Vì điều này lý do, trạng thái cụm được chia thành hai phần: trạng thái "cụm": Trạng thái toàn cầu của cụm; hoặc nhà nước ở phía bên ngoài: -CLUSTER_DOWN -CLUSTER_UP -CLUSTER_GOING_DOWN trạng thái "inbound": Trạng thái của cụm ở phía gửi đến. -INBOUND_NOT_COMING_UP -INBOUND_COMING_UP Sự kết hợp khác nhau của các trạng thái này dẫn đến sáu khả năng trạng thái cho toàn bộ cụm:: CLUSTER_UP +===========> INBOUND_NOT_COMING_UP -------------+ # | | CLUSTER_UP <----+ | INBOUND_COMING_UP | v ^ CLUSTER_GOING_DOWN CLUSTER_GOING_DOWN # ZZ0002ZZ <=== INBOUND_NOT_COMING_UP CLUSTER_DOWN ZZ0000ZZ INBOUND_COMING_UP <----+ | | ^ | +============ CLUSTER_DOWN <-------------+ INBOUND_NOT_COMING_UP Chuyển đổi -----> chỉ có thể được thực hiện bởi CPU đi và chỉ liên quan đến những thay đổi đối với trạng thái "cụm". Việc chuyển đổi ===##> chỉ có thể được thực hiện bởi CPU gửi đến và chỉ liên quan đến những thay đổi đối với trạng thái "vào", trừ khi không có có thể chuyển đổi thêm ở phía bên ngoài (tức là, CPU gửi đi đã đưa cụm vào trạng thái CLUSTER_DOWN). Thuật toán tránh cuộc đua không cung cấp cách xác định CPU chính xác nào trong cụm đóng những vai trò này. Điều này phải được quyết định trước bằng một số phương tiện khác. Tham khảo phần "Lựa chọn người đàn ông cuối cùng và người đàn ông đầu tiên" để được giải thích thêm. CLUSTER_DOWN/INBOUND_NOT_COMING_UP là trạng thái duy nhất có cụm thực sự có thể được tắt nguồn. Sự song song của CPU vào và ra được quan sát bởi sự tồn tại của hai đường dẫn khác nhau từ CLUSTER_GOING_DOWN/ INBOUND_NOT_COMING_UP (tương ứng với GOING_DOWN ở dạng cơ bản mẫu) sang CLUSTER_DOWN/INBOUND_COMING_UP (tương ứng với COMING_UP trong mô hình cơ bản). Đường dẫn thứ hai tránh cụm sự sụp đổ hoàn toàn. CLUSTER_UP/INBOUND_COMING_UP tương đương với UP về cơ bản mô hình. The final transition to CLUSTER_UP/INBOUND_NOT_COMING_UP là chuyện nhỏ và chỉ đơn thuần là thiết lập lại máy trạng thái sẵn sàng cho chu kỳ tiếp theo. Chi tiết về các chuyển đổi được phép sau đây. Trạng thái tiếp theo trong mỗi trường hợp được ký hiệu