Địa chỉ trang ảo của một truy cập bộ nhớ được dùng để xác định chỉ mục trong TLB; nếu địa chỉ trang ảo đó đúng là có trong TLB tức nếu gặp một TLB hit, thì TLB sẽ nhanh chóng hồi đáp một
Trang 1BÀI TẬP LỚN KIẾN TRÚC MÁY TÍNH NÂNG CAO
Đề số 9:
High-Bandwidth Address Translation for Multiple-Issue Processors (của Todd M Austin & Gurindar S Sohi)
Học viên thực hiện: Phạm Hoàng Dũng
Mã số học viên: 09070427 Giáo viên hướng dẫn: TS Đinh Đức Anh Vũ
1 Tóm lược:
Phiên dịch địa chỉ (address translation) là một cơ cấu tối quan trọng trong các hệ thống máy
tính ngày nay Quá trình này cung cấp cho hệ điều hành những cơ cấu ánh xạ và bảo vệ cần thiết
để quản lý được nhiều không gian địa chỉ lớn và riêng tư trong chỉ một bộ nhớ vật lý có kích thước giới hạn Trong thực tế, hầu hết các bộ vi xử lý đều hiện thực một cơ cấu phiên dịch địa
chỉ độ trễ thấp bằng một bộ đệm dịch nhìn thêm (translation lookaside buffer _ TLB) TLB là một thứ cache, thường là loại kết hợp cao (highly-associative), chứa các mục dữ liệu (entry)
trong bảng trang bộ nhớ ảo mô tả địa chỉ vật lý của một trang bộ nhớ ảo và các quyền truy cập và
tình trạng tham chiếu của nó (tức là các reference bit và dirty bit) Địa chỉ trang ảo của một truy
cập bộ nhớ được dùng để xác định chỉ mục trong TLB; nếu địa chỉ trang ảo đó đúng là có trong TLB (tức nếu gặp một TLB hit), thì TLB sẽ nhanh chóng hồi đáp một kết quả phiên dịch Nếu
gặp một tham chiếu trúng TLB (TLB miss), một bộ xử lý miss bằng phần cứng hoặc phần mềm
sẽ được gọi đến để duyệt qua các bảng trang bộ nhớ ảo nhằm xác định kết quả phiên dịch nào đúng để nạp vào TLB
Mục tiêu chính của việc thiết kế TLB là giữ cho độ trễ phiên dịch địa chỉ cách xa đường tới
hạn truy cập bộ nhớ Trong quá khứ, người ta đã đạt được mục tiêu này bằng cách tạo ra các TLB
độ trễ thấp (low-latency TLB) Công việc này tương đối dễ thực hiện, bởi vì hầu hết các kiểu
TLB đều đơn cổng và nhỏ, chứa dữ liệu lần lượt trên 32 mục của nó
Để cố gắng làm tăng hiệu năng hệ thống, các kiểu thiết kế vi xử lý đời mới đang liên tục khai
thác các mức độ song song ở mức-lệnh (instruction-level parallelism _ ILP) cao hơn, khiến yêu cầu về thông lượng (bandwidth) đối với cơ cấu dịch địa chỉ (address translation mechanism) tăng
lên Bản chất của khối lượng công việc cũng đang thay đổi, có khuynh hướng sử dụng mã lệnh
có các tập dữ liệu lớn và tính lân cận (locality) thấp, làm cho tỷ lệ tham chiếu trúng TLB (TLB
hit rate) thấp (Ví dụ như trong những môi trường cho phép đa nhiệm, lập trình đa luồng và các ứng dụng đa phương tiện) Hầu hết các kiểu vi xử lý hiện nay đều đáp ứng yêu cầu này bằng một
TLB đa-cổng (multi-ported) Tuy giải pháp này có tỷ lệ tham chiếu trúng rất tốt tại mỗi cổng,
nhưng khi số cổng tăng lên thì độ trễ và diện tích của nó tăng rất nhanh Khi yêu cầu về thông
Trang 2lượng tiếp tục gia tăng, các kiểu đa-cổng sẽ nhanh chóng ảnh hưởng xấu đến độ trễ truy cập bộ nhớ Do đó, cần phải có những cơ cấu phiên dịch địa chỉ mới, tốt hơn
Các tác giả bài báo đề xuất bốn cơ cấu phiên dịch địa chỉ thông lượng cao (high-bandwidth),
có những đặc tính về độ trễ và diện tích tốt hơn so với kiểu TLB đa cổng đơn giản nói trên Họ
mở rộng các kỹ thuật thiết kế bộ nhớ thông lượng cao truyền thống dành cho phiên dịch địa chỉ,
xây dựng các kiểu TLB đan xen (interleaved) và đa mức (multi-level) Ngoài ra, họ giới thiệu hai
kiểu mới, được sáng chế đặc biệt cho phiên dịch địa chỉ thông lượng cao, đó là các kiểu TLB có
cổng ăn theo (piggyback port) và có cơ cấu phiên dịch trước (pretranslation).
Mục tiêu của các kiểu cơ cấu phiên dịch mới này là phiên dịch các truy cập bộ nhớ dữ liệu
vào các cache được lập tag vật lý (physically tagged) Còn phiên dịch lấy lệnh (instruction fetch
translation) là một vấn đề dễ dàng hơn nhiều, bởi vì cơ cấu lấy lệnh thường bị hạn chế là tất cả các lệnh được lấy trong một chu kỳ duy nhất phải ở trong cùng một trang bộ nhớ ảo, chỉ cần nhiều nhất là một cuộc phiên dịch trong mỗi chu kỳ Nó có thể được giải quyết dễ dàng bằng một
kiểu TLB lệnh đơn cổng hoặc bởi một micro-TLB nhỏ, được hiện thực trên một TLB thống nhất
dành cho dữ liệu và lệnh
Các tác giả đánh giá các kiểu thiết kế mới của mình bằng cách thực hiện những thử nghiệm bao quát dựa trên mô phỏng Họ lần lượt thay đổi các thông số chính của hệ thống, chẳng hạn
như kiểu bộ xử lý, kích thước trang, và số lượng thanh ghi kiến trúc (architected register), để
xem xét ảnh hưởng của các thay đổi này đối với phẩm chất tương đối của mỗi kiểu thiết kế đó
2 Ảnh hưởng của phiên dịch địa chỉ lên hiệu năng hệ thống
Trước hết, các tác giả xây dựng một mô hình để đo hiệu năng của phiên dịch địa chỉ một cách định tính, được dùng như một thứ khung sườn chung cho cơ cấu phiên dịch địa chỉ Họ xây dựng các cơ cấu phiên dịch địa chỉ mới dựa theo khung sườn này để dễ dàng thấy được những tính năng nào ảnh hưởng đến hiệu năng phiên dịch địa chỉ, và do đó thấy được hiệu năng phiên dịch địa chỉ ảnh hưởng như thế nào đối với hiệu năng hệ thống
Hình 1 minh họa khung sườn dành cho cơ cấu phiên dịch địa chỉ của họ Ở cấp cao nhất, một
lõi bộ xử lý (processor core) thi hành một chương trình trong đó một tỷ lệ f MEM trên toàn bộ các
lệnh là các thao tác truy cập bộ nhớ Mỗi chu kỳ, lõi bộ xử lý đó tạo ra đến M yêu cầu dịch địa chỉ Một tỷ lệ f shielded của các yêu cầu này được phục vụ bởi một cơ cấu che chắn (shielding
mechanism) Cơ cấu che chắn là một thiết bị dịch có độ trễ thấp và thông lượng cao, có thể thỏa mãn một yêu cầu phiên dịch mà không: 1) ảnh hưởng đến độ trễ của việc truy cập bộ nhớ, hoặc
2) gửi chuyển tiếp yêu cầu đó đến cơ cấu TLB nền (base TLB mechanism) Vì thế, cơ cấu che chắn này đóng vai trò như một tấm chắn (shield) cho cơ cấu TLB nền, lọc ra một phần f shielded của tất cả các yêu cầu phiên dịch Cơ cấu che chắn hiệu quả có thể làm giảm đáng kể yêu cầu về
thông lượng đối với cơ cấu TLB nền Có thể sử dụng một trong ba cơ cấu che chắn sau đây: TLB mức 1 (L1 TLB), cổng ăn theo (piggyback port), và phiên dịch trước (pretranslation).
Những yêu cầu phiên dịch nào không được xử lý bởi cơ cấu che chắn thì được chuyển đến cơ
cấu TLB nền (base TLB), vốn có thể phục vụ đến N yêu cầu mỗi chu kỳ phiên dịch Cơ cấu TLB
nền hoạt động giống hệt như một TLB truyền thống, cung cấp khả năng truy cập nhanh đến các mục trong bảng trang bằng cách dùng một cấu trúc cache độ trễ thấp Tuy nhiên, cách tổ chức được dùng trong bài báo này có thể là phi truyền thống, thí dụ như theo kiểu đan xen (interleaved), nhằm mục đích tăng thêm thông lượng Nếu có một cổng TLB nền có thể rảnh ngay thì việc phiên dịch được tiến hành ngay Nếu không có cổng nào rảnh, yêu cầu đó được xếp
Trang 3hàng cho đến khi có một cổng rảnh, khi ấy việc phiên dịch đó có thể được tiến hành Cơ cấu xếp
hàng nào được sử dụng là tùy theo mô hình bộ xử lý, ví dụ như bộ xử lý phát lệnh không đúng thứ tự (out-of-order issue processor) sẽ xếp hàng các yêu cầu phiên dịch trong một bộ đệm sắp xếp lại bộ nhớ (memory re-order buffer), trong khi bộ xử lý phát lệnh đúng thứ tự (in-order issue
processor) thì xếp hàng các yêu cầu bằng cách trì hoãn ống lệnh Các yêu cầu được xếp hàng để
đợi một cổng trong một thời gian trễ trung bình là t stalled Độ lớn của t stalled được quyết định bởi
thông lượng của cơ cấu phiên dịch địa chỉ _ với thông lượng không giới hạn thì t stalled sẽ bằng không, còn với thông lượng giới hạn thì nó có thể lớn hơn không
Hình 1: Mô hình khung của cơ cấu phiên dịch địa chỉ.
Hình 1: Mô hình khung của cơ cấu phiên dịch địa chỉ.
Thông lượng ảnh hưởng như thế nào đối với thời gian trễ do xếp hàng trong bộ xử lý là điều rất phức tạp, bởi vì nó tùy thuộc vào tần suất và độ phân tán của các yêu cầu đối với thiết bị phiên dịch Các tác giả đo đạc ảnh hưởng của nó thông qua những kiểu mô phỏng định thời được
mô tả chi tiết trong mục 4 Sau khi một yêu cầu phiên dịch được cơ cấu TLB nền phục vụ, các
yêu cầu kế tiếp sẽ trúng (hit) trong TLB với tỷ lệ (1 – M TLB) và được phục vụ với thời gian trễ
Theo mô hình phiên dịch địa chỉ này, độ trễ trung bình của một yêu cầu phiên dịch (như được
nhìn thấy bởi lõi bộ xử lý), t AT, là:
t AT = (1 - f shielded )*(t stalled + t TLBhit + M TLB * t TLBmiss)
f
MEM
f TOL
fshielded
tTLBhit,
MTLB,
TTLBmiss
Trang 4Ảnh hưởng của độ trễ của cơ cấu phiên dịch địa chỉ nhìn thấy bởi lõi bộ xử lý được giảm bớt bởi nhờ hai yếu tố: 1) khả năng chịu đựng trễ của bộ xử lý, và 2) ảnh hưởng tương đối của độ trễ truy cập bộ nhớ so với những độ trễ khác Vì thế, ảnh hưởng lên hệ thống của độ trễ phiên dịch
địa chỉ, được đo theo thời gian trung bình trên mỗi lệnh do trễ phiên dịch địa chỉ, TPI AT, là: TPIAT = fMEM * (1 – fTOL) * tAT
f TOL là tỷ lệ độ trễ phiên dịch địa chỉ mà lõi bộ xử lý chịu đựng được Khối lượng công việc và
mô hình bộ xử lý đều ảnh hưởng đến mức độ chịu đựng được trễ của lõi bộ xử lý Nếu khối lượng công việc tỏ ra có đủ mức độ song song và mô hình thi hành có khả năng chịu đựng trễ, thì ảnh hưởng của của độ trễ phiên dịch địa chỉ trên hiệu năng tổng thể sẽ giảm thiểu Các mô hình
bộ xử lý có khả năng chịu đựng độ trễ cao bao gồm những mô hình cho phép phát lệnh không đúng thứ tự (out-of-order issue), truy cập bộ nhớ không phân khối (no-blocking memory access),
và thi hành phỏng đoán (speculative execution).
Cuối cùng, f MEM là tỷ lệ động của tất cả các lệnh mà truy cập bộ nhớ Tỷ lệ này bị ảnh hưởng bởi khối lượng công việc, số lượng thanh ghi kiến trúc, và khả năng sử dụng các thanh ghi một cách hiệu quả của trình biên dịch Những chương trình mà truy cập bộ nhớ thường xuyên cần có hiệu năng phiên dịch địa chỉ tốt hơn thì mới đạt được hiệu năng hệ thống tốt
Tóm lại, hiệu năng của cơ cấu phiên dịch địa chỉ bị ảnh hưởng: 1) bởi khả năng nó che chắn các yêu cầu truy cập tới cơ cấu phiên dịch nền, và 2) bởi độ trễ và thông lượng của thiết bị phiên dịch nền Tuy nhiên, tác động đối với hệ thống của hiệu năng phiên dịch địa chỉ phụ thuộc vào việc truy cập bộ nhớ của một chương trình và khả năng chịu đựng trễ của bộ xử lý
3 Các cơ cấu phiên dịch địa chỉ thông lượng cao được tác giả đề xuất
Các cơ cấu được các tác giả đề xuất rơi vào hai nhóm: 1) các kiểu mà mở rộng kiểu bộ nhớ thông lượng cao truyền thống sang lĩnh vực phiên dịch địa chỉ, và 2) các kiểu được chế tạo đặc biệt cho phiên dịch địa chỉ thông lượng cao
Trước đó, người ta đã tìm ra nhiều kỹ thuật để cung cấp khả năng truy cập bộ nhớ thông lượng cao, cả trong các tài liệu lẫn trong thực tiễn Những cách tiếp cận phổ biến là các cấu trúc
bộ nhớ đa cổng (multi-ported) [SF91], đan xen (interleaved) [Rau91], và đa mức (multi-level)
[JW94] Các tác giả mở rộng những cách tiếp cận này sang lĩnh vực phiên dịch địa chỉ
Hình 2: Các kiểu bộ nhớ đệm thông lượng cao truyền thống: a) đa cổng, b) đan xen, c) đa mức.
Trang 5Các tác giả đề xuất hai kỹ thuật mới: cổng ăn theo (piggyback port) và phiên dịch trước
(pretranslation) Cổng ăn theo là một kỹ thuật để khai thác mức độ lân cận về không gian cao trong các yêu cầu phiên dịch đồng thời Cách này cho phép thực hiện những truy cập đồng thời vào cùng một trang bộ nhớ ảo để kết hợp các yêu cầu của chúng tại cổng truy cập TLB Phiên dịch trước là một kỹ thuật để liên kết các kết quả phiên dịch với các giá trị thanh ghi nền, khiến
có thể sử dụng lại nhiều lần một kết quả phiên dịch nào đó
Tất cả các cơ cấu phiên dịch địa chỉ thông lượng cao mà các tác giả đề xuất đều nhằm dành cho những hệ thống sử dụng các cache được lập tag vật lý, tức những hệ thống đòi hỏi phải có một sự phiên dịch cho mỗi thao tác truy cập bộ nhớ Các cache địa chỉ ảo thì không đòi hỏi phải
có một sự phiên dịch cho mỗi thao tác truy cập bộ nhớ; việc phiên dịch địa chỉ không được thực hiện cho tới khi dữ liệu được lấy về từ thiết bị lưu trữ vật lý, chẳng hạn như khi truy cập một cache mức hai được đánh địa chỉ vật lý hoặc bộ nhớ chính Như vậy cache địa chỉ ảo loại trừ những mối bận tâm cả về thông lượng lẫn về độ trễ, tuy nhiên có hai nhược điểm đáng kể khiến
nó không được sử dụng trong các hệ thống trong đời thực: 1) có các địa chỉ đồng nghĩa
(synonym), và 2) thiếu khả năng hậu thuẫn bảo vệ Hơn nữa, cho dù các cache địa chỉ ảo được chấp nhận đi nữa, nhiều khả năng người ta vẫn sử dụng những cấu trúc kiểu TLB để hiện thực cơ cấu bảo vệ, vốn đòi hỏi một thiết bị thông lượng cao giống như những cơ cấu các tác giả đã mô
tả ở đây Do đó, các tác giả chỉ tập trung nghiên cứu các kiểu phiên dịch địa chỉ dành cho các cache được lập tag vật lý
3.1 TLB đa cổng
TLB đa cổng, được minh họa trong Hình 2a, dùng một cách tiếp cận cục súc thô bạo (brute
force) để có được thông lượng cao Mỗi cổng của nó được trang bị đường truy cập dữ liệu riêng đến mỗi mục trong TLB, điều này được hiện thực bằng cách hoặc sao chép toàn bộ cấu trúc TLB (tức dùng một TLB đơn cổng cho mỗi cổng của nó), hoặc dùng nhiều cổng cho mỗi ngăn chứa của TLB Bởi vì mọi mục của TLB này có thể truy cập được từ mỗi cổng của thiết bị, nên kiểu
này cung cấp một hit rate tốt cho mỗi cổng (M TLB thấp) Tuy nhiên, tải trọng dung kháng và trở kháng trên mỗi đường truy cập gia tăng theo số lượng cổng trên thiết bị [WE88], dẫn đến độ trễ truy cập (tTLBhit) dài hơn khi số lượng cổng hoặc mục của TLB tăng lên Ngoài ra, kiểu này chịu một phí tổn là diện tích lớn do cần có thêm nhiều dây dẫn và bộ so sánh để hiện thực mỗi cổng (Trong công nghệ CMOS, diện tích của một thiết bị đa cổng tỷ lệ thuận với bình phương số cổng [Jol91])
Tuy có những nhược điểm về độ trễ truy cập và diện tích hiện thực như vậy, nhưng kiểu này cung cấp thông lượng và hit rate tốt nhất trong tất cả các kiểu, vì vậy, nó là một thứ chuẩn mực tiện lợi để đo hiệu năng của những kiểu khác mà các tác giả đề xuất
3.2 TLB đan xen
TLB đan xen, được minh họa trong Hình 2b, sử dụng một mạch nối (interconnect) để phân phối dòng địa chỉ cho nhiều dải TLB (TLB bank) TLB Mỗi dải TLB có thể phục vụ một cách
độc lập một yêu cầu trên mỗi chu kỳ phiên dịch Kiểu này cung cấp khả năng truy cập thông lượng cao miễn sao những truy cập đồng thời ánh xạ đến những dải khác nhau
Cách ánh xạ giữa các địa chỉ trang ảo và các dải TLB được qui định bởi hàm chọn dải (bank
selection function) Hàm này ảnh hưởng tới sự phân bố các truy cập vào các dải, và vì thế, ảnh hưởng đến thông lượng được phân phối bởi thiết bị này Trong những đánh giá của các tác giả,
họ xem xét cả cách chọn bit (bit selection), vốn sử dụng một phần của địa chỉ trang ảo để chọn
Trang 6lựa dải, lẫn cách gấp XOR (XOR-folding), vốn ngẫu nhiên hóa việc phân phối dải bằng cách
XOR với nhau các phần của địa chỉ trang ảo
Do cấu trúc của nó, một TLB đan xen có thể không kết hợp đầy đủ (fully-associative), bởi vì
bất kỳ trang cụ thể nào cũng chỉ có thể nằm trên một dải thôi Mức độ kết hợp của nó phải bị giới
hạn bởi mức độ kết hợp của từng dải riêng lẻ Do đó, M TLB của kiểu này có thể cao hơn M TLB của kiểu khác cùng kích thước nhưng tổ chức có tính kết hợp hơn, điều này có thể dẫn tới độ trễ phiên dịch trung bình dài hơn Tuy nhiên, tác hại này có thể tối thiểu nếu TLB đan xen giữ được tính kết hợp cao
Kiểu này nhiều khả năng sẽ có các đặc điểm về độ trễ và diện tích tốt hơn kiểu TLB đa cổng,
đặc biệt là đối với những TLB lớn Tuy mạch nối, thông thường là một full crossbar (một mạng lưới các đường dẫn nối với toàn bộ các dải), làm phát sinh thêm một thời gian trễ nào đó cho
đường truy cập, nhưng độ trễ này được giảm thiểu nhờ độ trễ truy cập ngắn hơn của các dải TLB đơn cổng, nhỏ hơn của nó (so với TLB đa cổng) Phí tổn về diện tích được tập trung trong mạch nối; đối với một full crossbar thì diện tích hiện thực tỷ lệ thuận với bình phương số cổng truy cập Đối với những lượng cổng nhỏ hơn, kích thước có lẽ không đến nỗi quá lớn
3.3 TLB đa mức
TLB đa mức, được minh họa trong Hình 2c, cung cấp khả năng phiên dịch độ trễ thấp và thông lượng cao bằng cách khai thác tính lân cận trong các tham chiếu chương trình Khi một mục của cơ cấu TLB nền (L2 TLB) được tham chiếu, mục đó được đặt vào trong một TLB nhỏ cấp cao hơn (L1 TLB) Mỗi L1 TLB đóng vai trò như một cơ cấu che chắn; nếu nó cung cấp một hit rate tốt, nó sẽ che chắn cho L2 TLB khỏi tất cả các truy cập mà hit trong L1 TLB, làm giảm đáng kể yêu cầu về thông lượng trên L2 TLB
Khi một truy cập miss trong L1 TLB, nó phải gửi chuyển tiếp yêu cầu đó đến L2 TLB, nơi mà
sự tranh giành cổng truy cập L2 TLB, độ trễ truy cập L2 TLB, và độ trễ do miss L2 TLB có thể làm tăng độ trễ tổng thể của truy cập đó Do bởi L1 TLB nhỏ thôi, nên có thể dùng một chính sách thay thế hiệu quả hơn (ví dụ như thay thế LRU trong L1 TLB thay vì thay thế tùy ý _ random replacement _ trong L2 TLB), vốn sẽ cải thiện hit rate của L1 TLB
L1 TLB là một TLB đa cổng có vừa đủ cổng để xử lý tất cả những yêu cầu đồng thời từ lõi bộ
xử lý Bằng cách giữ cho L1 TLB nhỏ, có thể cung cấp được khả năng truy cập vừa thông lượng cao vừa độ trễ thấp vào tất cả các mục của nó Phí tổn phải chịu thêm về diện tích của kiểu này được tập trung trong việc hiện thực L1 TLB, vốn nhỏ hơn nhiều so với L2 TLB nếu kích thước nhỏ và ít cổng
3.4 Các cổng ăn theo (piggyback port)
Các cổng ăn theo, được minh họa trong Hình 3a, khai thác tính lân cận về không gian trong những yêu cầu phiên dịch địa chỉ đồng thời Khi các yêu cầu đồng thời đến tại một cổng TLB, những yêu cầu nào có các địa chỉ trang ảo giống nhau có thể được thỏa mãn bởi cùng một thao tác truy cập TLB
Để hiện thực việc ăn theo, các địa chỉ trang ảo của những yêu cầu phiên dịch bị ách lại được
so sánh với địa chỉ trang ảo của của những yêu cầu phiên dịch đang được thi hành Một yêu cầu
bị ách lại có thể dùng kết quả của một phiên dịch đang được thi hành nếu các địa chỉ trang ảo của chúng trùng nhau Đối với một cổng đơn, tín hiệu phát hiện hit từ cổng TLB có thể được AND với kết quả của việc so sánh địa chỉ trang ảo này Giả sử cả hai yêu cầu phiên dịch đang được thi
Trang 7hành trong cùng một vùng bảo vệ, thì những trường khác của yêu cầu phiên dịch, tức trường thông tin bảo vệ và trường tình trạng trang, cũng có thể được gửi chuyển tiếp đến những yêu cầu phiên dịch nào có các địa chỉ trang ảo trùng khớp
Hình 3: Các kiểu được chế tạo riêng cho phiên dịch địa chỉ thông lượng cao: a) cổng ăn theo, và
b) phiên dịch trước
Các cổng ăn theo có tác hại tối thiểu đối với độ trễ phiên dịch Sau khi một yêu cầu phiên dịch được gửi đến TLB, tất cả những yêu cầu khác có thể so sánh các địa chỉ ảo song song (cùng một lúc) với việc truy cập TLB của yêu cầu đó Kết quả là, tác hại của độ trễ phiên dịch chỉ giới hạn
ở mức độ trễ của việc AND với tín hiệu TLB hit mà thôi Phí tổn cho diện tích cũng rất nhỏ, được giới hạn ở mức diện tích của chỉ một bộ so sánh và một cổng AND tín hiệu hit trên mỗi cổng ăn theo mà thôi
3.5 Phiên dịch trước (pretranslation)
Phiên dịch trước là cơ cấu che chắn mà cho phép một yêu cầu phiên dịch duy nhất được sử dụng cho nhiều truy cập bộ nhớ Hình 4 minh họa lý thuyết nền tảng cho cách tiếp cận này Các thao tác load và store truy cập bộ nhớ thông qua các con trỏ thanh ghi: các truy cập global thông qua con trỏ global [CCH+87], các truy cập stack thông qua con trỏ stack, còn tất cả những tham chiếu khác thì thông qua các con trỏ thanh ghi phổ dụng Các con trỏ này được tạo ra mỗi khi một biến được tham chiếu, khi địa chỉ của nó được đọc lấy, hoặc khi bộ nhớ động được cấp phát
Trong chu kỳ sống của một con trỏ, nó được giải tham chiếu (dereference) ở các thao tác load và store, và được tác động vào (manipulate) bằng những phép toán số học trên số nguyên Trải qua
suốt chu kỳ sống của con trỏ đó, nó có thể được giải tham chiếu và tác động nhiều lần
Trong những cơ cấu phiên dịch địa chỉ dựa trên TLB truyền thống, một yêu cầu phiên dịch địa chỉ được đưa tới TLB mỗi lần một con trỏ được giải tham chiếu, và những yêu cầu sau đó nhiều khi cũng yêu cầu cũng một sự phiên dịch như vậy Với giải pháp phiên dịch trước, các tác giả liên kết một kết quả phiên dịch với một giá trị thanh ghi vào lần giải tham chiếu đầu tiên của giá trị đó, tức là vào thao tác load hoặc store đầu tiên sử dụng thanh ghi đó như một giá trị thanh ghi nền Vào những lần tham chiếu sau này, các thao tác load và store có thể dùng kết quả phiên dịch trước được liên kết với giá trị thanh ghi đó miễn sao địa chỉ trang ảo của sự truy cập bộ nhớ ấy
Trang 8trùng khớp với địa chỉ trang ảo của kết quả phiên dịch được liên kết này Khi các con trỏ được tác động bằng các phép toán số học, mọi kết quả phiên dịch được liên kết đều được truyền đến giá trị thanh ghi đích Cơ chế dịch trước cung cấp thông lượng cao chừng nào các con trỏ thanh ghi còn được sử dụng lại thường xuyên và trỏ tới cùng một trang bộ nhớ ảo Vì vậy, một yêu cầu phiên dịch duy nhất từ cơ cấu TLB nền có thể được sử dụng nhiều lần
Hình 4: Vòng đời của một con trỏ (thanh ghi) Hình a) cho thấy một đoạn mã lệnh C trong đó
con trỏ p đi dần từng bước qua một array Hình b) minh họa những thao tác mà xảy ra trong suốt
thời gian sống của con trỏ p
Trong Hình 3b, kiểu phiên dịch trước của các tác giả được tích hợp vào một ống lệnh của vi
xử lý Các kết quả phiên dịch trước được truy cập song song với truy cập vào tập thanh ghi trong giai đoạn giải mã của ổng lệnh, khiến cho kết quả phiên dịch trước có sẵn trước khi bắt đầu thi hành lệnh Nếu lệnh được thi hành là một thao tác số học, kết quả phiên dịch trước ấy sẽ được liên kết vào giá trị của thanh ghi kết quả Đối với các thao tác load và store, kết quả phiên dịch trước, nếu có, được dùng để lược bỏ đi truy cập TLB nếu các địa chỉ trang ảo trùng khớp Nếu các địa chỉ trang ảo không trùng khớp, một yêu cầu phiên dịch sẽ được gửi chuyển tiếp đến cơ cấu phiên dịch nền Kết quả của việc phiên dịch này được liên kết vào giá trị của thanh ghi nền
Có hai điều cần cân nhắc ảnh hưởng đến kiểu của cơ cấu được dùng để liên kết các kết quả phiên dịch trước với các giá trị thanh ghi Thứ nhất, một giá trị con trỏ duy nhất có thể tham chiếu nhiều trang Một cơ chế thích hợp để liên kết nhiều kết quả phiên dịch vào một thanh ghi duy nhất có thể làm cải thiện hiệu năng, chẳng hạn như một vài bit từ độ lệch có thể được kết hợp với mã nhận diện thanh ghi nền để tạo thành một mã nhận diện của một kết quả phiên dịch trước Thứ hai, vào một thời điểm bất kỳ, chỉ một số thanh ghi chứa giá trị con trỏ thôi, vì vậy thus, không cần phải cấp phát dung lượng nhớ cho mọi thanh ghi Chỉ cần dùng một cache nhỏ
(mà các tác giả gọi là cache phiên dịch trước _ pretranslation cache) là đủ để chứa các kết quả
phiên dịch trước rồi Nếu cache này được giữ sao cho nhỏ thôi, nó sẽ tạo điều kiện để truy cập thông lượng cao và độ trễ thấp vào các kết quả phiên dịch trước
Mọi thay đổi trong trạng thái bộ nhớ ảo, chẳng hạn như cách ánh xạ địa chỉ, kích thước trang, hoặc quyền truy cập, phải được phản ánh trong cache phiên dịch trước này, nếu không thì sẽ không phát hiện được những truy cập không đúng Nếu những thay đổi trạng thái của bộ nhớ ảo
là không thường xuyên, có thể chỉ việc xóa sạch (flush) cache phiên dịch trước mỗi khi có thay
đổi xảy ra là xong
Cơ cấu phiên dịch trước có thể được xem như một sự mở rộng của cache địa chỉ rẽ nhánh
(branch address cache _ BAC) của Chiueh và Katz [CK92], vốn đã được áp dụng như một cơ chế
Trang 9để làm giảm độ trễ truy cập của các cache lập chỉ mục vật lý Kiểu phiên dịch trước của các tác giả mở rộng kỹ thuật BAC để cung cấp khả năng phiên dịch thông lượng cao Bằng cách liên kết địa chỉ trang ảo vào một giá trị thanh ghi, không cần phải truy cập cơ cấu TLB nền để xác nhận tính đúng đắn của việc sử dụng một địa chỉ trang vật lý đã được liên kết nào đó Giống như BAC, kiểu phiên dịch trước mà các tác giả đề xuất cung cấp địa chỉ trang vật lý vào cuối giai đoạn giải mã lệnh Vì vậy, nó có thể được dùng để truy cập một cache được lập chỉ mục vật lý
mà không làm tăng độ trễ phiên dịch địa chỉ
Kiểu phiên dịch trước mà các tác giả đề xuất đưa hai sự sửa đổi vào cơ cấu BAC nguyên thủy Thứ nhất, kiểu phiên dịch trước của họ theo dõi những lệnh mà tạo ra những giá trị con trỏ, và truyền kết quả dịch trước của một toán hạng bất kỳ đến thanh ghi kết quả Biện pháp tối ưu hóa này là cần thiết để có được hiệu năng tốt đối với mã lệnh đã được tối ưu hóa mà những thao tác
sao chép thanh ghi thường xảy ra, ví dụ như trong khi lập lịch biểu cho lệnh hoặc trải vòng lặp
(loop unrolling) Thứ hai, họ sử dụng một bộ cache nhỏ để lưu trữ những kết quả phiên dịch trước thay vì dùng BAC lớn hơn Bởi vì vào một thời điểm bất kỳ, chỉ một phần của tất cả thanh ghi chứa các giá trị con trỏ thôi, nên cache phiên dịch trước nhỏ nhắn của họ cung cấp một hit rate rất tốt
4 Đánh giá bằng thực nghiệm
Các tác giả đánh giá những phẩm chất tương đối của các kiểu phiên dịch địa chỉ thông lượng cao của mình bằng cách mở rộng một mô hình mô phỏng định thời chi tiết để hậu thuẫn những
cơ cấu phiên dịch được đề xuất và bằng cách xem xét hiệu năng của những chương trình chạy trên mô hình mô phỏng mở rộng đó Họ đã thay đổi kích thước trang, kiểu phát lệnh của bộ xử
lý, và số thanh ghi kiến trúc để xem ảnh hưởng mà các thông số hệ thống này có trên các cơ cấu phiên dịch đó là gì Tất cả các kết quả được trình bày trong mục này đều là những giá trị trung
bình được đo theo thời gian chạy trên tất cả các trình đo kiểm (benchmark).
4.1 Phương pháp đánh giá
Mô hình mô phỏng cơ bản (baseline simulator) của các tác giả chỉ thi hành những lệnh ở cấp
người dùng, hiện thực một sự mô phỏng định thời chi tiết của một bộ vi xử lý superscalar 8-đường và cấp đầu tiên của bộ nhớ cache dữ liệu và lệnh Mô hình mô phỏng này hậu thuẫn cả hai
mô hình thi hành phát lệnh đúng thứ tự và không đúng thứ tự Việc mô phỏng được điều khiển
thông qua thi hành, kể cả việc thi hành mọi lộ trình phỏng đoán (speculative path) cho tới khi
phát hiện một page fault, TLB miss, hoặc tiên đoán sai Mô hình phát lệnh đúng thứ tự không
cung cấp cơ chế đổi tên (renaming) và trì hoãn (stall) nào mỗi khi có bất kỳ rủi ro dữ liệu (data
hazard) nào xảy ra trên các thanh ghi Mô hình không đúng thứ tự thì sử dụng một bộ nhớ đệm
sắp thứ tự lại (re-order) 64 mục vốn hiện thực các thanh ghi đổi tên và trữ kết quả của những
lệnh đã thi hành xong nhưng đang chờ các lệnh khác được thi hành (để sắp lại đúng thứ tự) Các thao tác load và store được đặt vào trong một hàng đợi load/store 32 mục Các thao tác store được thi hành khi tất cả các toán hạng đã sẵn sàng; các giá trị của chúng, nếu là phỏng đoán, sẽ được đặt vào trong hàng đợi load/store ấy Các thao tác load thì có thể thi hành khi tất cả những địa chỉ store trước đó đã được tính xong; các giá trị của chúng đến từ một thao tác store trùng khớp trước đó trong hàng đợi store hoặc từ cache dữ liệu Các thao tác load phỏng đoán có thể làm phát sinh các cache miss nếu địa chỉ của chúng hit trong TLB Nếu thao tác load ấy sau đó bị bác đi, thì cache miss vẫn được hoàn tất Tuy nhiên, những TLB miss phỏng đoán thì không được phép Tức là, nếu một truy cập cache phỏng đoán bị miss trong TLB, việc phát lệnh sẽ bị
đình lại cho tới khi lệnh mà đã phát hiện TLB miss đó bị bác đi hoặc được commit Mỗi chu kỳ,
Trang 10bộ nhớ đệm re-order này commit đến 8 kết quả có thứ tự vào các thanh ghi kiến trúc Khi các thao tác store được commit, giá trị store được ghi vào cache dữ liệu Cache dữ liệu được mô hình
hóa ở đây là một cache không chia khối (non-blocking) kiểu two-way set-associative bốn cổng
dung lượng 32k
Các tác giả đã thực hiện một số thay đổi cho mô hình mô phỏng này để hậu thuẫn các cơ cấu phiên dịch địa chỉ thông lượng cao của mình Các kiểu mà họ khảo sát, với những cái tên gợi nhớ của chúng, được liệt kê trong Bảng 1
Bảng 1: Các ki u phiên d ch a ch ểu phiên dịch địa chỉ được phân tích ịch địa chỉ được phân tích địch địa chỉ được phân tích ỉ được phân tích được phân tích c phân tích.
Tên gợi nhớ Mô tả
T4 TLB 4-cổng, 128 mục, fully-associative, thay thế tùy ý
T2 TLB 2-cổng, 128 mục, fully-associative, thay thế tùy ý
T1 TLB 1-cổng, 128 mục, fully-associative, thay thế tùy ý
I8 TLB 8-way chọn bit đan xen, 128 mục (mỗi dải 16 mục fully-associative),
thay thế tùy ý trong dải I4 TLB 4-way chọn bit đan xen, 128 mục (mỗi dải 32 mục fully-associative),
thay thế tùy ý trong dải X4 TLB 4-way chọn-XOR đan xen, 128 mục (mỗi dãy 32 mục fully-associative),
thay thế tùy ý trong dải M16 L1 TLB 4-cổng 16-mục thay thế kiểu LRU, L2 TLB 128-mục,
fully-associative, thay thế tùy ý M8 L1 TLB 4-cổng 8-mục thay thế kiểu LRU, L2 TLB 128-mục,
fully-associative, thay thế tùy ý M4 L1 TLB 4-cổng 4-mục thay thế kiểu LRU, L2 TLB 128-mục,
fully-associative, thay thế tùy ý P8 Cache phiên dịch trước 4-cổng 8-mục thay thế kiểu LRU, L2 TLB 128-mục,
fully-associative, thay thế tùy ý PB2 TLB 2-cổng với 2 cổng piggyback, 128 mục, fully-associative, thay thế tùy ý PB1 TLB 1-cổng với 3 cổng piggyback, 128 mục, fully-associative, thay thế tùy ý I4/PB TLB 4-way chọn bit đan xen với các dải piggyback, 128 mục (32 mục/dải),
thay thế tùy ý trong dải
4.2 Các chương trình được phân tích
Khi chọn lựa các tiêu chuẩn để đánh giá, các tác giả tìm kiếm những chương trình có hiệu năng hệ thống bộ nhớ hay thay đổi, tức các chương trình có những bộ dữ liệu lớn và nhỏ cũng
như có tính lân cận tham chiếu cao và thấp Các chương trình Compress, Doduc, Espresso, Tomcatv, và Xlisp được lấy từ bộ phần mềm đo kiểm SPEC’92 Ghostscript là chương trình xem
postscript, chuyển một trang có văn bản và hình ảnh đồ họa thành một file đồ họa theo dạng thức
PPM MPEG_play là bộ giải mã video MPEG hiển thị một file video nén 79 khung hình Perl là