25
Bộ nhớ Cache làm việc như thế nào ? - Phần 1 [22/09/2007 22:54] Giới thiệu Bộ nhớ Cache là bộ nhớ tốc độ cao có sẵn trong CPU với mục đích tăng tốc độ truy cập dữ liệu và những lệnh lưu trữ trong bộ nhớ RAM . Trong bài này chúng tôi giải thích nó làm việc như thế nào một cách dễ hiểu nhất . Máy tính hoàn toàn là đồ vứt đi nếu bạn không nói cho bộ vi xử lí ( CPU ) biết phải làm cái gì . Điều đó được thực hiện thông quan chương trình , trong đó có chữa danh sách những lệnh nói cho CPU biết phải làm những gì . CPU lấy những chương trình từ bộ nhớ RAM . Vấn đề với bộ nhớ RAM khi mà nguồn điện bị mất thì nội dung chứa bên trong nó bị mất – bộ nhớ RAM loại này hay cồn gọi là “Volatile” . Như vậy những chương trình và dữ liệu phải được lưu trữ trong những bộ nhớ kiểu Non-Volatile ( có nghĩa là nội dung chứa trong đó không bị mất khi bạn tắt nguồn điện ) như là ổ đĩa cứng , đĩa quang ( CDROM , DVD ROM ... ) . Khi bạn bấm đúp vào một Icon trong Windows để chạy chương trình , thông thường chương trình được lưu trữ trên ổ cứng của máy tính , nó sẽ được tải vào bộ nhớ RAM , và sau đó từ bộ nhớ RAM CPU tải chương trình qua mạch gọi là Bộ phận điều khiển bộ nhớ , mà nằm bên trong Chipset ( NorthBride ) với những bộ vi xử lí Intel hoặc bên trong CPU với những bộ vi xử lí của AMD .

Bộ nhớ Cache làm việc như thế nào

  • Upload
    lehahai

  • View
    319

  • Download
    1

Embed Size (px)

Citation preview

Page 1: Bộ nhớ Cache làm việc như thế nào

Bộ nhớ Cache làm việc như thế nào ? - Phần 1 [22/09/2007 22:54]Giới thiệu  Bộ nhớ Cache là bộ nhớ tốc độ cao có sẵn trong CPU với mục đích tăng tốc độ truy cập dữ liệu và những lệnh lưu trữ trong bộ nhớ RAM . Trong bài này chúng tôi giải thích nó làm việc như thế nào một cách dễ hiểu nhất . Máy tính hoàn toàn là đồ vứt đi nếu bạn không nói cho bộ vi xử lí ( CPU ) biết phải làm cái gì . Điều đó được thực hiện thông quan chương trình , trong đó có chữa danh sách những lệnh nói cho CPU biết phải làm những gì .  CPU lấy những chương trình từ bộ nhớ RAM . Vấn đề với bộ nhớ RAM khi mà nguồn điện bị mất thì nội dung chứa bên trong nó bị mất – bộ nhớ RAM loại này hay cồn gọi là “Volatile” . Như vậy những chương trình và dữ liệu phải được lưu trữ trong những bộ nhớ kiểu Non-Volatile ( có nghĩa là nội dung chứa trong đó không bị mất khi bạn tắt nguồn điện ) như là ổ đĩa cứng , đĩa quang ( CDROM , DVD ROM ... ) . Khi bạn bấm đúp vào một Icon trong Windows để chạy chương trình , thông thường chương trình được lưu trữ trên ổ cứng của máy tính , nó sẽ được tải vào bộ nhớ RAM , và sau đó từ bộ nhớ RAM CPU tải chương trình qua mạch gọi là Bộ phận điều khiển bộ nhớ , mà nằm bên trong Chipset ( NorthBride ) với những bộ vi xử lí Intel hoặc bên trong CPU với những bộ vi xử lí của AMD .  

 Hình 1 : Dữ liệu lưu trữ được truyền tới CPU như thế nào  CPU không thể lấy dữ liệu trực tiếp từ những ổ đĩa cứng bởi vì chúng quá chậm , thậm trí ngay cả đối với những ổ cứng nhanh nhất hiện nay . Ngay bầy giờ cung cấp cho các bạn về khái niệm này như ổ đĩa cứng SATA 300  – kiểu ổ đĩa thông thường nhanh nhất hiện nay có khả năng truyền tốc độ dữ liệu là 300MB/s . Với một CPU chạy với tốc độ xung nhịp bên trong là 2GHz ví dụ với độ rộng đường dữ liệu bên trong là 64-bit thì tốc độ truyền dữ liệu bên trong là 16GB/s – gấp hơn 50 lần . 

Page 2: Bộ nhớ Cache làm việc như thế nào

