KTMT Nguyễn Xuân Huy

You might also like

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 30

Lecture 12 :

A Basic Snooping-Based
Multi-processor Implementation
( Triển Khai đa bộ xử lý trên snooping cơ bản )

I. Triển khai giao thức dựa trên sự vô hiệu


Đầu tiên ta cần nhắc lại :
 Cache là thành phần nhớ trong sơ đồ phân cấp bộ nhớ máy tính:
▪ Nó hoạt động như thành phần trung gian, trung chuyển dữ liệu từ bộ nhớ chính
về CPU và ngược lại.
▪ Cache có tốc độ nhanh hơn bộ nhớ chính.

Hình 1 : Vị trí của bộ nhớ cache trong hệ thống bộ nhớ .

CPU Cache Main

Trong hệ thống đa bộ xử lý nơi nhiều quy trình cần một bản sao của cùng
một khối bộ nhớ, việc duy trì tính nhất quán giữa các bản sao này làm phát sinh
một vấn đề được gọi là Sự cố kết hợp bộ nhớ cache.  
Điều này xảy ra chủ yếu do những nguyên nhân như :
 Chia sẻ dữ liệu có thể ghi.
 Quá trình di chuyển.
 Sự không nhất quán do I/O.
Ta có những Giao thức kết hợp bộ đệm sau :
-Giao thức MSI :Đây là giao thức kết hợp bộ đệm cơ bản được sử dụng trong hệ
thống đa bộ xử lý. Các chữ cái của tên giao thức xác định các trạng thái có thể có
trong bộ đệm.
-Giao thức MOSI: Giao thức này là phần mở rộng của giao thức MSI.
MOSI chỉ ra rằng bộ xử lý hiện tại sở hữu khối này và sẽ phục vụ các yêu cầu từ
các bộ xử lý khác cho khối.
-Giao thức MESI : là giao thức kết hợp bộ đệm được sử dụng rộng rãi
nhất. Mỗi dòng bộ đệm được đánh dấu bằng một trạng thái.
-Giao thức MOESI:  Đây là giao thức kết hợp bộ đệm đầy đủ bao gồm tất
cả các trạng thái có thể thường được sử dụng trong các giao thức khác nhau.
Hình 2 : Sơ đồ chuyển đổi trạng thái MESI

Từ sơ đồ ta có thể thấy trong một cỗ máy thực sự... việc đảm bảo tính nhất
quán một cách hiệu quả rất phức tạp.
Những thách thức và kỹ thuật mà chúng tôi mô tả ngày hôm nay (sự đánh
đổi giữa tính đơn giản và hiệu suất, những thách thức về tính chính xác trong một
hệ thống song song) cũng áp dụng tốt cho việc viết các chương trình song song.
Trong hệ thống phân cấp Intel Core i7, những thay đổi được thực hiện đối
với dữ liệu ở bộ đệm cấp độ thứ nhất có thể không hiển thị đối với bộ điều khiển
bộ đệm cấp độ thứ hai hơn là rình mò kết nối.
Bộ xử lý Intel thế hệ thứ 13 cải tiến cấu trúc kết hợp hiệu suất với tối đa tám
Nhân hiệu suất (P-core) và lên đến 16 Nhân hiệu quả (E-core), kết hợp với khối
lượng công việc được định tuyến thông minh bởi Hệ thống phân luồng của Intel .
Nó được cung cấp bởi các lõi P nhanh hơn và nhiều lõi E hơn với hỗ trợ
DDR4/DDR5 và PCIe 4.0/5.0. Điều đó cung cấp nền tảng có thể tối đa hóa đa
nhiệm và sự lựa chọn cho khả năng cấu hình, tùy chọn cấu trúc linh hoạt cao và
công cụ hàng đầu trong công nghiệp để đạt được hiệu suất tối ưu trong việc tùy
chỉnh.
Hình 3 :Hệ thống phân cấp Intel Core i7
Thuộc tính bao gồm của bộ đệm :
▪ Tất cả các dòng trong bộ đệm [đến bộ xử lý] gần hơn cũng nằm trong bộ đệm [từ
bộ xử lý] xa hơn
- Ví dụ: nội dung của L1 là tập hợp con của nội dung của L2
- Như vậy, mọi giao dịch liên quan đến L1 cũng liên quan đến L2, vậy là đủ chỉ để
L2 rình mò kết nối
▪ Nếu dòng ở trạng thái sở hữu (M trong MSI/MESI) trong L1, thì nó cũng phải ở
trạng thái sở hữu trong L2
- Cho phép L2 xác định xem giao dịch xe buýt có yêu cầu dòng bộ đệm được sửa
đổi hay không trong L1 mà không yêu cầu thông tin từ L1 hay không.
* Việc duy trì tự động sẽ không còn được giữ ngay cả khi L2 lớn hơn L1.
Ví dụ :
+Ta sẽ để Cache L2 lớn hơn L1
+Để L1 và L2 có cùng kích thước dòng, được thiết lập kết hợp 2 chiều và sử dụng
chính sách thay thế LRU
+ Để A, B, C ánh xạ vào cùng một bộ đệm L1.
Bộ xử lý truy cập A (L1+L2 lỗi ).
Bộ xử lý truy cập B (L1+L2 Lỗi ).
Bộ xử lý truy cập A nhiều lần.
Bộ xử lý hiện truy cập C, kích hoạt
L1 và L2
bỏ lỡ. L1 và L2 có thể chọn loại bỏ
các dòng, vì lịch sử truy cập khác
nhau.
Kết quả là, bao gồm không còn giữ

