Tính đồng bộ và tính đồng bộ của bộ nhớ cache
Trong chương này, chúng ta sẽ thảo luận về các giao thức liên kết bộ đệm để đối phó với các vấn đề không nhất quán đa bộ đệm.
Vấn đề liên kết bộ nhớ cache
Trong hệ thống đa xử lý, sự không nhất quán dữ liệu có thể xảy ra giữa các cấp liền kề hoặc trong cùng một cấp của hệ thống phân cấp bộ nhớ. Ví dụ, bộ nhớ đệm và bộ nhớ chính có thể có các bản sao không nhất quán của cùng một đối tượng.
Do nhiều bộ xử lý hoạt động song song và nhiều bộ đệm độc lập có thể sở hữu các bản sao khác nhau của cùng một khối bộ nhớ, điều này tạo ra cache coherence problem. Cache coherence schemes giúp tránh vấn đề này bằng cách duy trì trạng thái đồng nhất cho mỗi khối dữ liệu được lưu trong bộ nhớ cache.
Gọi X là một phần tử của dữ liệu được chia sẻ đã được tham chiếu bởi hai bộ xử lý, P1 và P2. Ban đầu, ba bản sao của X là nhất quán. Nếu bộ xử lý P1 ghi một dữ liệu mới X1 vào bộ nhớ đệm, bằng cách sử dụngwrite-through policy, cùng một bản sao sẽ được ghi ngay lập tức vào bộ nhớ dùng chung. Trong trường hợp này, sự không nhất quán xảy ra giữa bộ nhớ đệm và bộ nhớ chính. Khi mộtwrite-back policy được sử dụng, bộ nhớ chính sẽ được cập nhật khi dữ liệu sửa đổi trong bộ đệm được thay thế hoặc mất hiệu lực.
Nói chung, có ba nguồn gốc của vấn đề không nhất quán -
- Chia sẻ dữ liệu có thể ghi
- Quá trình di chuyển
- Hoạt động I / O
Giao thức xe buýt Snoopy
Các giao thức Snoopy đạt được tính nhất quán dữ liệu giữa bộ nhớ đệm và bộ nhớ dùng chung thông qua hệ thống bộ nhớ dựa trên bus. Write-invalidate và write-update chính sách được sử dụng để duy trì tính nhất quán của bộ nhớ cache.
Trong trường hợp này, chúng ta có ba bộ xử lý P1, P2 và P3 có một bản sao nhất quán của phần tử dữ liệu 'X' trong bộ nhớ đệm cục bộ của chúng và trong bộ nhớ dùng chung (Hình-a). Bộ xử lý P1 ghi X1 vào bộ nhớ đệm của nó bằng cách sử dụngwrite-invalidate protocol. Vì vậy, tất cả các bản sao khác đều bị vô hiệu qua xe buýt. Nó được ký hiệu là 'I' (Hình-b). Các khối không hợp lệ còn được gọi làdirty, tức là chúng không nên được sử dụng. Cácwrite-update protocolcập nhật tất cả các bản sao bộ nhớ cache thông qua bus. Bằng cách sử dụngwrite back cache, bản sao bộ nhớ cũng được cập nhật (Hình-c).
Các sự kiện và hành động trong bộ nhớ cache
Các sự kiện và hành động sau xảy ra khi thực hiện các lệnh truy cập bộ nhớ và lệnh hủy bỏ hiệu lực:
Read-miss- Khi một bộ xử lý muốn đọc một khối và khối đó không có trong bộ đệm, thì xảy ra hiện tượng bỏ sót đọc. Điều này bắt đầu mộtbus-readhoạt động. Nếu không có bản sao bẩn nào tồn tại, thì bộ nhớ chính có bản sao nhất quán sẽ cung cấp bản sao cho bộ nhớ đệm yêu cầu. Nếu bản sao bẩn tồn tại trong bộ nhớ đệm từ xa, bộ nhớ đệm đó sẽ hạn chế bộ nhớ chính và gửi bản sao đến bộ nhớ đệm yêu cầu. Trong cả hai trường hợp, bản sao bộ nhớ cache sẽ chuyển sang trạng thái hợp lệ sau khi bỏ lỡ lần đọc.
Write-hit - Nếu bản sao bị bẩn hoặc reservedtrạng thái, viết được thực hiện cục bộ và trạng thái mới là bẩn. Nếu trạng thái mới là hợp lệ, lệnh write-validate sẽ được truyền đến tất cả các bộ nhớ đệm, làm mất hiệu lực các bản sao của chúng. Khi bộ nhớ chia sẻ được ghi qua, trạng thái kết quả được bảo lưu sau lần ghi đầu tiên này.
Write-miss- Nếu bộ xử lý không ghi được trong bộ nhớ đệm cục bộ, bản sao phải đến từ bộ nhớ chính hoặc từ bộ nhớ đệm từ xa có khối bẩn. Điều này được thực hiện bằng cách gửi mộtread-invalidatelệnh này sẽ làm mất hiệu lực của tất cả các bản sao bộ đệm. Sau đó, bản sao cục bộ được cập nhật với trạng thái bẩn.
Read-hit - Read-hit luôn được thực hiện trong bộ nhớ đệm cục bộ mà không gây ra sự chuyển đổi trạng thái hoặc sử dụng bus snoopy để làm mất hiệu lực.
Block replacement- Khi một bản sao bị bẩn, nó phải được ghi trở lại bộ nhớ chính bằng phương pháp thay thế khối. Tuy nhiên, khi bản sao ở trạng thái hợp lệ hoặc bảo lưu hoặc không hợp lệ, sẽ không có sự thay thế nào được thực hiện.
Giao thức dựa trên thư mục
Bằng cách sử dụng một mạng đa tầng để xây dựng một bộ xử lý lớn với hàng trăm bộ xử lý, các giao thức bộ nhớ cache rình mò cần được sửa đổi cho phù hợp với khả năng của mạng. Việc truyền phát rất tốn kém để thực hiện trong một mạng nhiều tầng, các lệnh nhất quán chỉ được gửi đến những bộ đệm lưu giữ một bản sao của khối. Đây là lý do phát triển các giao thức dựa trên thư mục cho các bộ xử lý đa xử lý được kết nối mạng.
Trong hệ thống giao thức dựa trên thư mục, dữ liệu được chia sẻ được đặt trong một thư mục chung để duy trì sự gắn kết giữa các bộ nhớ đệm. Tại đây, thư mục hoạt động như một bộ lọc nơi bộ xử lý yêu cầu quyền tải một mục nhập từ bộ nhớ chính vào bộ nhớ đệm của nó. Nếu một mục nhập bị thay đổi, thư mục sẽ cập nhật nó hoặc làm mất hiệu lực các bộ nhớ đệm khác có mục nhập đó.
Cơ chế đồng bộ hóa phần cứng
Đồng bộ hóa là một hình thức giao tiếp đặc biệt mà thay vì kiểm soát dữ liệu, thông tin được trao đổi giữa các quá trình giao tiếp nằm trong cùng một bộ xử lý hoặc khác nhau.
Hệ thống đa xử lý sử dụng cơ chế phần cứng để thực hiện các hoạt động đồng bộ hóa mức thấp. Hầu hết các bộ đa xử lý đều có cơ chế phần cứng để áp đặt các hoạt động nguyên tử như thao tác đọc, ghi hoặc đọc-sửa-ghi trong bộ nhớ để thực hiện một số nguyên thuỷ đồng bộ hoá. Ngoài hoạt động của bộ nhớ nguyên tử, một số ngắt của bộ xử lý cũng được sử dụng cho mục đích đồng bộ hóa.
Đồng tiền trong bộ nhớ đệm trong máy bộ nhớ dùng chung
Duy trì đồng tiền bộ nhớ đệm là một vấn đề trong hệ thống đa xử lý khi các bộ xử lý chứa bộ nhớ đệm cục bộ. Sự không nhất quán dữ liệu giữa các bộ nhớ đệm khác nhau dễ dàng xảy ra trong hệ thống này.
Các lĩnh vực quan tâm chính là -
- Chia sẻ dữ liệu có thể ghi
- Quá trình di chuyển
- Hoạt động I / O
Chia sẻ dữ liệu có thể ghi
Khi hai bộ xử lý (P1 và P2) có cùng phần tử dữ liệu (X) trong bộ nhớ đệm cục bộ của chúng và một quá trình (P1) ghi vào phần tử dữ liệu (X), vì các bộ nhớ đệm là bộ nhớ đệm cục bộ ghi qua P1, bộ nhớ chính sẽ cũng được cập nhật. Bây giờ khi P2 cố gắng đọc phần tử dữ liệu (X), nó không tìm thấy X vì phần tử dữ liệu trong bộ nhớ cache của P2 đã trở nên lỗi thời.
Quá trình di chuyển
Trong giai đoạn đầu, cache của P1 có phần tử dữ liệu X, trong khi P2 không có bất kỳ thứ gì. Một quy trình trên P2 đầu tiên ghi trên X và sau đó chuyển sang P1. Bây giờ, quá trình bắt đầu đọc phần tử dữ liệu X, nhưng vì bộ xử lý P1 có dữ liệu lỗi thời nên quá trình không thể đọc nó. Vì vậy, một quá trình trên P1 ghi vào phần tử dữ liệu X và sau đó chuyển sang P2. Sau khi di chuyển, một quy trình trên P2 bắt đầu đọc phần tử dữ liệu X nhưng nó tìm thấy phiên bản X đã lỗi thời trong bộ nhớ chính.
Hoạt động I / O
Như được minh họa trong hình, thiết bị I / O được thêm vào bus trong kiến trúc đa xử lý hai bộ xử lý. Lúc đầu, cả hai bộ đệm đều chứa phần tử dữ liệu X. Khi thiết bị I / O nhận phần tử mới X, nó sẽ lưu phần tử mới trực tiếp vào bộ nhớ chính. Bây giờ, khi P1 hoặc P2 (giả sử P1) cố gắng đọc phần tử X, nó sẽ nhận được một bản sao lỗi thời. Vì vậy, P1 ghi vào phần tử X. Bây giờ, nếu thiết bị I / O cố gắng truyền X, nó sẽ nhận được một bản sao lỗi thời.
Truy cập bộ nhớ thống nhất (UMA)
Kiến trúc Truy cập Bộ nhớ Đồng nhất (UMA) có nghĩa là bộ nhớ dùng chung là giống nhau cho tất cả các bộ xử lý trong hệ thống. Các lớp phổ biến của máy UMA, thường được sử dụng cho máy chủ (tệp-), được gọi là Bộ xử lý đa đối xứng (SMP). Trong một SMP, tất cả các tài nguyên hệ thống như bộ nhớ, đĩa, các thiết bị I / O khác, v.v. đều có thể được bộ xử lý truy cập theo một cách thống nhất.
Quyền truy cập bộ nhớ không thống nhất (NUMA)
Trong kiến trúc NUMA, có nhiều cụm SMP có mạng chia sẻ / gián tiếp nội bộ, được kết nối trong mạng truyền thông báo có thể mở rộng. Vì vậy, kiến trúc NUMA là kiến trúc bộ nhớ phân tán vật lý được chia sẻ một cách hợp lý.
Trong máy NUMA, bộ điều khiển bộ nhớ đệm của bộ xử lý xác định xem một tham chiếu bộ nhớ là cục bộ trong bộ nhớ của SMP hay nó là từ xa. Để giảm số lần truy cập bộ nhớ từ xa, kiến trúc NUMA thường áp dụng bộ xử lý bộ nhớ đệm có thể lưu vào bộ đệm dữ liệu từ xa. Nhưng khi có sự tham gia của bộ nhớ đệm, đồng tiền của bộ đệm cần được duy trì. Vì vậy, những hệ thống này còn được gọi là CC-NUMA (Cache kết hợp NUMA).
Kiến trúc bộ nhớ chỉ bộ nhớ đệm (COMA)
Máy COMA tương tự như máy NUMA, với điểm khác biệt duy nhất là bộ nhớ chính của máy COMA hoạt động như bộ nhớ đệm được ánh xạ trực tiếp hoặc bộ nhớ đệm kết hợp tập hợp. Các khối dữ liệu được băm đến một vị trí trong bộ đệm DRAM theo địa chỉ của chúng. Dữ liệu được tìm nạp từ xa thực sự được lưu trữ trong bộ nhớ chính cục bộ. Hơn nữa, khối dữ liệu không có vị trí nhà cố định, chúng có thể tự do di chuyển trong toàn hệ thống.
Các kiến trúc COMA hầu hết đều có một mạng truyền thông điệp phân cấp. Một công tắc trong một cây như vậy chứa một thư mục với các phần tử dữ liệu là cây con của nó. Vì dữ liệu không có vị trí nhà riêng, nó phải được tìm kiếm một cách rõ ràng. Điều này có nghĩa là truy cập từ xa yêu cầu một đường truyền dọc theo các công tắc trong cây để tìm kiếm dữ liệu cần thiết trong thư mục của chúng. Vì vậy, nếu một switch trong mạng nhận được nhiều yêu cầu từ cây con của nó cho cùng một dữ liệu, nó sẽ kết hợp chúng thành một yêu cầu duy nhất được gửi đến cha của switch. Khi dữ liệu được yêu cầu trả về, công tắc sẽ gửi nhiều bản sao của dữ liệu đó xuống cây con của nó.
COMA so với CC-NUMA
Sau đây là sự khác biệt giữa COMA và CC-NUMA.
COMA có xu hướng linh hoạt hơn CC-NUMA vì COMA hỗ trợ một cách minh bạch việc di chuyển và sao chép dữ liệu mà không cần hệ điều hành.
Máy COMA rất tốn kém và phức tạp để xây dựng vì chúng cần phần cứng quản lý bộ nhớ không theo tiêu chuẩn và giao thức đồng tiền tệ khó thực hiện hơn.
Truy cập từ xa trong COMA thường chậm hơn so với truy cập trong CC-NUMA vì mạng cây cần được duyệt để tìm dữ liệu.