Bộ đa xử lý mở rộng hỗ trợ bộ nhớ chung có thể chọn đề loại bỏ hoặc bao hàm liên kết bộ
nhớ đệm. Thiết kế phần cứng thông dụng nhất là loại bỏ liên kết bộ nhớ đệm, thay vào đó là chú
trọng hệ thống bộ nhớ mở rộng. Một số công ty đã áp dụng thiết kế này vào bộ đa xử lý; ví dụ điển hình là Cray T3D/E. Trong những bộ đa xử lý này, bộ nhớ được phân phối đến các nút và
các nút này liên kết với nhau thông qua một mạng. Bộ điều khiển trong mỗi nút sẽ kiểm soát việc truy cập lân cận hay từ xa, dựa vào địa chỉ của điểm mà không quan tâm đến việc dữ liệu nằm ở bộ nhớ cục bộ hay bộ nhớ từ xa. Với trường hợp bộ nhớ từ xa, một lệnh sẽ được gửi đến bộ điều khién dé có thể truy cập dữ liệu.
Mặc dù các hệ thống đều có bộ nhớ đệm, song nhằm hạn chế vấn đề về tính liên thông, chỉ có dữ liệu riêng tư được giữ trong bộ đệm còn dữ liệu chia sẻ thì không. Tất nhiên, phần mềm vẫn có thê lưu vào bộ đệm một cách chính xác dữ liệu được chia sẻ bằng cach sao chép đữ liệu từ địa chỉ vùng được chia sẻ sang vùng cá nhân đã được lưu trong bộ nhớ đệm. Tính liên kết được kiêm soát bởi bộ điều khiên. Lợi thế của phương thức này là không yêu cầu nhiều sự hỗ trợ phần cứng, thay vào đó là áp dụng, mặc dù tính năng sao chép khối rất hữu ích, vì truy cập từ xa chỉ tìm nạp từ đơn (hoặc từ kép) chứ không phải cả khối bộ đệm.
Tuy vậy, cách thức này cũng có một vài hạn chế. Cơ chế biên dịch cho tính liên kết bộ đệm phần mềm một cách tường minh còn hạn chế. Những kỹ thuật hiện nay chủ yếu áp dụng cho các chương trình có cấu trúc tính toán song song tốt hoặc một số ít dưới hình thức lập trình hướng đối tượng, ngoài ra những kỹ thuật này còn gây phát sinh chỉ phí đáng kê khi sao chép dữ liệu.
Đối với một số vấn đề bất thường hay các vấn đề liên quan đến cầu trúc dữ liệu động và con trỏ ( bao gồm hệ thống vận hành), tính liên kết vùng nhớ đệm của các phần mềm biên dịch trở nên không thực tế. Một trong những khó khăn cơ bán chính là tính duy trì của các thuật toán liên kết dựa trên nền tảng phần mềm: mỗi khối có khả năng được chia sẻ cần được vận hành như các khối đã chia sẻ. Việc giữ tính nhất quán dẫn đến phát sinh liên kết quá mức, vì trình biên dịch không
thê dự đoán quá trình chia sẻ thực tế đủ chính xác. Do tính phức tạp của những tương tác qua lại, đòi hỏi lập trình viên giải quyết vẫn đề về tính liên thông là không thê thực hiện.
Điều thứ hai, nếu không có sự thống nhất vùng đệm, bộ đa xử lý sẽ mat đi khả năng tìm nạp và sử dụng nhiều từ trong một khối đệm duy nhất. Lợi thế của việc định xứ không gian trong vùng dữ liệu chia sẻ không được tận dụng khi tìm nạp các từ đơn lẻ ở bộ nhớ từ xa cho mỗi lần tham chiếu. Giá sử cơ chế DMA giữa các vùng bộ nhớ có hữu ích, nhưng những cơ chế này lại rat tôn kém đề sử dụng (có thể yêu cầu sự can thiệp hệ điều hành) hoặc có chỉ phí cao đề có thể thực hiện đầy đủ vì cần hỗ trợ phần cứng chuyên dụng cùng với một bộ nhớ trung gian. Tuy nhiên,với trường hợp các chương trình truyền tải thông điệp, những cơ chế này lại vô cùng hữu hiệu, vì các lập trình viên có thể vượt qua những bắt lợi về dung lượng bằng cách sử dụng thông điệp có tính truyền tải lớn.
Điều thứ ba, các kỹ thuật cho phép đỗ trễ như là kỹ thuật prefetch sẽ hiệu quả hơn khi tìm nạp nhiều từ, ví dụ như khối đệm và ở những nơi dữ liệu tìm nạp được liên kết; những đặc điểm này sẽ được giới thiệu trong những phần sau.
Tất cả những nhược điểm trên càng trở nên nghiêm trọng bởi độ trễ truy cập lớn giữa bộ nhớ từ xa với bộ đệm cục bộ. VÍ dụ, việc truy cập bộ đệm lân cận trén Cray T3E có độ trễ 2 chu kỳ và được định tuyến. Việc truy cập bộ nhớ từ xa cần đến 400 chu kỳ xung clock xét với bộ nhớ từ xa sử dụng vi xử lí Alpha 450MHz trén T3E-900.
Chính vì những lý do này, tính liên thông bộ nhớ đệm có thê được đáp ứng trên những bộ đa xử lý cỡ nhỏ. Với những cấu trúc quy mô lớn xuất hiện những thách thức mới để mở rộng tính liên thông bộ đệm trên mô hình chia sẻ bộ nhớ. Mặc dù tổng tuyên dễ dàng thay thế bằng đường liên mạng linh hoạt hơn, và chúng ta có thể phân phối bộ nhớ từ đó thay đôi được thông lượng bộ nhớ, việc thiếu khả năng mở rộng cho mạng liên thông có can thiệp cần được chú trọng.
Một giao thức can thiệp yêu cầu sự trao đôi giữa tất cả các bộ đệm trên mỗi lan cache miss, bao gồm cả viết đữ liệu chia sẻ tiềm nang. VIéc thiéu di bat kỳ một cấu trúc dữ liệu tập trung nào giúp truy vết trạng thái bộ nhớ đệm vừa mang lợi ích với tiến trình can thiệp do có chỉ phí thấp, lại vừa là gót chân Achilles khi nó được mở rộng. Ví dụ với l6 vị xử lý va mọt khối 64 bytes cùng với 512 KB bộ nhớ đệm, yêu cầu thông lượng trên toàn bộ tông tuyến (bỏ qua chu kỳ đình trệ) cho 4 chương trình lĩnh vực khoa học và kỹ thuật nằm trong khoảng 1 GB/s (voi Barnes) téi 42 GB4s (với FFT), trong đó vi xử lý sẽ thực hiện tham chiếu dữ liệu mỗi một nano giây, tưrơng đương với vi xử lý superscalar 2000 có thê thực hiện. Có thê đem so sánh với hệ thông của Sun Enterprise được hỗ trợ liên kết StarFire, thông lượng hệ thống SMP lớn nhất năm 2000, có thê hỗ trợ tốc độ truy xuất ngẫu nhiên lên tới 12 GB/s và cso thông lượng tôi đa là 21.3 GB/s trong bộ nhớ hệ thống.
61
Mặc dù kích thước bộ đệm trong mô phỏng này là trung bình (vẫn có thê loại bỏ việc đình trệ trên vi xu ly don nhân).
Môi lựa chọn khác là ta có thê tạo một kiến trúc bộ nhớ chia sẻ bao hàm cả tính liên thông bộ đệm. Điểm mẫu chốt ở đây chính là tìm ra giao thức thống nhất để thay thế với giao thức can thiệp. Đơn cử là giao thức thư mục. Một thư mục duy trì trạng thái của các khối có khả năng được lưu trong bộ đệm. Thông tin thư mục báo gồm các khối đã sao chép khối, kể cả các thông tin nhiễu. (Mục 6. L1 trang 735 mô tả phương thức kết hợp sử dụng các thư mục để mở rộng giao thức can thiệp.)
Những cài đặt trên thư mục đang tôn tại liên kết đường dẫn tới thư mục với mỗi khối trong vùng nhớ. Trong các giao thức điện hình, lượng thông tin tỉ lệ với kết quả tạo ra bởi các khối bộ nhớ và các vi xử lý. Đối với những bộ đa xử lý với ít hơn 200 vi xử lý thì chi phí phát sinh là có thê chấp nhận được. Với những bộ đa xử lý lớn, ta cần một phương pháp giúp cầu trúc thư mục trở nên cân đối hiệu quả hơn ( ví dụ, ưu tiên đưa vào bộ đệm) hoặc duy trì bits ôn định trên mỗi đường dẫn.
Để ngăn ngừa việc tắc nghẽn thư mục, các đường dẫn được phân phối giữa các vùng nhớ, nhờ đó chỉ khi từng vùng nhớ độc lập yêu cầu truy cập đến nhau thì các truy cập đường dẫn có thê đi tới những vùng khác nhau. Đường dẫn phân phối giữ lại đặc điểm của mỗi khối trong trạng thái chia sẻ đã xác định vị trí. Đặc tính này cho phép giao thức liên thông tránh việc bị phát tán.
Hình 6.27 thê hiện các đường dẫn từ bộ đa xử lý phân vùng bộ nhớ tới từng điểm.
HÌNH 6.27 Thư mục được thêm vào các nút để thiết lập liên thông bộ đệm trong bộ đa xử lý vùng nhớ phân tán. Mỗi thư mục chịu trách nhiệm xử ly những bộ đệm chia sẻ dia chỉ của thành phần vùng nhớ trong nút. Thư mục có thê kết nói đến vi xử lý và bộ nhớ thông qua tuyến chung như hình minh họa, hoặc có công riêng biệt kết nôi đến bộ nhớ, hoặc là một phần của nút điều khiển trung tâm nơi các nút trung gian và các nút ndi ham giao qua.
e© Cơ bản về giao thức liên thông bộ đệm dựa trên cấu trúc thư mục
Cũng giống như giao thức can thiệp, hai quá trình chính cần cài đặt cho thư mục là xử lý lỗi đọc và xử lý việc ghi lên khối đệm trồng được chia sẻ. (Xử lý lỗi ghi đối với khối chia sẻ là sự kết hợp giữa hai quá trình.) Đề thiết lập các thao tác nay, thư mục cần xác định trạng thái của từng khối đệm. Theo giao thức đơn giản, các trạng thái này có thê là:
Chia sẻ: Một hay nhiều vi xử lý có chung khối đệm, giá trị trong bộ nhớ luôn được cập nhật.
Không lưu vào bộ đệm: Vi xử lý không sao chép khối đệm.
Độc quyền: Chí một vi xử lý có bản sao chép của khối đệm và nó được ghi vào trong khối, vì thé bản sao bộ nhớ không thê cập nhật từ ngoài. Vi xử lý trở thành chủ sở hữu khối đó.
Bên cạnh việc xác định trạng thái khối đệm, ta cần biết vi xử lý đã có bản sao của khối khi nó được chia sẻ, vì sẽ cần vô hiệu hóa chức năng ghi đè của chúng. Phương pháp đơn giản nhất đó là lưu lại 1 bít vector cho một khối bộ nhớ. Khi bộ nhớ được chia sẻ,mỗi bit trong vector sẽ 63
biểu hiện khi nào vi xử lý phản hôi lại việc sao chép một khối. Chúng ta còn có thê sử dụng bit vector đề truy ra chủ sở hữu của khối nêu khối đó ở trạng thái độc quyền. Vì tính hiệu quả, ta có
thê xác định trạng thái mỗi khối đêm trên các bộ đệm khác nhau.
Các trạng thái và sự chuyên đôi giữa các trạng thái máy ở mỗi bộ đệm thì tương đồng với những kĩ thuật cho bộ đệm can thiệp dù một số tác vụ chuyên đổi có đôi nét khác biệt. Ta đưa ra
kết luận đơn giản đối với bộ đệm can thiệp: Việc ghi dữ liệu không độc quyên lên bộ đệm ghi luôn gây ra lỗi ghi, và vi xử lý sẽ dừng tiến trình đến khi có kết nỗi thành công. Vì đường liên mạng không phải một tuyến và bởi chúng ta tránh việc phát tán nên phát sinh hai vấn đề. Thứ nhất, chúng ta không thê sử dụng đường liên kết như một điểm phân phối giống chức năng của tuyến trong giao thức can thiệp. Điều thứ hai, vì đường liên kết mang thông điệp định hướng (khác với tuyên được định hướng theo tiến trình xử lý điểm đầu cuối qua các lệnh thực thi), nhiều thông điệp phải phản hồi rõ ràng.
Trước khi có biểu đỗ trạng thái giao thức, việc khảo sát một bộ các loại thông điệp có thê được trao đôi giữa các nút rất hữu hiệu. Nút cục bộ là nút khởi tạo yêu cầu. Nút chủ là nơi đặt bộ nhớ và đường dẫn thư mục của địa chỉ lưu trữ. Không gian địa chỉ vật lý được phân phối tĩnh vì vậy có thể xác định nút bao gồm bộ nhớ và thư mục của địa chỉ vật lý. Ví dụ, các bit bậc cao cung cấp số của nút trong khi bít bậc thấp cung cấp độ dời cùng với bộ nhớ trên nút đó. Nút cục bộ có thể là nút chủ. Thư mục cần được truy cập khi nút chủ là nút cục bộ vì các bản sao có thể tồn tại ở nút thứ ba, gọi là nút từ xa.
Một nút từ xa là nút có bản sao của khối đệm kê cá độc quyền hay chia sẻ. Nút từ xa có thé giống cả nút cục bộ lẫn nút chủ. Trong trường hợp này, giao thức cơ bản không thay đổi, nhưng thông điệp bộ xử lý tương tác có thê thay bằng thông điệp bộ xử lý nội bộ.
Trong mục này, ta sẽ bàn về mô hình nhất quán bộ nhớ. Đề giảm thiểu các loại thông điệp và độ phức tạp của giao thức, ta giả định rằng các thông điệp sẽ được gửi đi và xử lý theo thứ tự khi chúng được gửi đi. Giả định có thé không đúng trong thực tế, thậm chí gây thêm vấn đè, điều này sẽ được đền cập trong mục 6.8. Trong mục này,ta sẽ dùng giả định trên đê đảm bảo rằng các thông điệp được gửi không hợp lệ được xử lý ngay lập tức.
Hình 6.28 Các thông báo có thể được gửi giữa các nút dé duy trì tính nhất quán được hiển thị với nguồn và nút đích, nội dung (trong đó P = số bộ xử lý yêu cầu), A = địa chỉ được yêu cầu và D = nội dung dữ liệu) và chức năng của thông báo. Hai thông báo đầu tiên là các yêu cầu bỏ lỡ được
gửi bởi bộ nhớ cache cục bộ về nhà. Tin nhắn thứ ba đến thứ năm là những tin nhắn được gia đình gửi đến bộ nhớ đệm từ xa khi gia đình cần dữ liệu để đáp ứng một yêu cầu bỏ lỡ đọc hoặc viết.
Các phản hồi giá trị dữ liệu được sử dụng đề gửi một giá trị từ nút chính trở lại nút yêu cầu. Việc ghi ngược giá trị đữ liệu xảy ra vì hai lý do: khi một khối được thay thế trong bộ nhớ cache và phải được ghi trở lại trang chủ của nó bộ nhớ, và cũng đề trả lời tìm nạp hoặc tìm nạp / lam mat hiệu lực các tin nhắn từ nhà. Ghi lại giá trị dữ liệu bất cứ khi nào khối được chia sẻ đơn giản hóa số lượng trạng thái trong giao thức, vì bất kỳ khối bắn nào phải là độc quyền và bất kỳ khối được chia sẻ nào khối luôn có sẵn trong bộ nhớ chủ.
e Một ví dụ về giao thức thư mục
Những trạng thái cơ bản của khối đệm trong giao thức thư mục cực kỳ tương đồng với giao thức can thiệp, các trạng thái này trong thư mục cũng giống với chúng ta đã nêu ra trước đó. Vì thé ching ta có thé bat đầu với biêu đồ trạng thái cơ bản thê hiện sự chuyên đổi trạng thái với từng khối đệm riêng biệt, sau đó nghiên cứu biểu đồ trạng thái với đường dẫn thư mục phản hồi đến từng khối bộ nhớ. Cũng giống như trường hợp can thiệp, những biểu đồ chuyển trạng thái này không thê hiện toàn bộ chỉ tiết của giao thức liên thông: tuy nhiên, bộ điều khiên thực tế lại phụ thuộc lớn vào số lượng chỉ tiết của bộ đa xử lý (thành phần phân phối thông điệp, cấu trúc bộ
65
đệm). Trong mục này, chúng ta có thê trình bày những biểu đồ trạng thái giao thức cơ bản. Những khó khăn trong thiết lập biểu đồ chuyên đôi trạng thái đã được nghiên cứu trong Appendix E cùng với nhiều vấn đề tương tự trong bộ đệm có can thiệp.
Hình 6.29 biểu diễn hoạt động của giao thức với mỗi phản hồi của bộ đệm.
Hình 6.29 Biêu đồ chuyển đôi trạng thái của các khối đệm đơn lẻ trong hệ thông nên tảng thư mục. Những yêu câu của vi xử lý lân cận thê hiện bằng màu đen và yêu cầu từ thư mục chính là mùa xám. Các trạng thái có sự tương đồng ở trường hợp có can thiệp, các giao dịch cũng giống nhau, với những yêu cầu ghi và không hiệu lực thay thế cho lỗi ghi bị lan truyền qua tuyến dữ liệu trước đây. Cũng như bộ điều khiển có can thiệp, ta giả định rằng việc có gắng ghi lên một khối đệm được chia sẻ đều xem là một lỗi; trong thực té, giao dịch như trên về cơ bản là yêu cầu quyền
sở hữu hay têu cầu cập nhật và có thể phân phối quyền sở hữu mà không đòi hỏi khối đệm đó cần được cấp phát.
Các ký hiệu được sử dụng giống ở mục trước, với màu xám là yêu cầu từ bên ngoài nút và hoạt động được mm đậm, lệnh cấp nạp đữ liệu; những điều hành này được thể hiên trong hình 6.29.
Bộ đệm đơn lẻ cũng gây ra thông điệp có lỗi đọc và ghi được gửi đến thư mục chính. Các Lỗi đọc và ghi vẫn cần phản hồi giá trị, và những trường hợp này đợi phản hồi trước khi chuyên trạng thái.
Sự điều phối của biểu đồ chuyển đối trạng thái hình 6.29 rất giống với của trường hợp có can thiệp: các trạng thái đồng nhất còn tác nhân kích thích cũng gần giống hệt nhau. Việc điều hành lỗi ghi, được lan truyền trên tuyến trong lược đô trường hợp có can thiệp, được thay thể bởi các hoạt động tìm nạp đữ liệu và không hiệu lực được gửi có chon lọc đến bộ điều khiển thư mục.
Cũng giống như giao thức can thiệp, bất kì khôi đệm nào cũng phải có trạng thái độc quyền khi nó được ghi và các khối được chia sẻ phải được cập nhật mới vào bộ nhớ.
Đối với giao thức nền tảng thư mục, phần thư mục đảm nhận thiết lập nửa còn lại của giao thức liên thông. Thông điệp gửi đến thư mục có thê dẫn đến hai loại hoạt động khác nhau: cập nhật trạng thái thư mục và gửi thông điệp bố sung đề thỏa yêu cầu. Các trạng thái trong thư mục biểu hiện ba trạng thái tiêu chuẩn của một khối: tuy không giống lược đồ can thiệp nhưng trạng thái thư mục chỉ ra trạng thái của tất cả bản sao khối bộ nhớ được lưu vào bộ đệm chứ không chỉ các khối đệm riêng lẻ. Khối bộ nhớ không được lưu vào đệm bởi bat ky nut nao, luu dém trong nhiều nút và có thê đọc (được chia sẻ) hay lưu đệm theo phương thức độc quyên và chỉ ghi trên một nút. Bên cạnh trạng thái của từng khối, thư mục cần truy ra những vi xử lý có bản sao của khối; ta sử dụng tập hợp có tên Sharers đề biểu thị chức năng này. Với bộ đa xử lý ít hơn 64 nút, tập hợp này được lưu trữ như một bĩt vector. Với những bộ đa xử lý lớn hơn, các kỹ thuật khác là cần thiết (sẽ được nói thêm ở phân bài tập). Các yêu cầu thư mục cần cập nhật tập Sharers và có thê đọc tập này dé biểu thị sự mất hiệu lực.
Hình 6.30 trình bày các hoạt động lấy từ phản hồi của thư mục với thông điệp nhận được.
Thư mục nhận được ba yêu cầu khác nhau: lỗi đọc, lỗi ghi và ghi lại dữ liệu. Thông điệp được gửi trong phản hụi của thư mục là phần ùn đậm, trong khi việc cập nhật tập Sharers được in đậm và nghiêng. Vì tất cả thông điệp kích thích là ngoại vi nên các hành động thể hiện bằng màu xám.
Giao thức đơn giản này tạo ra giả định một vải hành động là tự động, ví dụ yêu cầu gia tri va gửi
nó đến nút khác; tuy nhiên thiết lập thực tế không phù hợp với giả định nay.
Để hiểu rõ quá trinh điều phối thư mục, ta sẽ nghiên cứu những lệnh nhận được và các hoạt động diễn ra trong từng trạng thái một. Khi một khối trong trạng thái được lưu vào bộ đệm, bản sao trong bộ nhớ mang giá trị mới nhất, vậy nên các yêu cầu có thể xảy ra là:
67