Bộ nhớ cache là một thành phần máy tính dựa trên chip giúp tăng hiệu suất trong việc truy xuất dữ liệu từ bộ nhớ máy tính. Nó hoạt động như một khu vực lưu trữ tạm thời mà bộ xử lý của máy tính có thể dễ dàng truy xuất dữ liệu từ đó. Khu vực lưu trữ tạm thời này, được gọi là cache, sẵn sàng hơn cho bộ xử lý so với nguồn bộ nhớ chính của máy tính, thường là một loại DRAM nào đó.
Bộ nhớ cache đôi khi được gọi là memory CPU (central processing unit) vì nó thường được tích hợp trực tiếp vào chip CPU hoặc được đặt trên một chip riêng có liên kết bus riêng với CPU. Do đó, nó gần với bộ xử lý hơn và có thể tăng hiệu suất vì nó nằm gần vật lý với bộ xử lý.
Để gần với bộ xử lý, bộ nhớ cache cần nhỏ hơn nhiều so với bộ nhớ chính. Do đó, nó có ít không gian lưu trữ hơn. Nó cũng đắt hơn bộ nhớ chính vì nó là một chip phức tạp hơn mang lại hiệu suất cao hơn.
Những gì nó thiếu về kích thước và giá trị, nó bù đắp bằng tốc độ. Cache memory hoạt động từ 10 đến 100 lần nhanh hơn RAM, chỉ cần vài nanogiây để phản hồi yêu cầu từ CPU.
Các loại bộ nhớ cache
Bộ nhớ cache là một loại bộ nhớ nhanh và đắt tiền. Theo truyền thống, nó được phân loại thành “cấp độ” mô tả độ gần và khả năng truy cập đến vi xử lý. Có ba cấp độ cache chung:
- Cache L1, hay còn gọi là cache chính, rất nhanh nhưng tương đối nhỏ, thường được nhúng trong chip vi xử lý làm cache CPU.
- Cache L2, hay còn gọi là cache thứ cấp, thường có dung lượng lớn hơn cache L1. Cache L2 có thể được nhúng trên CPU, hoặc có thể nằm trên một chip riêng hoặc bộ xử lý phụ, và có một bus hệ thống thay thế tốc độ cao kết nối cache và CPU. Điều này giúp tránh bị chậm do giao thông trên bus hệ thống chính.
- Cache cấp độ 3 (L3) là memory đặc biệt được phát triển để cải thiện hiệu suất của L1 và L2. L1 hoặc L2 có thể nhanh hơn đáng kể so với L3, mặc dù L3 thường gấp đôi tốc độ của DRAM. Với các vi xử lý đa lõi, mỗi lõi có thể có cache L1 và L2 riêng, nhưng chúng có thể chia sẻ một cache L3. Nếu một cache L3 tham chiếu một chỉ thị, nó thường được nâng lên một cấp độ cache cao hơn.
Trong quá khứ
cache L1, L2 và L3 đã được tạo ra bằng cách sử dụng các thành phần kết hợp của vi xử lý và bo mạch chủ. Gần đây, xu hướng đã dần chuyển sang tập trung tất cả ba cấp độ lưu trữ cache vào chính CPU. Đó là lý do tăng kích thước cache chủ yếu đã chuyển từ việc mua một bo mạch chủ cụ thể với các chipsets và kiến trúc bus khác nhau sang việc mua CPU với dung lượng cache L1, L2 và L3 tích hợp phù hợp.
Trái ngược với quan niệm phổ biến, việc triển khai flash hoặc bộ nhớ RAM động (DRAM) hơn trên một hệ thống sẽ không tăng bộ nhớ cache. Điều này có thể gây nhầm lẫn vì thuật ngữ caching bộ nhớ (đệm đĩa cứng) và bộ nhớ cache thường được sử dụng hoán đổi. Caching bộ nhớ, sử dụng DRAM hoặc flash để đệm đọc từ đĩa, nhằm cải thiện I/O lưu trữ bằng cách đệm dữ liệu được tham chiếu thường xuyên trong một bộ đệm trước đĩa từ chậm hơn hoặc băng từ. Ngược lại, bộ nhớ cache cung cấp đệm đọc cho CPU.
Ánh xạ bộ nhớ cache
Cấu hình caching tiếp tục phát triển, nhưng truyền thống, cache memory hoạt động theo ba cấu hình khác nhau:
- Ánh xạ trực tiếp (direct mapped cache) có mỗi khối được ánh xạ chính xác đến một vị trí bộ nhớ cache. Mô hình khái niệm của cache ánh xạ trực tiếp giống như hàng trong một bảng với ba cột: khối cache chứa dữ liệu thực tế được truy xuất và lưu trữ, một thẻ với toàn bộ hoặc một phần của địa chỉ của dữ liệu được truy xuất và một bit cờ chỉ ra sự có mặt trong mục hàng của một bit dữ liệu hợp lệ.
- Ánh xạ hoàn toàn hợp nhất (fully associative cache mapping) tương tự như ánh xạ trực tiếp về cấu trúc nhưng cho phép một khối bộ nhớ được ánh xạ đến bất kỳ vị trí bộ nhớ cache nào thay vì ánh xạ đến một vị trí bộ nhớ cache đã xác định trước như trong trường hợp ánh xạ trực tiếp.
- Ánh xạ hợp nhất (set associative cache mapping) có thể xem như một sự nhất compromiệt giữa ánh xạ trực tiếp và ánh xạ hợp nhất hoàn toàn trong đó mỗi khối được ánh xạ đến một tập con các vị trí bộ nhớ cache. Đôi khi nó được gọi là ánh xạ hợp nhất có “N” cách ánh xạ, cho phép một vị trí trong bộ nhớ chính được đệm vào bất kỳ “N” vị trí nào trong cache L1.
Chính sách ghi dữ liệu
Dữ liệu có thể được ghi vào bộ nhớ bằng nhiều kỹ thuật khác nhau, nhưng hai kỹ thuật chính liên quan đến bộ nhớ cache là:
- Ghi qua (write-through): Dữ liệu được ghi vào cả cache memory và bộ nhớ chính cùng một lúc.
- Ghi sau (write-back): Dữ liệu chỉ được ghi vào cache memory ban đầu. Dữ liệu có thể được ghi vào bộ nhớ chính sau đó, nhưng điều này không bắt buộc xảy ra và không làm trở ngại cho sự tương tác.
Cách dữ liệu được ghi vào bộ nhớ cache ảnh hưởng đến tính nhất quán và hiệu suất dữ liệu. Ví dụ, khi sử dụng ghi qua, việc ghi cần thêm thời gian, gây trễ ban đầu. Khi sử dụng ghi sau, các hoạt động có thể hiệu quả hơn, nhưng dữ liệu có thể không nhất quán giữa bộ nhớ chính và bộ nhớ cache.
Một cách để máy tính xác định tính nhất quán của dữ liệu là thông qua việc xem xét bit “dirty” (dirty bit) trong bộ nhớ. Bit dirty là một bit phụ được bao gồm trong các khối bộ nhớ, chỉ ra liệu thông tin đã được sửa đổi hay chưa. Nếu dữ liệu đạt đến bộ đăng ký của bộ xử lý với một bit dirty hoạt động, điều đó có nghĩa là nó không được cập nhật và có phiên bản mới hơn ở nơi khác. Trường hợp này thường xảy ra trong kịch bản ghi sau, vì dữ liệu được ghi vào hai vùng lưu trữ một cách không đồng bộ.
Chuyên môn và chức năng
Ngoài các bộ nhớ cache lệnh và dữ liệu, các cache khác được thiết kế để cung cấp các chức năng hệ thống chuyên biệt. Theo một số định nghĩa, thiết kế chia sẻ của bộ nhớ cache L3 khiến nó trở thành một bộ nhớ cache chuyên biệt. Các định nghĩa khác giữ cache lệnh và cache dữ liệu riêng biệt và đề cập đến mỗi loại như một bộ nhớ cache chuyên biệt.
Bộ đệm ghi nhớ dịch vụ (TLBs) cũng là các bộ nhớ cache chuyên biệt với chức năng ghi nhớ chuyển đổi địa chỉ ảo thành địa chỉ vật lý.
Các cache memory khác không phải là bộ nhớ cache kỹ thuật số học. Ví dụ, cache đĩa có thể sử dụng DRAM hoặc flash memory để cung cấp bộ nhớ đệm dữ liệu tương tự như bộ nhớ cache với các chỉ thị CPU. Nếu dữ liệu được truy cập thường xuyên từ đĩa, nó sẽ được lưu vào DRAM hoặc công nghệ lưu trữ trên silic dựa trên flash để giảm thời gian truy cập và thời gian phản hồi.
Các bộ nhớ cache chuyên biệt cũng có sẵn cho các ứng dụng như trình duyệt web, cơ sở dữ liệu, gắn kết địa chỉ mạng và hỗ trợ giao thức hệ thống tệp mạng phía máy khách (Network File System). Loại cache này có thể được phân tán trên nhiều máy chủ mạng để cung cấp khả năng mở rộng hoặc hiệu suất tốt hơn cho các ứng dụng sử dụng chúng.
Tính cục bộ
Khả năng của cache memory để cải thiện hiệu suất máy tính dựa trên khái niệm về tính cục bộ của tham chiếu. Tính cục bộ mô tả các tình huống khác nhau làm cho hệ thống dễ dự đoán hơn. Bộ nhớ cache tận dụng những tình huống này để tạo ra một mô hình truy cập bộ nhớ mà nó có thể phụ thuộc vào.
Có một số loại tính cục bộ. Hai loại quan trọng nhất đối với cache là:
- Tính cục bộ thời gian. Đây là khi các tài nguyên cùng được truy cập lặp đi lặp lại trong một khoảng thời gian ngắn.
- Tính cục bộ không gian. Đây là việc truy cập các dữ liệu hoặc tài nguyên khác gần nhau.
Hiệu suất
Bộ nhớ cache quan trọng vì nó cải thiện hiệu suất truy xuất dữ liệu. Nó lưu trữ các chỉ thị chương trình và dữ liệu được sử dụng lặp đi lặp lại trong quá trình hoạt động của các chương trình hoặc thông tin mà CPU có thể cần trong tương lai. Bộ xử lý máy tính có thể truy cập thông tin này nhanh hơn từ bộ nhớ chính. Việc truy cập nhanh vào các chỉ thị này tăng tốc độ tổng thể của chương trình.
Ngoài chức năng chính là cải thiện hiệu suất, cache memory cũng là một tài nguyên quan trọng để đánh giá hiệu suất tổng thể của máy tính. Người dùng có thể làm điều này bằng cách xem tỷ lệ trúng/đụng của cache. Trúng cache xảy ra khi hệ thống thành công truy xuất dữ liệu từ bộ nhớ cache. Đụng cache xảy ra khi hệ thống tìm kiếm dữ liệu trong bộ nhớ cache, không tìm thấy và tìm ở nơi khác thay vào đó. Trong một số trường hợp, người dùng có thể cải thiện tỷ lệ trúng/đụng bằng cách điều chỉnh kích thước khối bộ nhớ cache – kích thước các đơn vị dữ liệu được lưu trữ.
Việc cải thiện hiệu suất và khả năng giám sát hiệu suất không chỉ là việc cải thiện tiện ích tổng quát cho người dùng. Khi công nghệ tiến bộ và ngày càng được sử dụng trong các tình huống quan trọng cho nhiệm vụ, việc có tốc độ và độ tin cậy trở nên quan trọng. Chỉ một vài mili giây trễ có thể dẫn đến những chi phí khổng lồ, tùy thuộc vào tình huống cụ thể.
Bộ nhớ cache so với bộ nhớ chính
DRAM được sử dụng làm bộ nhớ chính của máy tính, thực hiện các phép tính trên dữ liệu được lấy từ bộ nhớ lưu trữ. Cả DRAM và bộ nhớ cache đều là bộ nhớ thoáng và mất nội dung khi nguồn điện được tắt. DRAM được cài đặt trên bo mạch chủ và CPU truy cập vào nó thông qua kết nối bus.
DRAM thường chậm hơn khoảng một nửa so với bộ nhớ cache L1, L2 hoặc L3 và rẻ hơn nhiều. Nó cung cấp truy cập dữ liệu nhanh hơn so với bộ nhớ lưu trữ flash, ổ cứng (HDD) và băng ghi. Nó đã được sử dụng trong vài thập kỷ qua để cung cấp một nơi lưu trữ dữ liệu đĩa được truy cập thường xuyên để cải thiện hiệu suất I/O.
DRAM cần được làm mới mỗi vài mili giây. Bộ nhớ cache, cũng là một loại bộ nhớ truy cập ngẫu nhiên, không cần được làm mới. Nó được xây dựng trực tiếp vào CPU để cung cấp cho bộ xử lý truy cập nhanh nhất đến các vị trí bộ nhớ và cung cấp thời gian truy cập tốc độ nanogiây cho các chỉ thị và dữ liệu tham chiếu thường xuyên. SRAM nhanh hơn DRAM, nhưng vì nó là một chip phức tạp hơn, nó cũng đắt hơn để sản xuất.
Bộ nhớ cache so với bộ nhớ ảo
Một máy tính có một lượng giới hạn của DRAM và ít hơn bộ nhớ cache. Khi một chương trình lớn hoặc nhiều chương trình đang chạy, có thể xảy ra tình trạng sử dụng đầy bộ nhớ. Để đền bù cho thiếu hụt bộ nhớ vật lý, hệ điều hành (OS) của máy tính có thể tạo ra bộ nhớ ảo.
Để làm điều này, OS tạm thời chuyển dữ liệu không hoạt động từ DRAM sang bộ nhớ lưu trữ đĩa. Phương pháp này tăng không gian địa chỉ ảo bằng cách sử dụng bộ nhớ hoạt động trong DRAM và bộ nhớ không hoạt động trong ổ cứng để tạo thành các địa chỉ liên tục chứa cả ứng dụng và dữ liệu của nó. Bộ nhớ ảo cho phép máy tính chạy các chương trình lớn hơn mà không cần nhiều DRAM.
Tuy nhiên, bộ nhớ ảo thường chậm hơn DRAM nhiều lần. Khi một chương trình cần truy cập dữ liệu trong bộ nhớ ảo, CPU phải truy cập dữ liệu từ ổ cứng thay vì truy cập nhanh từ bộ nhớ cache hoặc DRAM. Điều này dẫn đến thời gian truy cập dữ liệu lâu hơn và hiệu suất giảm.