Memory Hierarchy¶
Phân cấp bộ nhớ từ register, cache, DRAM đến storage, đánh đổi giữa tốc độ, dung lượng và chi phí.
Bản ôn tập
Trang này là bản ôn tập ngắn gọn, sẽ mở rộng sau. Locality, AMAT và cache nằm ở Cache.
1. Bức tranh tổng thể¶
Không có loại bộ nhớ nào vừa nhanh, vừa lớn, vừa rẻ. Máy tính ghép nhiều loại thành các cấp, mỗi cấp nhỏ hơn và nhanh hơn cấp dưới, để phần lớn truy cập rơi vào cấp nhanh nhờ locality.
| Cấp | Công nghệ | Dung lượng | Độ trễ (cỡ) |
|---|---|---|---|
| Register | Mạch trong CPU | ~1 KB | < 1 ns |
| Cache (L1 - L3) | SRAM | KB đến vài chục MB | 1 - 20 ns |
| DRAM | DRAM | GB | 60 - 100 ns |
| SSD (NVMe) | Flash | TB | 10 - 100 µs |
| HDD | Đĩa từ | TB | vài ms |
Chi tiết về locality (temporal, spatial), hit/miss và công thức AMAT: xem Cache.
2. DRAM cơ bản¶
DRAM lưu mỗi bit bằng 1 transistor + 1 tụ điện. Tụ tự xả nên phải refresh định kỳ (thường mỗi 64 ms). Đổi lại, ô nhớ nhỏ nên dung lượng lớn, giá rẻ.
So với SRAM của cache (6 transistor mỗi bit, không cần refresh): SRAM nhanh hơn nhưng chiếm nhiều diện tích và đắt hơn, nên chỉ dùng cho dung lượng nhỏ.
Tổ chức và truy cập¶
Bên trong, DRAM là các bank, mỗi bank là một mảng ô nhớ gồm hàng (row) và cột (column). Một lần truy cập đi qua ba lệnh:
- ACTIVATE: row decoder chọn một hàng, cả hàng được chép vào row buffer.
- READ / WRITE: chọn cột trong row buffer.
- PRECHARGE: đóng hàng để có thể mở hàng khác.
- Row hit: hàng cần truy cập đang mở trong row buffer, chỉ cần READ, nhanh.
- Row miss: phải PRECHARGE rồi ACTIVATE hàng khác, chậm hơn cỡ 3 lần.
- Vì vậy truy cập tuần tự (cùng hàng) nhanh hơn truy cập ngẫu nhiên, và memory controller sắp xếp lại yêu cầu để tăng row hit.
Các thuật ngữ hay gặp¶
| Thuật ngữ | Ý nghĩa |
|---|---|
| Channel | Một đường dữ liệu độc lập giữa memory controller và DRAM (thường 64 bit); nhiều channel cho băng thông cao hơn |
| Rank | Tập chip DRAM cùng được truy cập trên một channel |
| Bank | Mảng ô nhớ trong chip, các bank có thể hoạt động song song |
| DDR4 / DDR5 | Thế hệ DRAM chuẩn; ví dụ DDR5-4800 cho khoảng 38 GB/s mỗi channel |
| Latency và bandwidth | Độ trễ của một truy cập và lượng dữ liệu truyền mỗi giây; hai chỉ số độc lập nhau |
3. Virtual memory¶
Mỗi tiến trình thấy một không gian địa chỉ ảo riêng; phần cứng cùng hệ điều hành dịch sang địa chỉ vật lý của RAM. Lợi ích:
- Cô lập: tiến trình không đọc/ghi được bộ nhớ của tiến trình khác.
- Đơn giản hóa: chương trình được nạp ở bất kỳ đâu trong RAM, không cần biết vị trí thật.
- Vượt dung lượng RAM: trang ít dùng được đẩy ra đĩa (swap).
- Chia sẻ có kiểm soát: nhiều tiến trình ánh xạ chung một trang (thư viện dùng chung).
Page và page table¶
Bộ nhớ được chia thành các page (thường 4 KB); trang vật lý tương ứng gọi là frame. Địa chỉ ảo tách thành VPN (số trang ảo) và offset trong trang; chỉ VPN cần dịch, offset giữ nguyên.
Page table lưu ánh xạ VPN → frame. Mỗi mục (PTE) chứa số frame cùng các bit: valid, quyền đọc/ghi/thực thi, user/supervisor, accessed, dirty. Một page table phẳng cho không gian 64 bit sẽ quá lớn, nên dùng page table nhiều cấp: chỉ cấp tồn tại những vùng thực sự dùng. Ví dụ RISC-V Sv39 dùng 3 cấp, mỗi cấp 512 mục (9 bit), cộng offset 12 bit; thanh ghi satp trỏ tới bảng gốc.
TLB¶
Đi hết page table cần nhiều lần đọc bộ nhớ (3 lần với Sv39) cho mỗi truy cập, quá đắt. TLB (Translation Lookaside Buffer) là cache nhỏ, nhanh của các bản dịch gần đây:
- TLB hit: có sẵn frame, không cần đi page table.
- TLB miss: phải page walk (đi page table, bằng phần cứng hoặc phần mềm tùy kiến trúc), rồi nạp kết quả vào TLB.
Page fault¶
Nếu PTE không hợp lệ (trang chưa có trong RAM, đang bị swap, hoặc truy cập sai quyền), CPU phát sinh page fault và hệ điều hành xử lý: nạp trang từ SSD/HDD hoặc báo lỗi cho tiến trình (segmentation fault). Page fault chậm hơn truy cập DRAM hàng nghìn lần.
Đường truy cập tổng hợp¶
Cache đánh chỉ mục theo địa chỉ nào?
Cache có thể dùng địa chỉ ảo (VIVT), địa chỉ vật lý (PIPT) hoặc kết hợp (VIPT: index bằng địa chỉ ảo, tag bằng địa chỉ vật lý). VIPT cho phép tra cache song song với tra TLB, nên được dùng phổ biến cho L1.
4. Memory ordering và memory model¶
Trong CPU đa nhân, thứ tự các thao tác nhớ mà core khác nhìn thấy có thể khác thứ tự trong chương trình, vì có store buffer, cache và thực thi out-of-order. Memory model là quy ước phần cứng cam kết với phần mềm về điều này.
Ví dụ: store buffering¶
Cả hai core cùng ghi một biến rồi đọc biến còn lại. Vì store còn nằm trong store buffer chưa ra bộ nhớ chung, cả hai đều có thể đọc giá trị cũ.
Các mô hình¶
| Mô hình | Ý nghĩa | Kiến trúc |
|---|---|---|
| Sequential consistency (SC) | Mọi core thấy mọi thao tác theo cùng một thứ tự toàn cục, nhất quán với thứ tự chương trình. Dễ suy luận nhất | Mô hình lý tưởng, không CPU nào cung cấp mặc định |
| TSO (Total Store Order) | Chỉ cho phép store → load bị đảo thứ tự (do store buffer) | x86 |
| Weak / relaxed | Cho phép đảo nhiều loại thao tác nếu không có rào chắn | Arm, RISC-V (RVWMO) |
Mô hình càng yếu thì phần cứng càng dễ tối ưu, nhưng lập trình viên và compiler phải chèn rào chắn đúng chỗ.
Công cụ đồng bộ¶
- Fence / barrier: ép thứ tự giữa các thao tác trước và sau nó (
fencecủa RISC-V,dmbcủa Arm,mfencecủa x86). - Atomic: thao tác đọc-sửa-ghi không thể bị chen ngang, như
amoaddhay cặplr/sccủa RISC-V. - Acquire / release: biến thể nhẹ hơn fence đầy đủ, chỉ ràng buộc thứ tự một chiều; là nền tảng của khóa (lock) và
std::atomictrong C/C++.
5. Tóm tắt¶
| Khái niệm | Vấn đề nó giải quyết |
|---|---|
| Phân cấp bộ nhớ | Đạt tốc độ gần cấp nhanh nhất với dung lượng và giá của cấp rẻ nhất |
| DRAM (row buffer, bank) | Bộ nhớ chính dung lượng lớn, giá rẻ; row hit nhanh hơn row miss |
| Virtual memory | Cô lập tiến trình, đơn giản hóa cấp phát, vượt dung lượng RAM |
| Page table nhiều cấp | Giảm kích thước bảng ánh xạ |
| TLB | Tránh đi page table cho mỗi truy cập |
| Memory model và fence | Xác định và kiểm soát thứ tự truy cập nhớ giữa các core |
Liên quan¶
- Cache: locality, AMAT, tổ chức cache và coherence.
- Pipeline: bộ nhớ chậm làm pipeline stall.
- RISC-V: Sv39, RVWMO và các lệnh fence/atomic.
- CPU Virtualization: dịch địa chỉ hai tầng (stage-2) khi ảo hóa.
- RISC-V Server SoC Spec: yêu cầu bộ nhớ và IOMMU ở mức SoC.