*Và để việc xử lý vô hiệu (handling invalidations) được duy trì bao gồm :
Khi dòng X bị vô hiệu hóa trong
bộ đệm L2 do BusRdX từ một bộ
đệm khác.
Cũng phải vô hiệu hóa dòng X
trong L1.
Tiếp đó ta lên để mỗi dòng L2
chứa một
bit trạng thái bổ sung cho biết nếu
dòng cũng tồn tại trong L1 hay
không .
Bit này cho biết sự vô hiệu hóa L2
của dòng bộ đệm do lưu lượng kết
hợp cần được truyền đến L1

 Để duy trì bao gồm L1 viết Hit (


L1 write Hit )
Giả sử L1 là bộ đệm ghi lại. Bộ xử
lý ghi vào dòng X (lần ghi L1)
Dòng X trong bộ đệm ẩn L2 ở trạng thái được sửa đổi trong giao thức kết hợp,
nhưng nó có dữ liệu cũ!
Khi giao thức kết hợp yêu cầu X được hợp nhất từ L2 (ví dụ: một bộ xử lý khác
tải X), bộ nhớ đệm L2 phải yêu cầu dữ liệu từ L1.
Thêm một bit khác cho “đã sửa đổi nhưng đã cũ” (việc tạo dòng L2 “đã sửa
đổi nhưng đã cũ” yêu cầu lấy dữ liệu thực từ L1 trước.

 Và chúng tôi đề ra mục tiêu của việc thực hiện mạch lạc của chúng tôi :
1.Thực hiện liên kết bộ đệm chính xác
2. Đạt hiệu suất cao
3. Giảm thiểu “chi phí” (ví dụ: giảm thiểu số lượng phần cứng bổ sung cần thiết để
triển khai tính nhất quán)
Như bạn sẽ thấy... Các kỹ thuật theo đuổi hiệu suất cao có xu hướng làm cho việc
đảm bảo tính chính xác trở nên khó khăn.
▪ Hiểu tại sao việc duy trì sự mạch lạc là một thách thức, ngay cả khi vận hành dưới
các thông số thiết kế máy đơn giản
- Làm thế nào để tối ưu hóa hiệu suất làm cho tính chính xác trở nên khó khăn? (ví
dụ: làm thế nào mà bế tắc, ổ khóa và chết đói có thể xảy ra đồng thời triển khai và
làm thế nào để tránh những vấn đề này?)
Bế tắc và ổ khóa liên quan đến tính chính xác của chương trình. Nạn đói thực sự là
một vấn đề về sự công bằng.
 Bế tắc :
Bế tắc là trạng thái trong đó một hệ
thống có các hoạt động nổi bật cần
hoàn thành, nhưng không có hoạt động
nào có thể tiến triển.
Có thể phát sinh khi mỗi thao tác đã có
được tài nguyên dùng chung mà thao
tác khác cần.
Trong các tình huống bế tắc, không có
cách nào để bất kỳ luồng nào (hoặc
trong hình minh họa này là ô tô) tiến
triển trừ khi một số luồng từ bỏ tài
nguyên
 Một số minh họa về sự bế tắc :

Bạn có hiểu ý nghĩa của sự bế tắc qua 2 hình ảnh đó chứ ??


Không chỉ ngoài đời chúng ta luôn có sự bế tắc của riêng mình , mà trong hệ thống
máy tính cũng có sự bế tắc của riêng nó.
Ví dụ 1:
A tạo ra công việc cho hàng đợi công việc của
B
B sản xuất công việc cho hàng đợi công việc
của A
Hàng đợi là vô hạn và công nhân chờ đợi nếu
không có không gian đầu ra có sẵn
Ví dụ 2:
Mỗi quá trình gửi một tin nhắn (chặn
gửi) tới bộ xử lý có id cao hơn tiếp
theo
Sau đó nhận tin nhắn từ bộ xử lý với
id thấp hơn tiếp theo

Điều kiện cần cho Deadlock


1. Loại trừ lẫn nhau: một bộ xử lý có thể giữ một tài nguyên nhất định cùng một lúc
2. Giữ và đợi: bộ xử lý phải giữ tài nguyên trong khi đợi
tài nguyên cần thiết để hoàn thành một hoạt động
3. Không ưu tiên: bộ xử lý không từ bỏ tài nguyên cho đến khi hoạt động
mong muốn thực hiện là hoàn thành
4. Chờ vòng tròn: các bộ xử lý chờ có sự phụ thuộc lẫn nhau (tồn tại một chu kỳ
trong biểu đồ phụ thuộc tài nguyên)
LiveLock
Livelock là trạng thái mà một hệ thống đang thực hiện nhiều hoạt động, nhưng
không có luồng nào đạt được tiến bộ có ý nghĩa.
Bạn có thể nghĩ ra một ví dụ điển hình về livelock trong cuộc sống hàng ngày
không?
Ví dụ về hệ thống máy tính:
Hoạt động liên tục hủy bỏ và thử lại
Starvation
Trạng thái mà một hệ thống đang đạt được tiến bộ tổng thể, nhưng một số quy trình
không đạt được tiến triển nào. (ô tô màu xanh tiến lên, nhưng ô tô màu vàng bị
dừng lại)
Đói thường không phải là một trạng thái vĩnh viễn
(xe xanh vượt thì xe vàng mới được đi)
Trong ví dụ này: giả sử giao thông di chuyển sang trái/phải (xe màu vàng) phải
nhường đường cho phương tiện di chuyển lên/xuống (xe màu xanh lá cây)
Part 1: A basic implementation of snooping (assuming an atomic bus):
Phần 1: Thực hiện cơ bản của snooping
(giả sử một chiếc bus nguyên tử)
Xem xét thiết kế hệ thống cơ bản - Một yêu cầu bộ nhớ nổi bật cho mỗi bộ xử lý
- Bộ đệm đơn cấp, ghi lại trên mỗi bộ xử lý
- Bộ nhớ cache có thể làm chậm bộ xử lý khi nó đang thực hiện các hoạt động kết
hợp
- Kết nối hệ thống là một bus chia sẻ nguyên tử (một bộ đệm giao tiếp tại một thời
điểm)

Giao dịch trên bus nguyên tử


1. Khách hàng được cấp quyền truy cập bus (kết quả của trọng tài)
2. Client đặt lệnh lên bus (cũng có thể đặt dữ liệu lên bus)

3. Phản hồi lệnh của một khách hàng bus khác được đặt trên bus
4. Khách hàng tiếp theo có được quyền truy cập bus (phân xử)
Bộ nhớ cache bỏ lỡ logic trên một bộ xử lý
1. Xác định bộ đệm (sử dụng các bit địa chỉ thích hợp)
2. Kiểm tra các thẻ bộ đệm (để xác định xem dòng có trong bộ đệm không) [Giả sử
không có thẻ nào phù hợp, phải đọc dữ liệu từ bộ nhớ]
3. Xác nhận yêu cầu truy cập bus
4. Chờ trợ cấp bus (theo quyết định của trọng tài bus)
5. Gửi địa chỉ + lệnh trên bus
6. Đợi lệnh được chấp nhận
7. Nhận dữ liệu trên bus
Bus nguyên tử có nghĩa là gì trong một kịch bản đa bộ xử lý?
BusRd, BusRdX: không cho phép giao dịch bus nào khác giữa địa chỉ cấp và nhận
dữ liệu
Flush: địa chỉ và dữ liệu được gửi đồng thời, được nhận bởi bộ nhớ
trước khi bất kỳ giao dịch nào khác được phép
Hành vi của bộ điều khiển bộ đệm đa bộ xử lý
Thách thức: cả yêu cầu từ bộ xử lý và bus đều yêu cầu tra cứu thẻ
Đây là một ví dụ khác về sự tranh chấp!

Nếu bus được ưu tiên:


Trong quá trình giao dịch trên bus, bộ xử lý bị khóa khỏi bộ đệm của chính nó. Nếu
bộ xử lý được ưu tiên:
Trong quá trình truy cập bộ đệm của bộ xử lý, bộ đệm không thể phản hồi với kết
quả starvation của nó
(vì vậy nó làm chậm các bộ xử lý khác ngay cả khi không có
chia sẻ dưới mọi hình thức đều có mặt)
* Bộ điều khiển starvation có tâm trí của nó trên bus và bus trong tâm trí của

Giảm bớt sự tranh chấp: cho phép đồng thời truy cập bởi bộ điều khiển phía
bộ xử lý và starvation
Tùy chọn 1: lưu trữ các thẻ trùng lặp
Tùy chọn 2: bộ nhớ thẻ nhiều cổng
Lưu ý: các thẻ phải được đồng bộ hóa để đảm bảo tính chính xác, vì vậy việc cập
nhật thẻ bởi một bộ điều khiển sẽ vẫn cần chặn bộ điều khiển kia (nhưng việc sửa
đổi thẻ không thường xuyên so với việc kiểm tra chúng)
Hãy ghi nhớ: trong cả hai trường hợp, chi phí của hiệu suất bổ sung là tài nguyên
phần cứng bổ sung.

Giao thức báo cáo kết quả starvation trong MESI


▪ Giả sử lỗi đọc bộ đệm (BusRd)
▪ Phản hồi chung của các bộ đệm phải xuất hiện trên bus
- Dây có bẩn không? Nếu vậy, bộ nhớ sẽ không phản hồi => Bộ nhớ cần biết phải
làm gì
- Đường dây có được chia sẻ không? Nếu vậy, bộ đệm sẽ tải vào trạng thái S, không
phải E : Load cache cần biết phải làm sao
Kết quả starvation được thông báo như thế nào?
Khi nào kết quả starvation được thông báo?
Reporting snoop results: how (Báo cáo kết quả starvation: làm thế nào)
‘OR’ of result from all processors
( kết quả củ a tấ t cả các bộ xử lý )
‘OR’ of result from all processors Bus
(kết quả củ a tấ t cả các bus bộ xử lý
‘OR’ of result from all processors (0
value indicates all processors have
responded) (giá trị 0 cho biết tấ t cả các
bộ xử lý đã phả n hồ i)

These three lines are additional bus interconnect


hardware(Ba dòng này là phầ n cứ ng kết nố i bus bổ
sung!)

Reporting snoop results: when


(Báo cáo kết quả starvation: khi nào)
Bộ điều khiển bộ nhớ có thể ngay lập tức bắt đầu truy cập DRAM, nhưng không
phản hồi (phản hồi squelch) nếu kết quả starvation từ một bộ đệm khác cho biết nó
có bản sao của dữ liệu gần đây nhất
- Bộ nhớ đệm nên cung cấp dữ liệu chứ không phải bộ nhớ
▪ Bộ nhớ có thể cho rằng một trong các bộ đệm sẽ yêu cầu dịch vụ cho đến khi kết
quả starvation hợp lệ (nếu việc starvation cho biết không có bộ đệm nào có dữ liệu,
thì bộ nhớ phải phản hồi)

Handling write backs


(Xử lý viết lại)
 Viết lại liên quan đến hai giao dịch bus
1. Đường vào (đường do bộ xử lý yêu cầu)
2. Dòng đi (dòng bị xóa trong bộ đệm phải được xóa)
 Lý tưởng nhất là muốn bộ xử lý tiếp tục ngay khi
có thể (không cần phải đợi cho đến khi hoàn thành)
 Giải pháp: bộ đệm ghi lại
- Dòng dính được trộn lẫn trong bộ đệm ghi lại
- Tải ngay dòng yêu cầu (cho phép bộ xử lý tiếp tục)
- Xóa nội dung của bộ đệm ghi lại sau đó
Cache with write-back buffer
 Điều gì xảy ra nếu một yêu cầu cho địa chỉ của
dữ liệu trong bộ đệm ghi lại xuất hiện trên bus ?
 Bộ điều khiển Snoop phải kiểm tra
ghi lại địa chỉ bộ đệm trong bổ sung cho các thẻ bộ nhớ cache.
Nếu có bộ đệm ghi lại match :
1. Phản hồi bằng dữ liệu từ bộ đệm ghi lại thay vì bộ đệm
2. Hủy truy cập bus yêu cầu
Các thành phần phần cứng này xử lý                                  Các thành phần phần
cứng này xử lí
các nhiệm vụ liên quan đến tasks                                            yêu cầu liên quan đến
bộ xử lý

In practice state transitions are not atomic


▪ Biểu đồ chuyển đổi trạng thái giao thức mạch lạc (như biểu đồ bên dưới) giả định
rằng
chuyển đổi giữa các trạng thái là automic
▪  Giả định rằng bản thân giao dịch bus là automic, nhưng tất cả các hoạt động của
hệ thống thực hiện như một kết quả của một hoạt động bộ nhớ không:
- ví dụ: tra cứu thẻ, phân xử bus, chờ các hành động của bộ điều khiển khác,…
▪ Việc thực hiện phải cẩn thận để xử lý các điều kiện race một cách thích hợp
Race condition
-Race condition là tình trạng nhiều process truy xuất và thao tác đồng thời lên dữ
liệu chia sẻ. Kết quả cuối cùng của việc truy xuất đồng thời này phụ thuộc thứ tự
thực thi của các lệnh thao tác dữ liệu.VD:
Bộ xử lý P1 và P2 ghi đồng thời vào dòng bộ đệm A hợp lệ
(cả hai đều cần phát hành BusUpg để di chuyển dòng từ trạng thái S sang trạng thái
M)
P1 có quyền truy cập bus ( quyết định bởi arbiter), P1 gửi BusUpg.
P2 đang chờ truy cập bus (để gửi BusUpg của chính nó), không thể tiếp tục vì P1 có
bus.
P2 nhận được BusUpg, phải làm mất hiệu lực dòng A (theo giao thức MESI).
*Livelock
Hai bộ xử lý ghi vào bộ nhớ cache dòng B
P1: có được bus, vấn đề BusRdX
P2: làm mất hiệu lực
Trước khi P1 thực hiện cập nhật dòng bộ nhớ cache, P2 có được bus, vấn đề
BusRdX
P1 làm mất hiệu lực và lặp lại...
Livelock muốn nói về:

 Nhiều thread cùng truy cập vào critical section nhưng luôn chủ động
nhường các thread còn lại, điều đó khiến cho tất cả đều không được thực thi

*Self check: when does a write “commit?”


▪ Một commit ghi khi một giao dịch độc quyền đọc xuất hiện trên bus và được tất cả
các bộ nhớ đệm khác thừa nhận.
- Tại thời điểm này, viết là "commit".
- Tất cả các lần đọc trong tương lai sẽ hoàn thiện giá trị của lần ghi này (ngay cả khi
dữ liệu từ P chưa được ghi vào dòng dirty cache của P hoặc vào bộ nhớ).
- Ý tưởng chính: thứ tự của các giao dịch trên bus xác định thứ tự toàn cầu của việc
ghi trong chương trình song song (viết tuần tự hóa).
▪ commit! = Complete: việc ghi hoàn tất khi giá trị cập nhật là trong dòng bộ nhớ
cache.

*Starvation
▪ Nhiều bộ xử lý cạnh tranh để có quyền truy cập bus.
- Phải cẩn thận để tránh (hoặc giảm thiểu khả năng) starvation.
- Ví dụ: điều gì sẽ xảy ra nếu bộ xử lý có "id thấp nhất" thắng.
▪ Các chính sách mẫu nhằm đạt được sự công bằng hơn:
- FIFO arbitration.
- Kinh nghiệm dựa trên mức độ ưu tiên (những người sử dụng bus thường xuyên bị
giảm mức độ ưu tiên).
*Design issues
Vấn đề thiết kế
▪ Thiết kế bộ điều khiển bộ nhớ cache và các thẻ
(để hỗ trợ truy cập từ bộ xử lý và bus).
▪ Trình bày kết quả snoop trên bus như thế nào và khi nào.
▪ Đối phó với việc write backs.
▪ Đối phó với sự chuyển đổi trạng thái phi nguyên tử.
▪ Tránh deadlock,livelock,starvation.

First-half summary: parallelism and concurrency in coherence implementation


are sources of complexity
▪ Bộ xử lý, bộ nhớ đệm và bus đều là tài nguyên hoạt động song song.
▪ “Các phép toán bộ nhớ” được kiến trúc trừu tượng hóa dưới dạng automic.
▪ Tối ưu hóa hiệu suất thường đòi hỏi phải chia nhỏ các hoạt động thành nhiều
giao dịch nhỏ hơn.

Part 2:

Building the system around non-atomic


Bus transaction

*Review: transaction on an atomic bus


1. Clients được cấp quyền truy cập bus (kết quả của arbitration).
2. Clients đặt lệnh lên  bus (cũng có thể đặt dữ liệu trên bus).
3. Phản hồi lệnh của một bus khác được đặt lên bus.
4. Clients tiếp theo có được quyền truy cập bus (arbitration).
Split-transaction bus
Giao dịch bus được chia thành hai giao dịch:
1. “request” -transaction
2. “reply”-transaction
Cả hai transaction phải cạnh tranh bus bằng arbitration.

Initiating a request
Có thể coi một bus phân chia giao dịch như hai bus riêng biệt:
Một bus request và một bus reply.

Bước 1: Yêu cầu quyền truy cập bus request


Bước 2: Bus arbiter cấp quyền truy cập, gắn thẻ cho giao dịch
Bước 3: Đặt lệnh + địa chỉ trên bus request
Request table

Transaction tag
is just the index into
the request table
Read miss: cycle-by-cycle bus behavior (phase 1)

Bộ đệm thự c hiện rình mò: tra cứ u thẻ, cậ p


nhậ t trạ ng thái bộ đệm, v.v.Hoạ t độ ng bộ nhớ
cam kết ở đây!(KHÔNG CÓ BUS)

Addr req : Yêu cầu phân xử: bộ điều khiển bộ đệm đưa ra yêu cầu địa chỉ cho xe
buýt
(nhiều bộ đệm có thể làm như vậy trong cùng một chu kỳ)
Grant : Giải quyết yêu cầu: trọng tài bus địa chỉ cấp quyền truy cập cho một trong
những người yêu cầu
Mục nhập bảng yêu cầu được phân bổ cho yêu cầu (xem trang trình bày trước)
Các dòng trọng tài đặc biệt cho biết thẻ được gán cho yêu cầu
Addr : Bus “người chiến thắng” đặt lệnh/địa chỉ trên xe buýt
Addr Ack : Bộ nhớ cache xác nhận kết quả rình mò này đã sẵn sàng
(hoặc báo hiệu rằng họ không thể hoàn thành việc rình mò kịp thời ở đây (ví dụ:
tăng dây ức chế)
Read miss: cycle-by-cycle bus behavior (phase 2)
Bộ phả n hồ i đặ t dữ liệu phả n hồ i trên bus dữ liệu
Bộ nhớ cache hiển thị kết quả rình mò cho yêu cầ u vớ i dữ liệu
Mụ c nhậ p bả ng yêu cầ u đượ c giả i phóng
Ở đây: giả sử dòng bộ đệm 128 byte → 4 chu kỳ trên bus 256 bit

= giao dịch bộ nhớ 1

= giao dịch bộ nhớ 1


Lưu ý: ghi lại và giao dịch BusUpg không có thành phần phản hồi
(viết lại có được quyền truy cập vào cả bus địa chỉ yêu cầu và bus dữ liệu như một
phần của giai đoạn “yêu cầu”)

Note out-of-order completion (Lưu ý hoàn thành không theo thứ tự)

Key issues to resolve(Các vấn đề chính cần giải quyết)


▪ Yêu cầu mâu thuẫn
- Tránh mâu thuẫn với các yêu cầu bằng cách không cho phép chúng
- Mỗi bộ đệm có một bản sao của bảng yêu cầu
- Chính sách đơn giản: bộ đệm không thực hiện các yêu cầu mâu thuẫn với yêu cầu
trong bảng yêu cầu
▪ Kiểm soát lưu lượng:
- Bộ nhớ cache/bộ nhớ có bộ đệm để nhận dữ liệu từ bus
- Nếu bộ đệm đầy, máy khách NACK các yêu cầu hoặc phản hồi có liên quan
(NACK = xác nhận phủ định)
- Kích hoạt thử lại sau
Tình huống 1: P1 đọc nhầm đến X, đọc giao dịch liên quan đến X nổi bật trên bus
Nếu yêu cầu chưa xử lý được đọc: không có xung đột. Không cần thực hiện yêu cầu
xe buýt mới, chỉ cần lắng nghe phản hồi cho yêu cầu nổi bật.
Tình huống 2: P1 đọc nhầm đến X, ghi giao dịch liên quan đến X đang tồn đọng
trên bus

Nếu có một yêu cầu chưa xử lý xung đột (được xác định bằng cách kiểm tra bảng
yêu cầu), bộ nhớ cache phải giữ yêu cầu cho đến khi xung đột được xóa
Why do we have queues in a parallel system?
(Tại sao chúng ta có hàng đợi trong một hệ thống song song?)

Answer: để phù hợp với tỷ lệ sản xuất và tiêu dùng thay đổi (không thể đoán trước).
Miễn là A và B, tính trung bình, sản xuất và tiêu dùng với tốc độ như nhau, thì cả
hai công nhân đều có thể làm việc hết công suất.
Không có hàng đợi: thông báo A dừng chờ B chấp nhận đầu vào mới (và đôi khi B
dừng chờ A tạo đầu vào mới).

Với hàng đợi cỡ 2: A và B không bao giờ bị đình trệ

Kích thướ c củ a
hàng đợ i khi A
hoàn thành mộ t
phầ n công việc
(hoặ c B bắ t đầ u
công việc)

Multi-level cache hierarchies


(hệ thống phân cấp bộ đệm đa cấp)
Các số biểu thị các bước trong bộ đệm bị thiếu từ bộ xử lý ở bên trái. Phục vụ bởi
bộ đệm bên phải.
Recall the fetch-deadlock problem(Nhớ lại vấn đề deadlock tìm nạp)
Giả sử một yêu cầu bộ nhớ nổi bật cho mỗi bộ xử lý.
Xem xét vấn đề deadlock tìm nạp: bộ đệm phải có khả năng phục vụ các yêu cầu
trong khi chờ phản hồi cho yêu cầu của chính nó (hệ thống phân cấp làm tăng độ trễ
phản hồi)
Deadlock due to full queues( deadlock do hàng đợi đầy)

Giả sử bộ đệm có kích thướ c sao


cho tố i đa kích thướ c hàng đợ i là
mộ t tin nhắ n. (kích thướ c bộ đệm
= 1)
Yêu cầ u đọ c gử i đi (đượ c khở i tạ o
bở i bộ xử lý)
Yêu cầ u đọ c đến (do bộ đệm khác)
**
Cả hai yêu cầ u đều tạ o ra phả n hồ i
yêu cầ u không gian trong hàng đợ i
khác (phụ thuộ c vòng tròn)

Multi-level cache hierarchies


(Hệ thống phân cấp bộ đệm đa cấp)
Giả sử một yêu cầu bộ nhớ nổi bật cho mỗi bộ xử lý.
Xem xét vấn đề deadlock tìm nạp: bộ đệm phải có khả năng phục vụ các yêu cầu
trong khi chờ phản hồi cho yêu cầu của chính nó (hệ thống phân cấp làm tăng độ trễ
phản hồi)
Định cỡ tất cả các bộ đệm để chứa số lượng yêu cầu chưa xử lý tối đa trên xe buýt
là một giải pháp để tránh deadlock. Nhưng một cái tốn kém!

Avoiding buffer deadlock with separate request/response queues


(Tránh deadlock bộ đệm với riêng biệt hàng đợi yêu cầu/phản hồi)

Hệ thố ng phân loạ i tấ t cả các giao dịch thành


yêu cầ u hoặ c phả n hồ i
Thông tin chi tiết chính: phả n hồ i có thể
đượ c hoàn thành mà không cầ n tạ o thêm giao
dịch!
Yêu cầ u TĂNG chiều dài hàng đợ i
Nhưng phả n hồ i GIẢ M chiều dài hàng đợ i
Trong khi cố gắ ng gử i yêu cầ u bị đình trệ, bộ
nhớ cache phả i có khả năng phả n hồ i dịch
vụ .
Các phả n hồ i sẽ tiến triển (chúng không tạ o
ra công việc mớ i nên không có sự phụ thuộ c
vòng tròn), cuố i cùng sẽ giả i phóng tài
Danh sách này chắ c chắ n không đầ y đủ , nó chỉ là nguyên cho các yêu cầ u
nhữ ng gì tôi nghĩ ra từ đầ u. (Đây sẽ là mộ t câu hỏ i
phỏ ng vấ n việc làm tuyệt vờ i!)
Putting it all together(để tất cả cùng nhau)
Bài tập trên lớp: mô tả mọi thứ có thể xảy ra trong quá trình thực hiện tuyên bố này
Int x=10; giả sử đây là ghi vào bộ nhớ (giá trị không được lưu trong thanh ghi)
Class exercise: describe everything that might occur during the execution of
this statement *
Int x=10;
1. Chuyển đổi địa chỉ ảo thành địa chỉ vật lý (tra cứu TLB)
2. TLB bỏ lỡ
3. Cập nhật TLB (có thể liên quan đến hệ điều hành)
4. Hệ điều hành có thể cần hoán đổi trang để lấy bảng trang thích hợp (tải từ đĩa
sang địa chỉ vật lý)
5. Tra cứu bộ đệm (kiểm tra thẻ)
6. Xác định dòng không có trong cache (cần tạo BusRdX)
7. Trọng tài cho xe buýt
8. Thắng xe buýt, đặt địa chỉ, hiệu lệnh lên xe buýt
9. Tất cả các bộ đệm đều thực hiện rình mò (ví dụ: vô hiệu hóa các bản sao cục bộ
của dòng có liên quan)
10. Một bộ đệm hoặc bộ nhớ khác quyết định nó phải phản hồi (giả sử đó là bộ nhớ)
11. Gửi yêu cầu bộ nhớ đến bộ điều khiển bộ nhớ
12. Bản thân bộ điều khiển bộ nhớ cũng là một bộ lập lịch
13. Bộ điều khiển bộ nhớ kiểm tra hàng đang hoạt động trong bộ đệm hàng DRAM.
(Có thể cần kích hoạt hàng DRAM mới. Hãy giả sử như vậy.)
14. DRAM đọc giá trị vào bộ đệm hàng
15. Bộ nhớ phân xử cho bus dữ liệu
16. Trí nhớ thắng xe buýt
17. Bộ nhớ đưa dữ liệu lên bus
18. Yêu cầu bộ đệm lấy dữ liệu, cập nhật dòng và thẻ bộ đệm, chuyển dòng sang
trạng thái độc quyền
19. Bộ xử lý được thông báo dữ liệu tồn tại
20. Tiền thu được từ hướng dẫn

You might also like