Bộ nhớ Cache là kiểu bộ nhớ tốc độ cao có bên trong CPU để tăng tốc độ truy cập cho dữ liệu và các chỉ lệnh được lưu trong bộ nhớ RAM. Trong hướng dẫn này, chúng tôi sẽ giới thiệu cho các bạn về cách làm việc của bộ nhớ này theo cách dễ hiểu nhất.
Một máy tính sẽ hoàn toàn vô dụng nếu bạn không bắt bộ vi xử lý (CPU) thực hiện một nhiệm vụ nào đó. Công việc sẽ được thực hiện thông qua một chương trình, chương trình này lại gồm rất nhiều các chỉ lệnh để ra lệnh cho CPU làm việc.
CPU lấy các chương trình từ bộ nhớ RAM. Tuy nhiên có một vấn đề với bộ nhớ RAM đó là khi nguồn nuôi của nó bị cắt thì các thành phần dữ liệu được lưu trong RAM cũng sẽ bị mất – chính điều này nên một số người nói rằng bộ nhớ RAM là một môi trường “dễ bay hơi”. Các chương trình và dữ liệu như vậy phải được lưu trên môi trường không “dễ bay hơi” sau khi tắt máy tính (giống như các ổ đĩa cứng hay các thiết bị quang như đĩa CD và DVD).
Khi kích đúp vào một biểu tượng trong Windows để chạy một chương trình nào đó. Các chương trình thông thường được lưu trên ổ đĩa cứng của máy tính, khi được gọi nó sẽ được nạp vào bộ nhớ RAM sau đó từ bộ nhớ RAM, CPU nạp chương trình thông qua một mạch có tên gọi là memory controller, thành phần này được đặt bên trong chipset (north bridge chip- chíp cực bắc) trên các bộ vi xử lý Intel hoặc bên trong CPU trên các bộ vi xử lý AMD. Trong hình 1 chúng tôi đã tóm tắt sơ qua nguyên tắc làm việc này (với các bộ vi xử lý AMD bạn hãy bỏ qua phần chipset đã được vẽ).
Hình 1: Cách dữ liệu được truyền tải đến CPU
CPU không thể tìm nạp dữ liệu trực tiếp từ các ổ đĩa cứng vì tốc độ truy suất dữ liệu của ổ đĩa cứng là quá thấp với nó, thậm chí nếu nếu bạn có cả ổ đĩa cứng với tốc độ truy suất lớn nhất. Hãy lấy một số ví dụ làm dẫn chứng cho điều này, ổ cứng SATA-300 – một loại ổ đĩa cứng có tốc độ nhanh nhất hiện đang được cung cấp ngày nay đến phần lớn người dùng – có tốc độ truyền tải theo lý thuyết là 300 MB/s. Một CPU chạy với tốc độ 2GHz với đường dữ liệu* 64-bit sẽ truyền tải dữ liệu bên trong với tốc độ 16GB/s – như vậy là lớn gấp 50 lần.
- Đường dữ liệu: Các đường giữa các mạch bên trong CPU. Chỉ cần một phép toán đơn giản bạn cũng có thể biết được rằng mỗi CPU có một số đường dữ liệu khác nhau bên trong, mỗi một đường trong chúng lại có chiều dài khác nhau. Ví dụ với các bộ vi xử lý AMD thì đường dữ liệu giữa L2 memory cache và L1 memory cache có độ rộng 128-bit, trong khi đó của Intel là 256-bit. Đây chỉ là giải thích con số mà chúng tôi đã công bố trong đoạn trên không cố định, nhưng dẫu sao CPU luôn nhanh hơn rất nhiều so với các ổ đĩa cứng.
Sự khác nhau trong tốc độ cũng bắt nguồn từ một thực tế đó là các ổ đĩa cứng còn bao gồm cả hệ thống cơ khí, các hệ thống cơ khí này bao giờ cũng chậm hơn hệ thống điện tử thuần túy, các thành phần cơ khí phải chuyển động để dữ liệu mới có thể được đọc ra (điều này chậm hơn rất nhiều so với việc chuyển động của điện tử). Hay nói cách khác, bộ nhớ RAM là 100% điện tử, có nghĩa là nó sẽ nhanh hơn tốc độ của ổ đĩa cứng và quang.
Tuy nhiên đây chính là vấn đề, thậm chí bộ nhớ RAM nhanh nhất cũng không nhanh bằng CPU. Nếu bạn sử dụng các bộ nhớ DDR2-800, chúng truyền tải dữ liệu ở tốc độ 6.400 MB/s – 12.800 MB/s nếu sử dụng chế độ hai kênh. Thậm chí con số này còn có thể lên đến 16GB/s trong ví dụ trước, vì các CPU hiện nay còn có thể tìm nạp dữ liệu từ L2 memory cache ở tốc độ 128- bit hay 256-bit, chúng ta đang nói về 32 GB/s hoặc 64 GB/s nếu CPU làm việc bên trong với tốc độ 2GHz. Bạn không nên lo lắng về những vấn đề với “L2 memory cache”, chúng tôi sẽ giải thích vấn đề này sau. Tất cả những gì bạn cần nhớ là bộ nhớ RAM chậm hơn CPU.
Bằng cách đó, tốc độ truyền tải có thể được tính bằng sử dụng công thưc dưới đây (trong tất cả các ví dụ từ đầu tới giờ, “dữ liệu trên một clock” vẫn được tính bằng “1”):
[Tốc độ truyền tải] = [Độ rộng (số lượng bít)] x [tốc độ clock] x [dữ liệu trên một clock] / 8
Vấn đề không chỉ dừng lại ở tốc độ truyền tải mà còn cả độ trễ. Độ trễ (thời gian truy cập) là lựợng thời gian mà bộ nhớ giữ chậm trong việc chuyển ngược trở lại dữ liệu mà CPU đã yêu cầu trước đó – điều này không thể thực hiện được ngay lập tức. Khi CPU yêu cầu chỉ lệnh (hoặc dữ liệu) được lưu tại một địa chỉ nào đó thì bộ nhớ sẽ giữ chậm một khoảng thời gian để phân phối lệnh này (hoặc dữ liệu) trở ngược lại. Trên các bộ nhớ hiện nay, nếu nó được dán nhãn có CL bằng 5 (CAS Latency, đây chính là độ trễ mà chúng ta đang nói đến) thì điều đó có nghĩa rằng bộ nhớ sẽ cung cấp dữ liệu đã được yêu cầu sau 5 chu kỳ clock nhớ - nghĩa là CPU sẽ phải chờ đợi.
Việc chờ đợi sẽ làm giảm hiệu suất của CPU. Nếu CPU phải đợi đến 5 chu kỳ clock để nhận được chỉ lệnh hoặc dữ liệu mà nó đã yêu cầu thì hiệu suất của nó sẽ chỉ còn 1/5 so với hiệu suất sử dụng bộ nhớ có khả năng cung cấp dữ liệu tức thời. Nói theo cách khác, khi truy cập bộ nhớ DDR2-800 với CL5 thì hiệu suất của CPU bằng với hiệu suất của CPU làm việc với bộ nhớ 160 MHz (800 MHz / 5) với khả năng cung cấp dữ liệu tức thời. Trong thế giới thực, việc giảm hiệu suất không nhiều vì các bộ nhớ làm việc dưới chế độ có tên gọi là chế độ truyền loạt (burst mode), ở nơi mà dữ liệu được tập trung lần thứ hai có thể được cung cấp một cách ngay lập tức, nếu dữ liệu này được lưu trên một địa chỉ nối tiếp nhau (thường thì chỉ lệnh của chương trình nào đó được lưu trong các địa chỉ liên tục). Điều này được diễn tả bằng công thức “x-1-1-1” (có nghĩa “5-1-1-1” là cho bộ nhớ dùng trong ví dụ của chúng ta), có nghĩa là dữ liệu đầu tiên được cung cấp sau 5 chu kỳ xung clock, nhưng từ dữ liệu thứ hai trở đi thì chúng được cung cấp chỉ trong một chu kỳ clock – nếu nó được lưu trên địa chỉ liên tiếp giống như những gì chúng ta đã nói.
RAM động và Ram tĩnh
Có hai kiểu bộ nhớ RAM đó là RAM động (DRAM) và RAM tĩnh (SRAM). Bộ nhớ RAM đã sử dụng trên các máy tính là loại RAM động. Kiểu RAM này, mỗi bit dữ liệu được lưu bên trong chip nhớ bằng một tụ điện nhỏ, các tụ điện này là thành phần rất nhỏ, nghĩa là có đến hàng triệu tụ điện trên một vùng diện tích mạch điện nhỏ, điều này vẫn được người ta gọi là “mật độ cao”. Các tụ điện này có thể bị mất điện áp tích tụ sau một thời gian, chính vì vậy các bộ nhớ động cần phải có quá trình nạp lại, quá trình này vẫn thường được chúng ta gọi là “làm tươi” (refresh). Trong suốt chu kỳ này dữ liệu không thể được đọc ra hoặc được ghi vào. Bộ nhớ động rẻ hơn so với bộ nhớ tĩnh và cũng tiêu thụ ít năng lượng hơn bộ nhớ tĩnh. Tuy nhiên như chúng ta đã biết, trên RAM động, dữ liệu không được cung cấp một cách sẵn sàng và nó có thể không làm việc nhanh bằng CPU.
Với bộ nhớ tĩnh, đây là kiểu bộ nhớ có thể làm việc nhanh bằng CPU, vì mỗi bit dữ liệu đều được lưu trên một mạch có tên gọi flip-flop (F-F), mỗi một F-F này lại có thể cung cấp dữ liệu với độ trễ rất nhỏ, vì các F-F không yêu cầu đến chu trình làm tươi. Vấn đề ở đây là các F-F này lại yêu cầu một số transistor, có kích thước to hơn so với một tụ điện trên RAM động. Điều này có nghĩa là trên cùng một diện tích giống nhau, nơi mà ở bộ nhớ tĩnh chỉ có một F-F tồn tại thì trên bộ nhớ động sẽ có đến hàng trăm tụ điện. Chính vì vậy các bộ nhớ tĩnh thường có mật độ thấp hơn – các chíp có dung lượng thấp hơn. Hai vấn đề khác với bộ nhớ tĩnh nữa là: nó thường đắt hơn nhiều và tiêu tốn nhiều năng lượng hơn (do đó nóng hơn) so với bộ nhớ tĩnh.
Trong bảng dưới đây, chúng tôi có tóm tắt các sự khác nhau chính giữa RAM động (DRAM) và RAM tĩnh (SRAM).
Tính năng | RAM động (DRAM) | RAM tĩnh (SRAM) |
Mạch trữ điện | Tụ điện | Flip-flop |
Tốc độ truyền tải | Thấp hơn CPU | Bằng với CPU |
Độ trễ | Cao | Thấp |
Mật độ | Cao | Thấp |
Tiêu tốn năng lượng | Thấp | Cao |
Giá thành | Rẻ | Đắt |
Mặc dù Ram tĩnh có tốc độ nhanh hơn RAM động nhưng những nhược điểm của nó vẫn ngăn cản nó trở thành RAM chính.
Giải pháp đã tìm thấy để giảm sự ảnh hưởng trong việc sử dụng bộ nhớ RAM chậm hơn CPU là sử dụng một số lượng nhỏ các RAM tĩnh giữa CPU và bộ nhớ RAM. Công nghệ này được gọi là bộ nhớ Cache và ngày nay có một số lượng nhỏ bộ nhớ tĩnh này được đặt bên trong CPU.
Bộ nhớ Cache copy hầu hết các dữ liệu đã được truy cập gần đây từ bộ nhớ RAM vào bộ nhớ tĩnh và đoán dữ liệu gì CPU sẽ hỏi tiếp theo, tải chúng đến bộ nhớ tĩnh trước khi CPU yêu cầu thực sự. Mục đích là làm cho CPU có thể truy cập vào bộ nhớ Cache thay vì truy cập trực tiếp vào bộ nhớ RAM, vì nó có thể truy vấn dữ liệu từ bộ nhớ Cache một cách tức thời hoặc cũng hầu như ngay lập tức thay vì phải đợi khi truy cập vào dữ liệu được đặt trong RAM. CPU càng truy cập vào Cache nhớ thay cho RAM nhiều hơn thì hệ thống sẽ càng hoạt động nhanh hơn. Cũng theo đó, chúng ta sẽ sử dụng hoán đổi hai thuật ngữ “dữ liệu” và “chỉ lệnh” cho nhau vì những gì được lưu bên trong mỗi địa chỉ nhớ không có gì khác biệt đối với bộ nhớ.
Chúng tôi sẽ giải thích một cách chính xác cách Cache nhớ làm việc như thế nào ở phần tiếp theo của bài.