Sự khác biệt lớn nhất trong hoạt động sẽ đến khi bạn đang làm truy cập ngẫu nhiên cách nhau đều đặn đến một vùng rộng lớn của bộ nhớ - nơi "lớn" có nghĩa là lớn hơn nhiều so với phạm vi đó có thể được ánh xạ bởi tất cả các mục trang nhỏ ở TLBs (thường có nhiều cấp độ trong các bộ vi xử lý hiện đại).
Để làm cho mọi thứ trở nên phức tạp hơn, số lượng mục TLB cho trang 4kB thường lớn hơn số lượng mục nhập cho trang 2MB, nhưng điều này thay đổi rất nhiều theo bộ xử lý. Ngoài ra còn có rất nhiều biến thể trong số lượng mục "trang lớn" có sẵn trong TLB Cấp 2.
Ví dụ, trên một bộ xử lý AMD Opteron Family 10h Revision D ("Istanbul") hệ thống, báo cáo CPUID:
- L1 DTLB: trang 4KB: 48 mục; 2MB trang: 48 mục; 1GB trang: 48 mục nhập
- L2 TLB: 4kB trang: 512 mục nhập; 2MB trang: 128 mục; trang 1GB: 16 mục
Trong khi trên một hệ thống Intel Xeon 56xx ("Westmere"), báo cáo CPUID:
- L1 DTLB: trang 4KB: 64 mục; 2MB trang: 32 mục nhập
- L2 TLB: 4kB trang: 512 mục nhập; 2MB trang: không có
Cả hai có thể lập bản đồ 2MB (512 * 4kB) sử dụng các trang nhỏ trước khi bị 2 cấp TLB, trong khi hệ thống Westmere có thể ánh xạ 64MB sử dụng 32 mục TLB 2MB và hệ thống AMD có thể ánh xạ 352MB các mục TLB 176 2MB trong TL1 L1 và L2 của nó. Một trong hai hệ thống sẽ nhận được một tốc độ đáng kể bằng cách sử dụng các trang lớn để truy cập ngẫu nhiên trên phạm vi bộ nhớ lớn hơn 2MB và nhỏ hơn 64MB. Hệ thống AMD sẽ tiếp tục cho thấy hiệu suất tốt bằng cách sử dụng các trang lớn cho phạm vi bộ nhớ lớn hơn nhiều.
Những gì bạn đang cố gắng tránh trong tất cả các trường hợp này là trường hợp xấu nhất (lưu ý 1) kịch bản đi qua tất cả bốn cấp độ của bản dịch địa chỉ phân cấp x86_64.
Nếu không có cơ chế dịch địa chỉ bộ nhớ đệm (lưu ý 2) làm việc, nó đòi hỏi:
- 5 chuyến đi đến bộ nhớ để tải dữ liệu ánh xạ trên một trang 4KB,
- 4 chuyến đi đến bộ nhớ để tải dữ liệu ánh xạ trên trang 2MB và
- 3 chuyến đi vào bộ nhớ để tải dữ liệu được ánh xạ trên trang 1GB.
Trong mỗi trường hợp chuyến đi cuối cùng vào bộ nhớ là lấy dữ liệu được yêu cầu, trong khi các chuyến đi khác được yêu cầu để có được các phần khác nhau của thông tin dịch trang. Mô tả tốt nhất mà tôi đã thấy là tại mục 5.3 của AMD "AMD64 Kiến trúc Programmer của tay Tập 2: Lập trình hệ thống" (xuất bản 24593) http://support.amd.com/us/Embedded_TechDocs/24593.pdf
Lưu ý 1: Những con số trên là không thực sự là trường hợp tồi tệ nhất. Chạy dưới một máy ảo làm cho những con số này tồi tệ hơn. Chạy trong môi trường khiến bộ nhớ giữ các cấp độ khác nhau của các bảng trang bị hoán đổi vào đĩa khiến hiệu suất nhiều hơn tệ hơn.
Lưu ý 2: Thật không may, ngay cả khi biết mức độ chi tiết này là không đủ, bởi vì tất cả các bộ vi xử lý hiện đại đều có bộ đệm bổ sung cho các cấp trên của phân cấp dịch trang. Theo như tôi có thể nói, những tài liệu này được công bố rất kém.
Phần cứng nạp trước sẽ không vượt qua ranh giới 4k trang, nhưng những gì bạn đang có thể nhìn thấy trong trường hợp đường thẳng là truy cập bảng trang là rất có thể dự đoán, vì vậy trang đi bộ xảy ra khi bạn bỏ lỡ trong TLB có khả năng chạm trang mà là tất cả trong L1 (các mục trang này thực sự có thể đã được đưa vào thông qua tìm nạp trước). – BeeOnRope