Tôi đang cố gắng để có được một mô tả chính xác về hệ thống phân cấp bộ đệm dữ liệu của CPU hiện tại trên Linux: không chỉ kích thước của các bộ đệm dữ liệu L1 / L2 / L3 (và có thể là L4), mà còn là cách chúng được phân chia hoặc chia sẻ lõi.
Chẳng hạn, trên CPU của tôi (AMD Ryzen Threadripper 3970X), mỗi lõi có bộ đệm dữ liệu L1 32 KB và bộ đệm L2 512 KB, tuy nhiên bộ đệm L3 được chia sẻ trên các lõi trong một phức hợp lõi (CCX). Nói cách khác, có 8 bộ đệm L3 riêng biệt, mỗi bộ nhớ 16 MB.
Phần "Cache" trong ảnh chụp màn hình CPU-Z này trên Windows về cơ bản là những gì tôi đang cố gắng tìm hiểu:
Tôi không có vấn đề gì khi nhận những thông tin này trên Windows GetLogicalProcessorInformation()
.
Tuy nhiên, trên Linux, có vẻ như sysconf()
chỉ cung cấp cho tôi kích thước bộ đệm cho mỗi lõi cho bộ đệm dữ liệu L1 và L2 ( _SC_LEVEL1_DCACHE_SIZE
hoặc _SC_LEVEL2_DCACHE_SIZE
) hoặc tổng kích thước bộ đệm L3 ( _SC_LEVEL3_CACHE_SIZE
).
EDIT: đầu ra của lstopo trong VMWare . Máy ảo có 8 nhân. Thông tin bộ đệm L1 và L2 đều ổn nhưng kích thước bộ đệm L3 có vẻ không chính xác:
sysconf()
. Làm thế nào để hiểu ý nghĩa của chúng nếu chúng ta không biết liệu bộ nhớ cache có được chia sẻ hay không?
cpuid
trên ISA đó và thậm chí có thể nhúng một số chi tiết bố cục bộ đệm theo mô hình. IDK có bao nhiêu chi tiết các lá CPUID khác nhau như sandpile.org/x86/cpuid.htmlm#level_0000_0004h có thể đại diện.
lstopo
Linux trên kim loại trần không? (ví dụ: khởi động USB trực tiếp). Kết quả không có thật của bạn có thể là lỗi của VM vì vậy chúng tôi nên loại trừ. Không có gì ngạc nhiên khi nó hoạt động như mong đợi trên máy tính để bàn i7-6700k của tôi, hiển thị tất cả 4 lõi trong cùng một gói chia sẻ bộ đệm L3. Nhưng Intel Sandybridge-Family là dòng CPU x86 được sử dụng rộng rãi nhất và gần đây không thay đổi.
lstopo
cũng có sẵn cho Windows . lstopo
sử dụng cpuid
hướng dẫn (và có thể SRAT
bảng ACPI ). cpuid
tương đối dễ sử dụng nhưng Intel và AMD khác nhau rất nhiều về khía cạnh này. hwloc
( lstopo
thuộc về) có giao diện API mà bạn có thể sử dụng để có được cấu trúc liên kết bộ đệm cả trên Windows và Linux.