Hoàn toàn có thể hiểu và tối ưu hóa cho bộ nhớ cache. Nó bắt đầu với sự hiểu biết về phần cứng và tiếp tục với việc kiểm soát hệ thống. Bạn càng ít kiểm soát hệ thống, bạn càng ít có khả năng thành công. Linux hoặc Windows chạy một loạt các ứng dụng / luồng không chạy.
Hầu hết các bộ nhớ cache có phần giống nhau trong các thuộc tính của chúng, sử dụng một phần của trường địa chỉ để tìm kiếm các lần truy cập, có độ sâu (cách) và chiều rộng (dòng bộ đệm). Một số có bộ đệm ghi, một số có thể được cấu hình để ghi qua hoặc bỏ qua bộ đệm khi ghi, v.v.
Bạn cần nhận thức sâu sắc về tất cả các giao dịch bộ nhớ đang diễn ra đang lưu vào bộ đệm đó (một số hệ thống có hướng dẫn độc lập và bộ đệm dữ liệu giúp cho công việc dễ dàng hơn).
Bạn có thể dễ dàng tạo bộ đệm vô dụng bằng cách không quản lý cẩn thận bộ nhớ của mình. Ví dụ: nếu bạn có nhiều khối dữ liệu bạn đang xử lý, hy vọng giữ chúng trong bộ nhớ cache, nhưng chúng có trong bộ nhớ tại các địa chỉ thậm chí là bội số so với kiểm tra lần truy cập / lỗi của bộ nhớ cache, giả sử 0x10000 0x20000 0x30000 và bạn có nhiều hơn những cách này trong bộ đệm, bạn có thể sẽ nhanh chóng tạo ra thứ gì đó chạy khá chậm khi bật bộ đệm, chậm hơn so với khi tắt bộ đệm. Nhưng thay đổi điều đó thành có lẽ 0x10000, 0x21000, 0x32000 và điều đó có thể đủ để tận dụng tối đa bộ nhớ cache, giảm các vụ trục xuất.
Điểm mấu chốt, chìa khóa để tối ưu hóa cho bộ đệm (tốt, ngoài việc hiểu rõ về hệ thống) là giữ tất cả những thứ bạn cần hiệu năng trong bộ đệm cùng một lúc, tổ chức dữ liệu đó sao cho có thể có tất cả trong bộ nhớ cache cùng một lúc. Và ngăn chặn những thứ như thực thi mã, gián đoạn và các sự kiện thông thường hoặc ngẫu nhiên khác để loại bỏ các phần quan trọng của dữ liệu này bạn đang sử dụng.
Mã cũng vậy. Mặc dù khó hơn một chút vì bạn cần kiểm soát các vị trí nơi mã sống để tránh va chạm với mã khác mà bạn muốn giữ trong bộ đệm. Trong khi kiểm tra / lược tả bất kỳ mã nào đi qua bộ đệm có thêm một dòng mã ở đây và thậm chí một nop, bất cứ điều gì thay đổi hoặc thay đổi địa chỉ nơi mã nằm từ biên dịch này sang mã khác cho cùng một mã, sẽ thay đổi trong đó các dòng bộ đệm nằm trong mã đó và thay đổi những gì bị đuổi và những gì không cho các phần quan trọng.