Như vậy đến nay trong phạm vi của chúng ta về bộ nhớ ảo, chúng ta đã giả định rằng tất cả các chính
bộ nhớ được tạo ra bằng nhau, hoặc ít nhất là nó được truy cập như nhau. Trên nhiều
hệ thống máy tính, đó không phải là trường hợp. Thông thường, trong các hệ thống với nhiều CPU
(Mục 1.3.2), một CPU nhất định có thể truy cập vào một số phần của bộ nhớ chính nhanh
hơn nó có thể truy cập vào những người khác. Những sự khác biệt hiệu suất là do cách
CPU và bộ nhớ được kết nối với nhau trong hệ thống. Thông thường, một hệ thống như vậy
được tạo thành từ nhiều bảng hệ thống, từng có nhiều CPU và một số
bộ nhớ. Ban hệ thống được kết nối với nhau theo những cách khác nhau, từ
xe buýt hệ thống để kết nối mạng tốc độ cao như InfiniBand. Như bạn có thể
mong đợi, các CPU trên một bảng cụ thể có thể truy cập vào bộ nhớ trên bo mạch với
độ trễ ít hơn họ có thể truy cập vào bộ nhớ trên các bảng khác trong hệ thống. Hệ thống
, trong đó thời gian truy cập bộ nhớ thay đổi đáng kể được gọi chung là
hệ thống không truy cập bộ nhớ (NUMA), và không có ngoại lệ, họ
là chậm hơn so với các hệ thống trong đó bộ nhớ và CPU được đặt trên cùng một
bo mạch chủ.
Giám mà khung trang được lưu trữ tại những vị trí có thể đáng kể
ảnh hưởng đến hiệu suất trong hệ thống NUMA. Nếu chúng tôi xử lý bộ nhớ như thống nhất trong đó
một hệ thống, CPU có thể chờ đợi lâu hơn đáng kể cho việc truy cập bộ nhớ hơn nếu chúng ta
sửa đổi các thuật toán cấp phát bộ nhớ để có Numa vào tài khoản. Tương tự như
thay đổi phải được thực hiện cho các hệ thống lập kế hoạch. Mục đích của những thay đổi này là
để có khung hình cấp phát bộ nhớ "càng gần càng tốt" cho CPU mà
tiến trình đang chạy. Định nghĩa về "đóng" là "với độ trễ tối thiểu",
trong đó thường có nghĩa là trên bảng hệ thống như CPU.
Những thay đổi thuật toán bao gồm việc lên lịch theo dõi CPU cuối cùng
mà mỗi quá trình chạy. Nếu lịch trình cố gắng để sắp xếp mỗi quá trình lên
CPU trước đây của nó, và các hệ thống quản lý bộ nhớ cố gắng bố trí khung
cho quá trình gần với CPU mà nó đang được lên kế hoạch, sau đó cải tiến
hits bộ nhớ cache và giảm thời gian truy cập bộ nhớ sẽ cho kết quả.
Các hình ảnh phức tạp hơn một lần đề được thêm vào. Ví dụ, một
quá trình với nhiều chủ đề hoạt động có thể kết thúc với những chủ đề dự kiến
trên nhiều bảng hệ thống khác nhau. Làm thế nào là bộ nhớ được phân bổ trong này
trường hợp? Solaris giải quyết vấn đề bằng cách tạo ra lgroups (cho "nhóm độ trễ") trong
hạt nhân. Mỗi lgroup tập hợp lại với nhau CPU gần và trí nhớ. Trong thực tế, có
một hệ thống phân cấp của lgroups dựa vào lượng thời gian trễ giữa các nhóm.
Solaris cố gắng để sắp xếp tất cả các chủ đề của một quá trình và phân bổ tất cả bộ nhớ của một
quá trình trong vòng một lgroup. Nếu điều đó là không thể, nó chọn lgroups gần đó cho
phần còn lại của các nguồn lực cần thiết. Điều này thực tế giảm thiểu độ trễ bộ nhớ tổng thể
và tối đa hóa CPU giá cache hit.
đang được dịch, vui lòng đợi..