Nhắc tới bộ nhớ của máy tính chúng ta thường nghĩ đến RAM hay thậm chí là ổ cứng, ổ SSD, nhưng ngoài ra còn có một loại bộ nhớ quan trọng nữa là cache. Cache cũng ảnh hưởng lớn đến việc máy của bạn chạy nhanh hay chậm, game bạn chơi có hiệu năng tốt hay không, cái phần mềm bạn đang dùng có thể xử lý nhanh hơn không.
Cache là gì và nó nằm ở đâu trong CPU?
Cache dịch ra tiếng Việt có thể xem là “bộ nhớ đệm”, nhưng từ này sẽ không diễn tả đầy đủ ý nghĩa nên trong bài này mình sẽ tiếp tục dùng chữ cache.
Ngày xưa, ở thời hoang sơ của thế giới máy tính, tốc độ của cả CPU và RAM đều chậm nên cả hai có thể giao tiếp với nhau ở cùng tốc độ. Tưởng tượng giống như bạn và một người bạn nữa cùng chạy bộ, nếu hai bạn chạy cùng tốc độ với nhau thì hai bạn có thể thoải mái nói chuyện. Nhưng nếu người kia chạy nhanh hơn bạn thì làm sao mà nói. Đó là điều xảy ra khi tốc độ CPU bắt đầu nhanh lên khi mà công nghệ ngày càng phát triển, tiến bộ hơn, nhất là từ thập niên 1980.
Thế nên người ta sinh ra một loại bộ nhớ tốc độ cao khác, nhanh hơn RAM, và có thể “chạy cùng” với CPU, đó là cache. Cache sẽ chứa dữ liệu để CPU cần thì có thể lấy vào xử lý, không phải “lội” xuống tận ổ cứng của bạn để lấy vì sẽ tốn thời gian hơn nhiều.
Đi ngược lại một chút, máy tính của bạn có nhiều “lớp” (layer) bộ nhớ. Lớp chậm nhất, chính là nơi lưu trữ dữ liệu vĩnh viễn (gọi là persistent storage, hay secondary storage), chi phí thấp, dung lượng cao, ví dụ như SSD, HDD. Lên một lớp nhanh hơn là RAM, chứa dữ liệu để CPU lấy vào tính toán, tốc độ nhanh hơn đồng nghĩa với việc chi phí sản xuất cũng tăng. RAM thường được cấu thành từ nhiều chip nhớ thuộc loại Dynamic RAM (DRAM).
Nhanh hơn cả RAM là cache, và cache thường nằm ngay trên đế CPU đối với những con chip hiện đại. Chúng gần ở CPU về khoảng cách vật lý, điều đó giúp cache có thể trao đổi dữ liệu cực kì hiệu quả. Nó lại cùng nằm trong cùng đế chip với các nhân xử lý nên rút ngắn thời gian gửi nhận tín hiệu. Cache dùng loại bộ nhớ gọi là Static RAM (SRAM). SRAM có tốc độ cao hơn so với DRAM và cũng dùng ít điện hơn.
Cache của CPU hoạt động như thế nào?
Để hiểu về cách mà cache hoạt động, bạn cần biết về cách CPU lấy dữ liệu vào để tính toán. Cứ mỗi một phép tính cần thực hiện, CPU phải trải qua một chu trình gọi là machine cycle. Chu trình đó như hình bên dưới.
Trong bước trên, có đoạn Fetch là lúc CPU sẽ lấy dữ liệu cần tính toán, cũng như lấy lệnh để biết là nó cần làm gì với dữ liệu đó. Ví dụ, khi máy tính cần thực hiện tính A + B, CPU sẽ lấy dữ liệu dữ liệu là A và B, cùng với lệnh ADD để cộng hai số này lại.
Dữ liệu này lấy từ đâu? Nó là do phần mềm gửi lên. Mà phần mềm gửi lên bằng cách nào? Phần mềm sẽ đưa dữ liệu đó vào RAM, và CPU sẽ lấy từ RAM lên (ít nhất là theo thiết kế của những chiếc máy tính thời xưa).
Nhưng như đã nói ở trên, vì CPU có tốc độ quá nhanh, nó có thể tính được rất rất nhiều phép tính trong mỗi giây, nên tốc độ lấy dữ liệu từ RAM không thể đáp ứng được tốc độ cần lấy dữ liệu của CPU. Thế nên người ta mới nghĩ đến việc “chêm” thêm một số bộ nhớ tốc độ cao vào giữa CPU và RAM. CPU trước hết sẽ tìm dữ liệu trong register (là một bộ nhớ nằm trực tiếp trong nhân CPU), nếu không có thì nó tìm trong cache, nếu cache không có thì nó tìm dữ liệu trong RAM, và RAM không có thì tìm trong SSD / HDD.
Cứ mỗi bước như vậy thì tốc độ sẽ chậm dần đi do bản chất của các loại chip nhớ cũng như do khoảng cách từ bộ nhớ đến CPU, thế nên CPU sẽ cố gắng đoán xem ở bước tiếp theo nó cần dữ liệu gì để đưa trước vào cache / register, như vậy CPU sẽ đỡ phải lội ngược dòng và làm giảm tốc độ tính. Quá trình này được gọi là “prediction”.Về mặt phần mềm, ví dụ bạn đang chạy app máy tính và cần tính A + B, thì app sẽ làm nhiệm vụ đưa lệnh và đưa dữ liệu vào RAM. Sau đó, bộ điều khiển (memory controller) sẽ đưa tiếp dữ liệu vào cache.
Cache L1, L2 và L3
Ở trên mình đã giải thích lý do vì sao CPU cần cache và cách mà cache hoạt động rồi, giờ là lúc tìm hiểu xem vì sao trong CPU có nhiều cấp độ cache. Sao người ta không dùng 1 loại cache thôi cho khỏe người?
Vấn đề cũng xoay quanh chi phí và tốc độ mà thôi. Tốc độ càng nhanh thì chi phí cần để sản xuất ra càng cao, và dung lượng dữ liệu có thể chứa được cũng theo đó mà nhỏ đi. Để việc chuyển dữ liệu được trơn tru, người ta tách cache thành nhiều level khác nhau: L1, L2, L3.
Và nếu dữ liệu không có trong cache L1, CPU sẽ tìm tiếp trong L2, không có thì tìm tiếp L3, không có nữa thì đi ra RAM, và không có nữa thì chui xuống HDD / SSD để tìm.
L1 cache hiện nay có thể xem là cache nhanh nhất, đây là nơi đầu tiên trong cache mà CPU sẽ đi tìm dữ liệu khi nó cần tính toán một cái gì đó. L1 thường được chia làm 2 loại: cache để chứa lệnh và cache chứa dữ liệu. Ví dụ, con CPU Intel Core i9-10940X hiện có cache L1 là 448 KB cho dữ liệu và 448 KB cho lệnh.
L2 cache chậm hơn L1 nhưng có dung lượng lớn hơn. Ví dụ, con AMD Ryzen 5 5600X có tới 3MB cache L2 trong khi L1 của nó chỉ 384KB. Con Core i9-10940X có cache L2 đến 14MB. Và mặc dù nói là “chậm hơn” nhưng tốc độ của cache L2 vẫn nhanh hơn khoảng 25 lần so với RAM, còn cache L1 thì nhanh hơn 100 lần so với RAM.
Và cuối cùng là cache L3, có những con chip sở hữu đến 64MB cache L3, và AMD mới đây còn giới thiệu công nghệ cache xếp chồng lên nhau để đạt mức 192MB cache L3. AMD nói rằng chỉ riêng việc này đã giúp cải thiện hiệu năng game thêm 15% mà không cần điều chỉnh gì về phần mềm.
Cache L1 và L2 thường nằm trên từng nhân CPU, còn cache L3 trong các CPU hiện đại thường được chia sẻ chung giữa các nhân với nhau.
Tóm lại
Cache càng lớn thì càng tốt, đơn giản là vậy thôi, nhưng giá CPU cũng theo đó mà tăng lên. Và bạn cũng đừng chỉ chọn CPU dựa vào cache, có rất nhiều yếu tố khác để bạn chọn cho mình một con CPU đáp ứng nhu cầu. Cache chỉ là 1 trong số đó mà thôi nhé.