Sự khác nhau về tốc độ chính là ở chỗ ổ đĩa cứng thông dụng hiện nay là những hệ thống thống cơ khí , chậm hơn rất nhiều so với những hệ thống điện tử . Và có vấn đề nữa xảy ra chính là bộ nhớ RAM nhanh nhất hiện nay không nhanh bằng tốc độ xử lí của CPU . Nếu có bộ nhớ DDR2-800 , có tốc độ truyền dữ liệu 6400MB/s tới 128000 MB/s nếu dùng với cấu hình Dual-Channel . Thậm trí mặc dù số này cũng gần bằng với tốc độ 16GB/s như ví dụ đã đề cập trước đó thì những CPU hiện nay có khả năng lấy trước dữ liệu từ bộ nhớ Cache L2 có độ rộng 128 hoặc 256-bit thì lúc đó chúng ta có tốc độ 32GB/s hoặc 64GB/s với CPU làm việc với tốc độ bên trong là 2GHz . Chúng tôi sẽ nói tới bộ nhớ Cache L2 sau này , nhưng nói tóm lại đó là những ví dụ để cho thấy bộ nhớ RAM có tốc độ chậm hơn CPU .Tốc độ truyền dữ liệu được tính theo công thức  Tốc độ truyền = Độ rộng Bus nhớ x Tốc độ xung nhịp x Số dữ liệu truyền trong một chu kì xung nhịp / 8 Một vấn đề tiếp theo không chỉ liên quan tới tốc độ truyền dữ liệu mà chính là thời gian trễ . Thời gian trễ ( hay còn gọi là thời gian truy cập – Latency ) là thời gian bao lâu mà bộ nhớ trì hoãn cung cấp dữ liệu lại với những yêu cầu của CPU – điều đó có nghĩa là không phải xảy ra ngay lập tức . Khi CPU yêu cầu lệnh hoặc dữ liệu mà lưu trữ tại một địa chỉ xác định , thì bộ nhớ sẽ trì hoãn một thời gian nào đó để cung cấp quay trở lại lệnh hoặc dữ liệu . Với bộ nhớ hiện thời , nếu trên nhãn có ghi là CL ( CAS Latency ) là 5 , thì có nghĩa là bộ nhớ sẽ cấp phát dữ liệu yêu cầu sau 5 chu kì xung nhịp của bộ nhớ - điều này có nghĩa là CPU sẽ phải chờ .  Việc chờ đợi sẽ làm giảm hiệu suất hoạt động của CPU . Nếu CPU phải chờ 5 chu kì xung nhịp của bộ nhớ để nhận lệnh hoặc dữ liệu nó yêu cầu thì hiệu suất làm việc của nó chỉ bằng 1/5 hiệu suất làm việc với bộ nhớ mà cung cấp dữ liệu yêu cầu ngay lập tức . Nói một cách khác , khi truy cập bộ nhớ DDR2-800 với CL5 thì hiệu suất làm việc của CPU nhận được bằng với tốc độ 160MHz ( 800 MHz / 5 ) . Trên thực tế hiệu suất làm việc không giảm nhiều đến như vậy bởi vì bộ nhớ có kiểu làm việc gọi là “Burst Mode” . Với kiểu “Burst Mode” thì dữ liệu thứ hai trong luồng dữ liệu được cấp phát ngay lập tức nếu nó được lưu trữ theo địa chỉ kề nhau ( thông thường những lệnh của chương trình được lưu trữ theo những địa chỉ liên tiếp .  Ví dụ với bộ nhớ có ghi 5-1-1-1 thì có nghĩa là dữ liệu đầu tiên được cấp phát sau 5 chu kì xung nhịp của bộ nhớ và từ dữ liệu thứ hai trong luồng dữ liệu sẽ được cấp phát chỉ với 1 chu kì xung nhịp – nếu nó lưu trữ theo địa chỉ liền kề . RAM động và RAM tĩnh  Có hai kiểu RAM cho bộ nhớ hiện nay : động ( Dynamic RAM – DRAM ) và tĩnh ( Static RAM – SRAM ) . Bộ nhớ RAM dùng cắm trên Motherboard hiện nay là RAM động . Kiểu bộ nhớ này mỗi Bit dữ liệu được lưu trữ trong Chip nhớ trong tụ điện nhỏ . Những tụ điện này là những linh kiện rất nhỏ , nghĩa là hàng triệu tụ điện trên một vùng có diện tích nhỏ - gọi là mật độ cao . Những tụ điện này sẽ mất điện tích trong một thời

Page 3: Bộ nhớ Cache làm việc như thế nào

gian nào đó , có nghĩa là dữ liệu lưu trong đó bị mất , vì thế bộ nhớ động cần một quá trình nạp lại điện gọi là Refresh , mà thường xảy ra liên tục theo mỗi chu kì nhất định . Trong thời gian Refresh dữ liệu không có thể Đọc hoặc Ghi được . Bộ nhớ động rẻ hơn bộ nhớ tĩnh và mức độ tiêu thụ năng lượng ít hơn . Nhưng như chúng ta đã nói , dữ liệu bộ nhớ RAM động không sẵn sàng ngay lập tứ và nó làm việc chậm hơn so với CPU . Bộ nhớ tĩnh ( SRAM ) có thể làm việc với tốc độ nhanh bằng tốc độ của CPU , bởi vì mỗi Bit dữ liệu được lưu trữ trong một mạch lật ( Flip-Flop ) , mà nó có thể cấp phát dữ liệu với thời gian trễ bằng 0 hoặc rất nhỏ , bởi vì mạch lật không yêu cầu chu kì Refresh . Nhưng có một vấn đề xảy ra đó là để sản xuất ra một mạch lật lại phải dùng tới vài Transistor , điều đó cũng đồng nghĩa với nó có kích thước lớn hơn so với DRAM . Như vậy SRAM sẽ có mật độ thấp . Vì thế có hai vấn đề xảy ra với SRAM đó là vô cùng đắt và tiêu thụ nhiều năng lượng – như vậy chạy sẽ nóng hơn . Bảng bên dưới tóm tắt sự khác nhau chính giữa DRAM và SRAM  

  DRAM SRAM

Mạch lưu trữ Tụ điện Mạch lật

Tốc độ truyền dữ liệu Chậm hơn CPU Tương tự như CPU

Thời gian trễ Cao Thấp

Mật độ Cao Thấp

Công suất tiêu thụ Thấp Cao

Giá thành Rẻ Đắt

  Mặc dù SRAM nhanh hơn DRAM , nhưng những bất lợi của nó không cho phép dùng làm bộ nhớ chính trên Motherboard . Giải pháp tìm ra để giảm ảnh hưởng của bộ nhớ RAM chậm hơn CPU đó là dùng số lượng SRAM nhỏ giữa CPU và bộ nhớ RAM . Kỹ thuật này gọi là bộ nhớ Cache và hiện nay một số lượng bộ nhớ SRAM nhỏ nằm bên trong bộ vi xử lí . Bộ nhớ Cache sẽ copy hầu hết dữ liệu truy cập từ RAM tới bộ nhớ SRAM và cố gắng dự đoán trước những dữ liệu nào mà CPU sẽ cần đến tiếp theo để tải chúng tới SRAM trước khi CPU yêu cầu cần đến nó . Với mục đích để làm cho CPU truy cập tới bộ nhớ Cache thay thế cho việc truy cập trực tiếp tới bộ nhớ RAM , khi đó nó có thể tìm lại được dữ liệu từ bộ nhớ Cache ngay lập tức hoặc gần ngay lập tức . CPU truy cập vào bộ nhớ Cache càng nhiều thay vì truy cập tới RAM chính thì hệ thống sẽ càng nhanh . Chúng tôi sẽ giải thích chính xác bộ nhớ Cache làm việc như thế nào ở mục sau

Page 4: Bộ nhớ Cache làm việc như thế nào

Bộ nhớ Cache làm việc như thế nào ? - Phần 2 [24/09/2007 07:45]Lịch sử của Bộ nhớ Cache trong PC Trong phần này chỉ chú trọng tới lịch sử của bộ nhớ Cache . Nếu không quan tâm bạn có thể bỏ qua .  Bộ nhớ Cache ban đầu được dùng cho những máy tính với những bộ vi xử lí 386DX . Lúc đó CPU không có bộ nhớ Cache bên trong và phải cần mạch điện hỗ trợ - có nghĩa là Chipset có bộ phận điều khiển bộ nhớ Cache . Như vậy lúc đó bộ nhớ Cache là phần mở rộng và là một sự lựa chọn và như vậy nhà sản xuất Motherboard có thể thêm nó hoặc không . Nếu Motherboard không có bộ nhớ Cache sẽ chậm hơn PC có chứa mạch điện này . Tổng số dung lượng Cache lúc đó là thay đổi được tùy thuộc vào kiểu của Motherboard , vào thời gian đó thông thường là 64KB hoặc 128KB . Khi đó Bộ phận điều khiển bộ nhớ Cache sử dụng cấu trúc là “Write-Through” , là một hoạt động Ghi – có nghĩa là khi CPU muốn lưu dữ liệu vào bộ nhớ - thì Bộ phận điều khiển bộ nhớ Cache sẽ cập nhật bộ nhớ RAM ngay lập tức . Với bộ vi xử lí 486DX , Intel thêm số lượng nhỏ ( 8KB ) bộ nhớ Cache bên trong CPU . Bộ nhớ Cache bên trong này đã được gọi là L1 ( Level 1 ) hoặc “bên trong – Internal” , trong khi đó bộ nhớ Cache bên ngoài đã được gọi là L2 ( Level 2 ) hoặc “ bên ngoài – External”  . Tổng số bộ nhớ Cache L2 lúc đó phụ thuộc vào kiểu của Motherboard . Thông thường trong thời gian đó nó có dung lượng là 128KB hoặc 256KB . Những Model về sau của 486 thêm cấu trúc Cache gọi là “ Write-Back “ , mà được dùng cho tới ngày nay . Với cấu trúc “Write-Back” những phép Ghi bộ nhớ RAM không được cập nhật ngay lập tức , CPU lưu trữ dữ liệu vào bộ nhớ Cache và Bộ phận điều khiển bộ nhớ cập nhật bộ nhớ RAM chỉ khi “Cache Miss” xảy ra . Cache Miss là lúc CPU không tìm thấy dữ liệu cần thiết trong bộ nhớ Cache mà phải lấy trực tiếp từ bộ nhớ RAM . Sau đó với những bộ vi xử lí Pentium đầu tiên , Intel tạo ra hai bộ nhớ Cache bên trong riêng biệt , một cho những lệnh và một cho dữ liệu ( vào thời điểm đó chỉ có 8KB cho mỗi kiểu ) . Cấu trúc này vẫn còn được dùng cho tới ngày nay , và đó là tại sao đôi khi bạn nhìn thấy bộ nhớ Cache L1 có ghi 64KB + 64KB - điều đó có nghĩa là bộ nhớ Cache L1 có dung lượng 128KB chia ra làm hai mỗi phần 64KB . Tất nhiên chúng tôi sẽ giải thích sau về sự khác nhau giữa hai phần đó . Vào thời điểm đó bộ nhớ Cache L2 vẫn tiếp tục được gắn trên Motherboard và dung lượng của nó phụ thuộc vào kiểu Motherboard và thông thường là 256KB và 512KB  

Page 5: Bộ nhớ Cache làm việc như thế nào

 Hình 2 : Vị trí của bộ nhớ Cache L2 trên Motherboard Với những bộ vi xử lí AMD như dòng K5, K6 và K6-2 dùng cùng cấu trúc như trên , nhưng với K6-III có bộ nhớ Cache thứ 3 ( L3 , Level 3 ) . Có một vấn đề với bộ nhớ Cache L2 cắm ngoài đó là truy cập vào nó với tốc độ thấp hơn . Ví dụ từ bộ vi xử lí 486DX2 thì tốc độ bên trong của CPU khác với tốc độ bên ngoài của CPU . Trong khi Pentium-200 làm việc với tốc độ bên trong là 200MHz , nó truy cập bộ nhớ Cache L2 với tốc độ là 66MHz . Sau đó với cấu trúc P6 , Intel đã chuyển bộ nhớ Cache từ Motherboard vào bên trong CPU - điều đó cho phép CPU truy cập nó với tốc độ bên trong của CPU - ngoại trừ Pentium II . Với dòng Pentium II bộ nhớ Cache L2 không nằm bên trong CPU nhưng nó lại nằm trên cùng bảng mạch in mà CPU được hàn lên đó ( bảng mạch in này được gói vào chung một vỏ ) , chạy với tốc độ bằng ½ tốc độ bên trong của CPU , và trên Celeron-266 và Celeron-300 không có bộ nhớ Cache này . 

Page 6: Bộ nhớ Cache làm việc như thế nào

  Hình 3 : 03 linh kiện hàn phía sau lưng CPU chính là bộ nhớ Cache L2

 Ngày nay bộ nhớ Cache L1 và L2 được tích hợp bên trong CPU và chạy với tốc độ bằng với tốc độ bên trong của CPU . Do đó số lượng bộ nhớ Cache phụ thuộc vào kiểu CPU , không có cách nào tăng tổng số dung lượng Cache ngoại trừ thay thế một CPU khác .

Bộ nhớ Cache làm việc như thế nào ? - Phần 3 [25/09/2007 15:04]Bộ nhớ Cache  Hình dưới là sơ đồ khối của CPU Single-Core thông thường đơn giản   Hình 4 : Sơ đồ khối cơ bản của CPU Những đường gạch là bên trong của bộ vi xử lí , bộ nhớ RAM nằm bên ngoài CPU . Đường dữ liệu giữa bộ nhớ RAM và CPU thông thường là 64-bit ( hoặc 128-bit với cấu hình Dual-Channel ) chạy với tốc độ của bộ nhớ hoặc tốc độ bên ngoài của CPU ( tốc độ Bus nhớ trong trường hợp là bộ vi xử lí của AMD ) thấp hơn . Chúng ta đã đề cập tới cách tính toán tốc độ trong phần trước . Tất cả mạch bên trong đường gạch nối chạy với tốc độ bên trong của CPU . Phụ thuộc vào CPU mà sẽ có một số phần bên trong chạy với tốc độ cao hơn . Cũng như vậy đường dữ liệu giữa những bộ phận bên trong CPU có thể rộng hơn , có nghĩa là truyền hơn 64-bít hoặc 128-bit trong một chu kì xung nhịp . Ví dụ , đường dữ liệu giữa bộ nhớ Cache L2 và Cache lệnh L1 trong những bộ vi xử lí mới nhất thông thường có độ rộng là 256-bit . Đường dữ liệu giữa Cache lệnh L1 với Fetch Unit - Bộ phận mang dữ liệu về - của CPU phụ thuộc vào kiểu CPU và thông thường là 128-bit  . Với số Bit cao hơn được truyền trong một chu kì xung nhịp thì có nghĩa là tốc độ truyền cao hơn . 

Page 7: Bộ nhớ Cache làm việc như thế nào

Tóm tại , tất cả những CPU mới bây giờ đều có 03 bộ nhớ Cache : L2 , lớn hơn và vị trí nằm giữa bộ nhớ RAM và Cache lệnh L1 , lưu giữ cả những lệnh và dữ liệu ; Cache lệnh L1 , để lưu trữ những lệnh để CPU thực hiện ; và Cache dữ liệu L1 , được dùng để lưu trữ dữ liệu để ghi quay trở lại bộ nhớ . L1 và L2 có nghĩa là “Mức 1 “ và “Mức 2” ám chỉ tới khoảng cách giữa chúng tới nhân CPU ( Execution Unit - Bộ phận thực hiện lệnh ) . Tại sao lại tách riêng bộ nhớ Cache ra làm ba phần như vậy ( Cache dữ liệu L1 , Cache lệnh L1 và Cache L2 ) . Thách thức lớn nhất chính là làm cho thời gian trễ của bộ nhớ tĩnh SRAM là 0 , đặc biệt với những CPU chạy với tốc độ xung nhịp rất cao . Khi đó việc sản xuất ra những bộ nhớ SRAM với thời gian trễ gần bằng 0 là vô cùng khó khăn , những nhà sản xuất chỉ có thể thực hiện việc đó với bộ nhớ Cache L1 . Bộ nhớ Cache L2 dùng SRAM không nhanh như bộ nhớ dùng trong Cache L1 , bởi vì nó sẽ có thời gian trễ , như vậy sẽ chậm hơn một chút so với bộ nhớ Cache L1 .  Chú ý trong hình 4 và bạn sẽ nhìn thấy Cache lệnh L1 làm việc như “ Cache đầu vào “ , trong khi Cache dữ liệu L1 làm việc như “Cache đầu ra” . Cache lệnh L1 , thông thường nhỏ hơn Cache L2 – là tác động đặc biệt khi chương trình bắt đầu lặp lại những phần nhỏ trong đó , bởi vì những lệnh yêu cầu sẽ gần với Fetch Unit - Bộ phận mang dữ liệu về -  hơn . Điều này ít khi đề cập tới , nhưng Cache lệnh L1 cũng được dùng để lưu trữ dữ liệu khác bên cạnh những lệnh đã được giải mã . Phụ thuộc vào CPU nó có thể được dùng để lưu trữ một số dữ liệu được giải mã trước và những thông tin rẽ nhánh ( tóm lại , dữ liệu điều khiển sẽ tăng tốc độ xử lí giải mã )  và đôi khi Cache lệnh L1 lớn hơn số lượng được thông báo , bởi vì nhà sản xuất không công bố những phần Cache được thêm vào cho những thông tin đặc biệt . Trên những phần nói về đặc tính kỹ thuật của CPU có thể thấy một số kiểu khác nhau . Một số nhà sản xuất đưa ra danh sách hai bộ nhớ Cache L1 riêng biệt ( đôi khi gọi Cache lệnh là “I” và Cache dữ liệu là “D”) hoặc đôi khi gộp cả hai bộ nhớ Cache này là một như kiểu “128KB , riêng biệt “ điều đó có nghĩa là 64KB Cache lệnh và 64KB Cache dữ liệu . Ngoại trừ những CPU dựa trên vi cấu trúc Netburst như : Pentium 4 , Pentium D , Xeon dựa trên cấu trúc Pentium 4 và những Celeron dựa trên Pentium 4 . Những bộ vi xử lí dựa trên vi cấu trúc Netburst không có Cache lệnh L1 , thay vào đó chúng có Cache với tên gọi Trace Execute , bộ nhớ Cache này nằm giữa bộ phận giải mã ( Decode Unit ) và bộ phận thực hiện lệnh ( Execution Unit ) , những lệnh lưu trữ đã được giải mã .. Do đó Cache lệnh L1 ở vị trí đó , những với tên gọi khác và nằm ở vị trí khác . Chúng tôi đề cập tới vấn đề như vậy bởi vì những nhầm lẫn khi nghĩ rằng những bộ vi xử lí Pentium 4 không có Cache lệnh L1 . Do đó khi so sánh Pentium 4 với những CPU khác nhiều người sẽ nghĩ rằng Cache L1 của nó nhỏ hơn bởi vì chỉ có có 8KB Cache dữ liệu L1 . Cache với tên gọi Trace Execution của những CPU dựa trên cấu trúc Netburst có dung lượng là 150KB . 

Page 8: Bộ nhớ Cache làm việc như thế nào

Bộ nhớ Cache L2 trong những CPU nhiều lõi ( Multi-Core ) Trong những CPU có nhiều hơn một lõi thì có nhiều cấu trúc Cache L2 khác nhau phụ thuộc vào CPU . Những bộ vi xử lí Pentium D và AMD Dual-Core dựa trên cấu trúc K8 thì mỗi lõi CPU có bộ nhớ Cache L2 riêng biệt . Do đó mỗi lõi làm việc độc lập với nhau . Những CPU của Intel Dual-Core dựa trên vi cấu trúc Core và vi cấu trúc Pentium M , chỉ có Cache L2 được làm việc chia xẻ giữa hai lõi . Intel nói rằng cấu trúc chia xẻ như vậy là tốt hơn , bởi vì việc sử dụng Cache riêng biệt sẽ xảy ra trường hợp một lúc nào đó một lõi đã dùng hết bộ nhớ Cache L2 trong khi một lõi khác lại dùng không hết bộ nhớ Cache L2 . Khi điều đó xảy ra , lõi đầu tiên có thể phải lấy dữ liệu từ bộ nhớ RAM , thậm trí nó nghĩ rằng bộ nhớ Cache L2 của lõi thứ hai vẫn còn chỗ trống để lưu trữ dữ liệu và ngăn chặn việc truy cập tới bộ nhớ RAM , điều đó làm cho hiệu suất hệ thống giảm xuống . Do đó những bộ vi xử lí Core 2 Duo với bộ nhớ Cache L2 4MB thì một lõi có thể làm việc với 3.5MB trong khi lõi khác làm việc với dung lượng 512KB , ngược lại việc chia cố định 50%-50% dùng trong những bộ vi xử lí Dual-Core khác . Nói một cách khác những CPU Quad-Core củ Intel hiện nay như Core 2 Extreme QX và Core 2 Quad dùng hai Chip Dual-Core , có nghĩa là việc chia xẻ bộ nhớ Cache chỉ xảy ra giữa lõi 1&2 và 3&4 . Trong tương lai Intel có kế hoạch tung ra CPU Quad-Core dùng trên cùng một tấm Silicon . Khi đó bộ nhớ Cache L2 sẽ được dùng chung chia xẻ cho 04 lõi một cách linh hoạt . 

  Hình 5 : So sánh giữa giải pháp Cache L2 hiện thời trong những CPU Multi-Core 

Page 9: Bộ nhớ Cache làm việc như thế nào

Những CPU của AMD dựa trên cấu trúc K10 sẽ có bộ nhớ Cache L3 chia xẻ bên trong bộ vi xử lí , lai ghép giữa hai phương pháp trên . Kích thước của Cache sẽ phụ thuộc vào kiểu của CPU như đã từng xảy ra đối với Cache L2 . 

  Hình 6 : Cấu trúc Cache K10Bộ nhớ Cache làm việc như thế nào ? - Phần 4 [27/09/2007 08:42]

Nó làm việc thế nào

 

Đây là cách mà bộ nhớ Cache làm việc . Bộ phận mang dữ liệu về - Fetch Unit - của CPU tìm kiếm những lệnh tiếp theo để thực hiện trong bộ nhớ Cache lệnh L1 . Nếu nó không có ở đó , nó sẽ tìm tìm kiếm trong bộ nhớ Cache L2 . Sau đó nếu không có , nó sẽ phải đi tới bộ nhớ RAM để mang lệnh về .

Chúng ta gọi “hit” khi CPU tải những lệnh hoặc dữ liệu yêu cầu từ bộ nhớ Cache , và gọi là “miss” nếu lệnh và dữ liệu yêu cầu không có trong Cache và CPU cần truy cập trực tiếp tới bộ nhớ RAM hệ thống .

Hiển nhiên khi bạn bật máy tính thì Cache hoàn toàn trống , do đó yêu cầu truy cập RAM hệ thống - điều đó Cache miss hoàn toàn không thể tránh được . Nhưng sau khi những lệnh đầu tiên được tải thì quá trình làm việc bắt đầu .

Khi CPU tải một lệnh vì một vị trí bộ nhớ nào đó , mạch điện gọi bộ phận điều khiển bộ nhớ Cache tải vào trong bộ nhớ Cache một khối nhỏ dữ liệu bên dưới vị trí hiện tại mà CPU vừa tải . Lúc đó thông thường luồng chương trình theo thứ tự sắp sẵn , vị trí bộ nhớ tiếp theo CPU sẽ yêu cầu sẽ có khả năng là vị trí bên dưới ngay đó của bộ nhớ đã được tải , dữ liệu tiếp theo sẽ có khả năng đã nằm bên trong bộ nhớ Cache , do đó CPU không cần ra bộ nhớ RAM hệ thống để lấy dữ liệu : nó đã được tải bên trong bộ nhớ Cache đi liền với CPU và có thể truy cập với tốc độ bằng tốc độ bên trong của CPU .

Tổng số dữ liệu được gọi theo hàng và thông thường có độ dài là 64-Byte .

Page 10: Bộ nhớ Cache làm việc như thế nào

Bên cạnh việc tải khối nhỏ dữ liệu , Bộ phận điều khiển bộ nhớ sẽ cố gắng phỏng đoán CPU sẽ yêu cầu cái gì tiếp theo . Mạch điện này gọi là PreFetcher – Mang về trước dữ liệu - , tải nhiều vị trí dữ liệu sau những 64-Byte đầu tiên từ bộ nhớ RAM vào bộ nhớ Cache . Nếu chương trình tiếp tục tải những lệnh và dữ liệu từ vị trí bộ nhớ theo thứ tự , những lệnh và dữ liệu mà CPU sẽ hỏi tiếp theo đã được sẵn sàng tải bên trong bộ nhớ Cache .

Do đó chúng ta có thể tóm tắt cách thức làm việc của bộ nhớ Cache như sau :

        CPU yêu cầu Lệnh/Dữ liệu lưu trữ trong địa chỉ “a”        Khi đó nội dung từ địa chỉ “a” không có bên trong bộ

nhớ Cache , CPU phải mang nó về trực tiếp từ bộ nhớ RAM .        Bộ phận điều khiển Cache tải một hàng ( thông thường 64-byte ) bắt đầu từ địa chỉ “a” vào bên trong bộ nhớ Cache . Điều đó nhiều hơn dữ liệu CPU đã yêu cầu , do đó nếu chương trình tiếp tục chạy tuần tự ( có nghĩa là yêu cầu địa chỉ a+1 ) Lệnh/Dữ liệu tiếp theo CPU sẽ yêu cầu đã được tải trong bộ nhớ Cache .        Mạch điện gọi là PreFetcher tải nhiều vị trí dữ liệu hơn sau dòng này , có nghĩa là bắt đầu những nội dung tải từ địa chỉ a+64 vào bộ nhớ Cache . Ví dụ , Pentium 4 có Prefetcher là 256-byte , do đó nó tải 256 byte tiếp theo sau dòng đã được tải bên trong bộ nhớ Cache .

 Nếu chương trình thường chạy tuần tự thì CPU không bao giờ cần lấy dữ liệu trực tiếp từ bộ nhớ RAM về - ngoại trừ việc tải lệnh đầu tiên - những lệnh và dữ liệu CPU yêu cầu sẽ thường nằm trong bộ nhớ Cache trước khi CPU hỏi tới chúng .

Tuy nhiên những chương trình lại không chạy như vậy , chúng sẽ thường nhảy từ vị trí bộ nhớ này tới vị trí bộ nhớ khác . Thách thức lớn nhất của Bộ phận điều khiển Cache chính là cố gắng phỏng đoán CPU sẽ nhảy tới địa chỉ nào , để tải nội dung của địa chỉ đó vào bên trong bộ nhớ Cache trước khi CPU yêu cầu nó để tránh trường hợp CPU phải đi tới bộ nhớ RAM của hệ thống , vì điều đó làm chậm hiệu suất làm việc của toàn bộ hệ thống . Nhiệm vụ này được gọi là Dự đoán rẽ nhánh và những CPU mới đều có đặc điểm này .

 

Những CPU hiện đại có tỉ lệ “hit” ít nhất là 80% , có nghĩa là ít nhất 80% thời gian CPU không cần truy cập trực tiếp tới bộ nhớ RAM của hệ thống và thay thế vào truy cập tới bộ nhớ Cache .

 

Tổ chức của bộ nhớ Cache

 

Bộ nhớ Cache được chia thành nhiều hàng bên trong , mỗi hàng chứa 16 tới 128 Byte tuỳ thuộc vào kiểu CPU . Những CPU chính hiện thời bộ nhớ Cache được tổ chức thành những hàng 64-Byte , do đó chúng ta sẽ xem sét bộ nhớ Cache dùng những hàng 64-Byte làm ví dụ trong mục này .

Page 11: Bộ nhớ Cache làm việc như thế nào

Do đó bộ nhớ Cache L2 512KB được chia thành 8.192 hàng . Nên nhớ rằng 1KB=210 hoặc 1024 Byte chứ không phải là 1.000 Byte , do đó chúng ta có phép toán 524.288 / 64 = 8.192 . Chúng ta sẽ xem xét CPU Single-Core với 512KB Cache L2 làm ví dụ . Trong hình này chúng ta minh hoạ tổ chức bên trong của bộ nhớ Cache .

Bộ nhớ Cache có thể làm việc với 03 cấu hình khác nhau : Ánh xạ trực tiếp , Liên kết đầy đủ và Liên kết tập hợp . Cấu hình Liên kết tập hợp được dùng hầu hết hiện nay , nhưng chúng ta sẽ tìm hiểm cả ba cấu hình làm việc như thế nào

 

Ánh xạ trực tiếp

Ánh xạ trực tiếp là cách đơn giản nhất để tạo thành bộ nhớ Cache . Trong cấu hình này bộ nhớ RAM chính được chia thành cùng với số hàng có bên trong bộ nhớ Cache . Nếu bạn có 1GB RAM , thì 1GB này sẽ được chia thành 8.192 khối ( chúng ta dùng với ví dụ đã đề cập trước đó ) , mỗi khối với dung lượng 128KB . Nếu hệ thống của bạn có 512MB RAM nó cũng vẫn được chia thành 8.192 khối , và mối khối lúc đó có 64KB . Chúng ta xem hình minh hoạ

 

Page 12: Bộ nhớ Cache làm việc như thế nào

 

Hình 8 : Ánh xạ trực tiếp làm việc như thế nào

 

Điều thuận lợi chính của Ánh xạ trực tiếp đó chính là cách cấu hình dễ thực hiện nhất .

Khi CPU yêu cầu địa chỉ từ bộ nhớ RAM ( ví dụ địa chỉ 1.000 ) , Bộ phận điều khiển Cache sẽ tải hàng ( 64 byte ) từ bộ nhớ RAM và lưu trữ hàng này trong bộ nhớ Cache ( có nghĩa là từ địa chỉ 1.000 tới 1.063 ) . Do đó nếu CPU lại hỏi nội dung của địa chỉ này hoặc một số địa chỉ tiếp theo sau địa chỉ đó ( có nghĩa là bất kì địa chỉ nào từ 1000 tới 1063 ) chúng sẽ đã có bên trong bộ nhớ Cache .

Vấn đề xảy ra nếu CPU cần hai địa chỉ mà có ánh xạ trên cùng một hàng trong bộ nhớ Cache , thì Cache “miss” sẽ xảy ra ( vấn đề này gọi là tranh chấp hoặc xung đột ) .Một ví

Page 13: Bộ nhớ Cache làm việc như thế nào

dụ tiếp theo nếu CPU yêu cầu địa chỉ 1000 và sau đó yêu cầu địa chỉ là 2000 thì Cache “miss” sẽ xảy ra bởi vì hai địa chỉ đó có cùng một khối ( 128KB đầu tiên ) . Do đó Bộ phận điều khiển Cache sẽ tải hàng từ địa chỉ 2000 và lưu trữ nó trong hàng đầu tiên của bộ nhớ Cache , nói đã xoá sạch nội dung trước , khi mà chúng ta ví dụ hàng từ địa chỉ 1000.

Vấn đề tiếp theo . Nếu chương trình có vòng lặp có chiều dài hơn 64-byte , thì sẽ xảy ra Cache “mis” cho toàn bộ khoảng thời gian lặp .

 

Ví dụ , nếu vòng lặp đi từ địa chỉ 1000 tới địa chỉ 1100 , CPU sẽ phải tải tất cả những lệnh trực tiếp từ bộ nhớ RAM trong toàn bộ thời gian chu trình lặp . Điều đó sẽ xảy ra vì Cache sẽ có nội dung từ địa chỉ 1000 cho tới 1063 và khi CPU yêu cầu nội dung từ địa chỉ 1100 nó sẽ phải đi tới bộ nhớ RAM , và Bộ phận điều khiển Cache sẽ phải tải từ địa chỉ 1100 tới 1163 . Khi CPU hỏi lại địa chỉ 1000 , nó sẽ phải đi lại tới bộ nhớ RAM , bởi vì Cache không có nội dung từ địa chỉ 1000 . Nếu vòng lặp thực hiện 1000 lần thì CPU sẽ phải đi tới bộ nhớ RAM 1000 lần .

 

Đó là nguyên nhân tại sao Cache Ánh xạ trực tiếp là cấu hình Cache hiệu quả tồi nhất và không được dùng trong lĩnh vực PC nữa .

Bộ nhớ Cache làm việc như thế nào ? - Phần cuối [28/09/2007 08:38]Tổ chức của bộ nhớ Cache

 

Liên kết đầy đủ

 

Cấu hình Liên kết đầy đủ là không phải là liên kết cố định giữa những hàng của bộ nhớ Cache và vị trí của bộ nhớ RAM hệ thống . Bộ phận điều khiển Cache có thể lưu trữ bất kì địa chỉ nào . Những vấn đề như đã đề cập trước đó đối với cấu hình Ánh xạ trực tiếp sẽ không xảy ra . Cấu hình này đem lại hiệu quả cao nhất , có nghĩa là tỉ lệ Cache “hit” cao nhất .

 

Những lại có một vấn đề xảy ra đo là mạch điều khiển vô cùng phức tạp , để theo vết những vị trí bộ nhớ được tải bên trong bộ nhớ Cache . Và đó là nguyên nhân tại sao lại dùng giải pháp ghép - được gọi là Liên kết tập hợp – và được dùng hầu hết hiện nay .

 

Liên kết tập hợp n-đường ( n- way )

 

Trong cấu hình này bộ nhớ Cache được chia thành vài khối ( những tập hợp ) , mỗi khối bao gồm “n” hàng .

Page 14: Bộ nhớ Cache làm việc như thế nào

Do đó Cache Liên kết tập hợp 4-đường sẽ bao gồm chứa 2.048 khối ( 8.192 hàng / 4 ) .  Liên kết tập hợp 2 - đường thì bộ nhớ Cache sẽ có 4.096 khối , mỗi khối gồm hai hàng . Liên kết tập hợp 16-đường bộ nhớ Cache sẽ có 512 khối , mỗi khối chứa 16 hàng . Ở đây chúng ta tiếp tục ví dụ này với bộ nhớ Cache L2 512KB chia thành 8.192 đường , mỗi đường có độ dài 64-byte . Tất nhiên phụ thuộc vào CPU mà số khối sẽ khác nhau

 

 

Hình 9 : Cấu hình bộ nhớ Cache L2 512KB với 04 đường liên kết

Sau đó bộ nhớ RAM chính được chia thành cùng số khối có trong bộ nhớ Cache . Với ví dụ 512KB Cache với 04 đường liên kết thì bộ nhớ RAM chính được chia thành 2.048 khối , cùng với số khối có trong bộ nhớ Cache . Mỗi khối bộ nhớ được liên kết như là Ánh xạ trực tiếp trong bộ nhớ Cache . Với bộ nhớ RAM là 1GB , bộ nhớ được chia thành 2.048 khối , mỗi khối chứa 512KB , như hình dưới đây .

 

 

   

Page 15: Bộ nhớ Cache làm việc như thế nào

Hình 10 : Cấu hình bộ nhớ Cache L2 512KB với 04 đường liên kết  

Như bạn thấy việc Ánh xạ cũng tương tự như những gì đã xảy ra với cấu hình Cache Ánh xạ trực tiếp , nhưng chỉ có điều khác là mỗi khối bộ nhớ bây giờ có nhiều hơn một hàng trong bộ nhớ Cache . Mỗi hàng có thể giữ nội dung bất kì địa chỉ nào bên trong khối được Ánh xạ . Với bộ nhớ Cache có 04 đường liên kết ( 4-way ) thì mỗi khối bộ nhớ RAM được Ánh xạ bằng 04 dòng trong bộ nhớ Cache .

 

Page 16: Bộ nhớ Cache làm việc như thế nào

Cấu hình kiểu như vậy gần với những vấn đề đã đề cập bằng bộ nhớ Cache Ánh xạ trực tiếp ( cả hai vấn đề xung độ và vấn đề vòng lặp chúng tôi đã mô tả ở phần trước) . Tại cùng một thời điểm Cache Liên kết tập hợp dễ dàng thực hiện hơn so với Cache Liên kết đầy đủ , như vậy mạch Logic sẽ đơn giản hơn .

Tấy nhiên vẫn còn một số hạn chế trong mỗi khối của bộ nhớ sử dụng với mỗi khối của bộ nhớ RAM . Ví dụ như cấu hình 4-way , sau khi cả 04 hàng của một khối Cache được dùng , thì Bộ phận điều khiển Cache sẽ phải giải phóng một hàng trong đó để lưu trữ lệnh tiếp theo tải từ cùng một khối nhớ RAM .

Khi tăng số liên kết ví dụ từ 4-way lên 8-way , chúng ta sẽ có nhiều hàng sẵn trong một khối Cache , nhưng nếu chúng ta giữ cùng một số lượng bộ nhớ Cache thì kích thước của mỗi khối bộ nhớ RAM , được đại diện trong bộ nhớ Cache , tăng lên . Tiếp tục ví dụ từ 4-way lên 8-way thì sẽ làm cho bộ nhớ RAM 1GB chia thành 1.024 khối , mỗi khối với dung lượng 1MB .

Có rất nhiều vấn đề tranh luận về việc làm thế nào để cân bằng giữa số đường liên kết và kích thước khối của bộ nhớ và cũng chưa có câu trả lời cuối cùng . Intel và AMD dùng cấu hình khác nhau , chúng ta sẽ xem tiếp trong những mục sau .

Như vậy vấn đề gì xảy ra nếu bạn có bộ nhớ Cache lớn hơn ? Hãy quay lại ví dụ trên , nếu tăng bộ nhớ Cache L2 từ 512MB tới 1MB ( chỉ có một cách là thay thế CPU khác ) , điều gì sẽ xảy ra khi bạn có 16.384 hàng , mỗi hàng 64-byte trong bộ nhớ Cache , nó sẽ cho chúng ta 4.096 liên kết ( mỗi liên kết gồm 04 hàng ) . Với bộ nhớ RAM 1GB sẽ được chia thành 4.96 khối , mỗi khối có dung lượng 256KB . Khi mà kích thước của khối nhớ RAM giảm đi thì đồng nghĩa với việc tăng cơ hội những dữ liệu được yêu cầu sẽ được nằm trong bộ nhớ Cache – hay nói một cách khác tăng kích thước bộ nhớ Cache thì Cache “miss” giảm đi .

 

Tuy nhiên tăng bộ nhớ Cache đôi khi lại không đảm bảo việc tăng hiệu suất làm việc .Tăng kích thước bộ nhớ Cache đảm bảo rằng có nhiều dữ liệu sẽ được có trong Cache , nhưng câu hỏi là CPU có sử dụng những dữ liệu phụ hay không .

Ví dụ , CPU Single-Core với bộ nhớ Cache L2 là 4MB . Nếu CPU chỉ dùng 1MB mà không dùng nhiều tới 3MB khác ( có nghĩa là hầu hết mọi truy cập những lệnh chỉ trong 1MB và 3MB khác CPU không gọi những lệnh trong Cache nhiều ) , thì CPU sẽ làm việc với hiệu suất tương tự như những CPU với 2MB Cache thậm trí chỉ như 1MB Cache .

 

Cấu hình bộ nhớ Cache trong những CPU hiện thời

 

Bên dưới là bảng tham khảo bao gồm những tính năng kỹ thuật của bộ nhớ Cache trong những CPU có sẵn trên thị trường hiện nay

 

CPU Cache lệnh L1 Cache dữ liệu L1 Cache L2

Page 17: Bộ nhớ Cache làm việc như thế nào

Athlon 64

64 KB

2-way

Mỗi hàng 64-byte

Đường dữ liệu 128-bit với L2

Đường dữ liệu 128-bit với

Fetch Unit

64 KB

2-way

Mỗi hàng 64-byte

Đường dữ liệu 128-

bit với L2

512 KB hoặc 1 MB

16-way

Mỗi hàng 64-byte

Đường dữ liệu 128-bit với

Cache dữ liệu L1

Đường dữ liệu 128-bit với

Cache lệnh L1

Athlon 64 FX

64 KB / lõi

2-way

Mỗi hàng 64-byte

Đường dữ liệu 128-bit với L2

Đường dữ liệu 128-bit với

Fetch Unit

64 KB / lõi

2-way

Mỗi hàng 64-byte

Đường dữ liệu 128-

bit với L2

1 MB / lõi

16-way

Mỗi hàng 64-byte

Đường dữ liệu 128-bit với

Cache dữ liệu L1

Đường dữ liệu 128-bit với

Cache lệnh L1

Athlon 64 X2

64 KB / lõi

2-way

Mỗi hàng 64-byte

Đường dữ liệu 128-bit với L2

Đường dữ liệu 128-bit với

Fetch Unit

64 KB / lõi

2-way

Mỗi hàng 64-byte

Đường dữ liệu 128-

bit với L2

512 KB hoặc 1 MB / lõi

16-way

Mỗi hàng 64-byte

Đường dữ liệu 128-bit với

Cache dữ liệu L1

Đường dữ liệu 128-bit với

Cache lệnh L1

Sempron (sockets

754 và AM2)

64 KB

2-way

Mỗi hàng 64-byte

Đường dữ liệu 128-bit với L2

Đường dữ liệu 128-bit với

Fetch Unit

64 KB

2-way

Mỗi hàng 64-byte

Đường dữ liệu 128-

bit với L2

128 KB hoặc 256 KB

16-way

Mỗi hàng 64-byte

Đường dữ liệu 128-bit với

Cache dữ liệu L1

Đường dữ liệu 128-bit với

Cache lệnh L1

Opteron 64 KB / lõi

2-way

Đường dữ liệu 128-bit với L2

64 KB / lõi

2-way

Mỗi hàng 64-byte

1 MB / lõi

16-way

Mỗi hàng 64-byte

Page 18: Bộ nhớ Cache làm việc như thế nào

Đường dữ liệu 128-bit với

Fetch Unit

Đường dữ liệu 128-

bit với L2

Đường dữ liệu 128-bit với

Cache dữ liệu L1

Đường dữ liệu 128-bit với

Cache lệnh L1

Pentium 4 N/A *

8 KB

4-way

Mỗi hàng 64-byte

Đường dữ liệu 256-

bit với L2

256 KB, 512 MB hoặc 1 MB

8-way

Mỗi hàng 128-byte

Đường dữ liệu 64-bit với

Fetch Unit

Đường dữ liệu 256-bit với

Cache dữ liệu L1

Pentium D N/A *

16 KB

4-way

Mỗi hàng 64-byte

Đường dữ liệu 256-

bit với L2

1 MB hoặc 2 MB / lõi

8-way

Mỗi hàng 128-byte

Đường dữ liệu 64-bit với

Fetch Unit

Đường dữ liệu 256-bit với

Cache dữ liệu L1

Core 2 Duo

32 KB

Mỗi hàng 64-byte

Đường dữ liệu 256-bit với

Fetch Unit

32 KB

Mỗi hàng 64-byte

Đường dữ liệu 256-

bit với L2

2 MB hoặc 4 MB

8-way

Mỗi hàng 64-byte

Đường dữ liệu 256-bit với

Cache dữ liệu L1

Pentium Dual

Core

32 KB

Mỗi hàng 64-byte

Đường dữ liệu 256-bit với

Fetch Unit

32 KB

Mỗi hàng 64-byte

Đường dữ liệu 256-

bit với L2

1 MB

8-way

Mỗi hàng 64-byte

Đường dữ liệu 256-bit với

Cache dữ liệu L1

 

Page 19: Bộ nhớ Cache làm việc như thế nào

*   Những bộ vi xử lí này có 150KB Trace Cache . Cache này được nằm giữa Bộ phận giải mã và Bộ phận thực hiện lệnh ( Execution Unit ) .Như vậy Bộ phận mang lệnh về , Fetch Unit , sẽ lấy dữ liệu trực tiếp từ bộ nhớ Cache L2 .

 Bảng trên không đề cập tới những bộ vi xử lí Xeon và Celeron bởi vì có một vài phiên bản Xeon và Celeron dựa trên những cấu trúc khác nhau .Những Celeron và Xeon dựa trên vi cấu trúc Netburst ( có nghĩa là dựa trên Pentium 4 ) sẽ có cùng tính năng kỹ thuật chính như Pentium 4 với số lượng bộ nhớ Cache L2 khác nhau .Những Celeron và Xeon dựa trên vi cấu trúc Core ( có nghĩa là dựa trên Core 2 Duo ) cũng sẽ có những tính năng kỹ thuật chính như Core 2 Duo những với số lượng bộ nhớ Cache khác nhau .