← Về danh sách
Điện toán & Nhúng
#메모리인터리빙#뱅크#대역폭#메모리성능#128회
Cập nhật lần cuối · 2026-09-06

Xen kẽ bộ nhớ (Memory Interleaving)

1. Tổng quan

A. Định nghĩa

Xen kẽ bộ nhớ (Memory Interleaving) là kỹ thuật chia bộ nhớ vật lý thành nhiều bank hoặc kênh (Channel) độc lập, phân bố luân phiên các địa chỉ liên tiếp vào các bank khác nhau, và truy cập nhiều bank đồng thời, chồng lấp (overlap) để nâng băng thông hiệu dụng (effective bandwidth) của bộ nhớ.

Ý tưởng cốt lõi của xen kẽ bộ nhớ là ‘đừng chờ từng cái theo thứ tự, hãy xử lý đồng thời ở nhiều quầy’. Sau mỗi lần truy cập, DRAM phải tiêu tốn một khoảng thời gian nhất định cho việc nạp lại điện tích ô nhớ (precharge), kích hoạt hàng (row activation), v.v. trước khi nhận lần truy cập tiếp theo; thời gian phục hồi này thường gọi là thời gian chu kỳ bank (bank cycle time) hay tRC. Nếu chỉ dùng một module bộ nhớ, CPU không nhận được dữ liệu nào trong thời gian phục hồi này và phải chờ (stall). Xen kẽ chia bộ nhớ thành nhiều bank rồi bố trí luân phiên các địa chỉ liên tiếp (0, 1, 2, 3…) vào các bank (0→bank0, 1→bank1, 2→bank2, 3→bank3, 4→lại bank0…). Khi đó, lúc đọc dữ liệu liên tiếp, hoạt động của nhiều bank chồng lên nhau trên trục thời gian (pipeline), nên trong khi một bank chờ phục hồi thì bank khác đã xuất dữ liệu tiếp theo.

Cấu trúc này có thể ví như mở đồng thời nhiều quầy giao dịch ngân hàng để phân tán hàng chờ. Nếu chỉ có một quầy, người sau buộc phải chờ người trước xong việc, nhưng nếu có bốn quầy thì bốn người được xử lý đồng thời, tổng thông lượng (throughput) về lý thuyết tăng tới bốn lần. Tuy nhiên, điểm quan trọng là độ trễ (latency) — tức thời gian tuyệt đối từ khi một người vào quầy đến khi xong việc — không hề giảm. Thứ mà xen kẽ cải thiện không phải là độ trễ của từng lần truy cập mà là số lần truy cập xử lý được trong một đơn vị thời gian (băng thông), và cần phân biệt rõ điều này với cách bộ nhớ đệm (cache) xử lý độ trễ sẽ trình bày sau.

B. Bối cảnh ra đời và sự cần thiết

Tốc độ hoạt động của CPU đã tăng vọt nhờ định luật Moore, trong khi tốc độ truy cập DRAM chỉ cải thiện tương đối chậm, khiến khoảng cách này nới rộng mỗi năm. Khoảng cách hiệu năng tích lũy này được gọi là bức tường bộ nhớ (Memory Wall), và dù CPU nhanh đến đâu, nếu không được cấp dữ liệu kịp thời thì các đơn vị tính toán sẽ nhàn rỗi, tạo thành nút thắt. Đặc biệt, những công việc quét lượng lớn dữ liệu liên tiếp như tính toán mảng và ma trận, xử lý đa phương tiện streaming, kết xuất đồ họa, phép toán tensor trong học sâu thì nút thắt này càng chí mạng.

Xen kẽ bộ nhớ là cách tiếp cận bảo đảm băng thông thông qua tính song song (parallelism) thay vì làm cho bản thân linh kiện nhanh hơn. Tốc độ linh kiện (tRC) chạm tới giới hạn vật lý, nhưng tăng số bank để tăng số truy cập xử lý đồng thời thì tương đối rẻ. Vì lý do này, xen kẽ khởi nguồn từ thiết kế bộ nhớ của các máy tính lớn thời kỳ đầu và ngày nay đã trở thành nguyên lý cơ bản của hầu như mọi phân hệ bộ nhớ hiệu năng cao, từ DIMM đa kênh, nhóm bank nội bộ của DDR cho đến HBM của GPU.

2. Nguyên lý hoạt động và cấu trúc tổng thể

Cấu trúc tổng thể có thể hiểu theo luồng ‘phân tách địa chỉ → chọn bank → truy cập song song → tổng hợp kết quả’. Bộ điều khiển bộ nhớ nhận địa chỉ vật lý mà CPU yêu cầu và dùng các bit cụ thể của địa chỉ đó để quyết định gửi tới bank nào. Trong xen kẽ bit thấp, các bit thấp nhất của địa chỉ trở thành số hiệu bank, còn các bit cao còn lại trở thành độ lệch (offset) bên trong bank.

flowchart LR
  A["Địa chỉ liên tiếp<br/>0,1,2,3,4,5…"] --> D{"Bộ giải mã địa chỉ<br/>(chọn bank bằng bit thấp)"}
  D --> B0["Bank0: 0,4,8,12…"]
  D --> B1["Bank1: 1,5,9,13…"]
  D --> B2["Bank2: 2,6,10,14…"]
  D --> B3["Bank3: 3,7,11,15…"]
  B0 --> M["Bus dữ liệu<br/>(tổng hợp, gửi CPU)"]
  B1 --> M
  B2 --> M
  B3 --> M
  style A fill:#e8f0fe,stroke:#2f6fed,stroke-width:2px
  style M fill:#e6f4ea,stroke:#137333,stroke-width:2px

Như hình trên, các địa chỉ liên tiếp được phân bố vòng tròn vào 4 bank, nên khi truy cập tuần tự, bốn bank hoạt động song song và chồng lấp, và độ trễ phục hồi của mỗi bank được che giấu phía sau hoạt động của các bank khác (latency hiding). Tức là, chỉ với một bank thì mỗi tRC chỉ xuất được dữ liệu một lần, nhưng với xen kẽ 4 chiều (4-way) sẽ hình thành pipeline trong đó dữ liệu tuần tự chảy ra sau mỗi khoảng 1/4 tRC.

Hiệu ứng pipeline này càng rõ khi nhìn trên trục thời gian. Sơ đồ tuần tự dưới đây cho thấy quá trình 4 bank chồng lấp thời gian phục hồi để xuất dữ liệu liên tiếp.

sequenceDiagram
  participant C as Bộ điều khiển bộ nhớ
  participant B0 as Bank0
  participant B1 as Bank1
  participant B2 as Bank2
  participant B3 as Bank3
  C->>B0: Yêu cầu truy cập địa chỉ 0
  C->>B1: Yêu cầu truy cập địa chỉ 1
  C->>B2: Yêu cầu truy cập địa chỉ 2
  C->>B3: Yêu cầu truy cập địa chỉ 3
  B0-->>C: Trả dữ liệu 0(sau đó phục hồi tRC)
  B1-->>C: Trả dữ liệu 1(B0 đang phục hồi)
  B2-->>C: Trả dữ liệu 2(B1 đang phục hồi)
  B3-->>C: Trả dữ liệu 3(B2 đang phục hồi)
  C->>B0: Truy cập địa chỉ 4(B0 đã phục hồi xong)

Điểm cốt lõi là trong khi bank0 phục hồi sau khi xuất dữ liệu 0, bộ điều khiển không nhàn rỗi mà lần lượt nhận dữ liệu từ bank1, 2, 3. Khi bank0 gần phục hồi xong thì đã có thể đưa yêu cầu địa chỉ 4 vào, nên trong truy cập tuần tự lý tưởng, độ trễ phục hồi của bank được che hoàn toàn và bus truyền dữ liệu gần như không nghỉ.

3. Các loại phương thức xen kẽ

Xen kẽ được chia thành hai loại lớn là bit thấp (low-order) và bit cao (high-order) tùy theo phần nào của địa chỉ được dùng để chọn bank. Hai loại này không chỉ khác nhau về triển khai mà còn thể hiện khác biệt về triết lý thiết kế giữa hiệu năng và độ tin cậy.

Xen kẽ bit thấp (Low-order Interleaving) dùng các bit thấp nhất của địa chỉ làm số hiệu bank. Kết quả là các địa chỉ liên tiếp tự nhiên trải ra nhiều bank, nên tính song song giữa các bank được tối đa hóa trong các mẫu truy cập như quét mảng tuần tự. Nếu mục đích là tăng băng thông truy cập tuần tự thì xen kẽ bit thấp gần như là đáp án đúng. Phần lớn các hệ thống bộ nhớ hướng hiệu năng áp dụng phương thức này làm mặc định.

Xen kẽ bit cao (High-order Interleaving) dùng các bit cao nhất của địa chỉ làm số hiệu bank. Khi đó, một bank đảm nhận trọn một khối địa chỉ lớn liên tiếp. Tính song song về hiệu năng giảm, nhưng dù một bank cụ thể bị hỏng thì chỉ vùng địa chỉ do bank đó đảm nhận bị ảnh hưởng, nên có lợi cho cô lập lỗi (fault isolation) và mở rộng, thay thế module theo đơn vị bank. Ví dụ, trong các kịch bản rút module bộ nhớ để tăng dung lượng hoặc vô hiệu hóa bank bị lỗi và vận hành với phần còn lại, xen kẽ bit cao thuận tiện về mặt quản lý.

Phương thức Bit chọn bank Bố trí dữ liệu Điểm mạnh Điểm yếu
Xen kẽ bit thấp Bit địa chỉ thấp Phân tán địa chỉ liên tiếp vào nhiều bank Tối đa hóa băng thông truy cập tuần tự Ảnh hưởng rộng khi bank hỏng
Xen kẽ bit cao Bit địa chỉ cao Khối liên tiếp tập trung vào một bank Dễ cô lập lỗi, mở rộng module Tính song song truy cập tuần tự thấp

Hệ thống thực tế đôi khi kết hợp cả hai. Dùng ánh xạ nhiều tầng — chọn kênh bằng vài bit cao và chọn bank bằng vài bit thấp — để dung hòa hiệu năng và khả năng quản lý là thiết kế phổ biến của các bộ điều khiển bộ nhớ hiện đại.

4. Đặc tính hiệu năng và xung đột bank

Hiệu quả của xen kẽ phụ thuộc lớn vào mẫu truy cập. Trường hợp lý tưởng nhất là truy cập tuần tự đọc lần lượt các địa chỉ liên tiếp như đã thấy, khi đó xen kẽ N chiều (N-way) về lý thuyết cho băng thông gần gấp N lần. Ví dụ, nếu thời gian phục hồi của một bank là 60ns và xen kẽ 4 chiều, thì trong truy cập tuần tự lý tưởng cứ mỗi 15ns sẽ có một word chảy ra, thông lượng hiệu dụng tăng đáng kể (thực tế không đạt giá trị lý tưởng do độ rộng bus và chi phí truyền).

Vấn đề nằm ở truy cập ngẫu nhiên hoặc truy cập có khoảng cách địa chỉ (stride) cụ thể. Nếu tình cờ các địa chỉ truy cập đều được ánh xạ vào cùng một bank, nhiều truy cập sẽ được xử lý nối tiếp tại một bank và tính song song biến mất. Hiện tượng này gọi là xung đột bank (bank conflict). Ví dụ điển hình là truy cập với stride là lũy thừa của 2. Chẳng hạn, trong xen kẽ 4 chiều, truy cập có stride là bội của 4 (địa chỉ 0, 4, 8, 12…) đều chỉ hướng tới bank0, khiến tính song song sụp đổ hoàn toàn và hiệu năng rơi xuống mức một bank. Mẫu bệnh lý này thường xảy ra khi quét ma trận theo cột (column-major).

Để giảm nhẹ vấn đề này, trong thực tế người ta chọn số bank gần với số nguyên tố (prime number), hoặc dùng kỹ thuật xen kẽ XOR/hoán vị (permutation) trộn các bit địa chỉ bằng XOR hoặc hàm băm để ánh xạ vào bank. Về phía phần mềm, các tối ưu hóa như chèn đệm (padding) mảng để stride không là bội của số bank, hoặc chia khối (tiling) phép toán ma trận để cục bộ hóa mẫu truy cập cũng được dùng kèm. Tức là hiệu năng thực tế của xen kẽ được quyết định đồng thời bởi ánh xạ phần cứng và mẫu truy cập phần mềm.

5. So sánh quan hệ với cache và phân cấp bộ nhớ

Thứ thường được nhắc cùng với xen kẽ là cache, nhưng vấn đề mà hai kỹ thuật xử lý về căn bản là khác nhau. Cache đặt dữ liệu hay dùng vào bộ lưu trữ tốc độ cao gần CPU để giảm độ trễ (latency) của từng lần truy cập. Ngược lại, xen kẽ vận hành song song nhiều bank để tăng băng thông (bandwidth) trên một đơn vị thời gian. Hai thứ này không phải vật thay thế mà là vật bổ trợ lẫn nhau.

Góc nhìn Cache Xen kẽ bộ nhớ
Nút thắt xử lý Độ trễ truy cập (latency) Băng thông truy cập (bandwidth)
Nguyên lý cốt lõi Tái sử dụng dựa trên tính cục bộ (locality) Chồng lấp dựa trên tính song song của bank
Tình huống hiệu quả cao Truy cập lặp lại (temporal locality) Truy cập tuần tự khối lượng lớn (streaming)
Hạn chế Vô hiệu khi cache miss Vô hiệu khi xung đột bank

Trong hệ thống thực tế, tại thời điểm cache bị miss, việc nạp dòng cache (cache line fill) từ bộ nhớ để lấp miss đó là truy cập tuần tự điển hình lấy nhiều word liên tiếp, nên băng thông của xen kẽ phát huy hiệu quả trọn vẹn. Tức là cache đảm nhận việc khi nào đi đến bộ nhớ, còn xen kẽ đảm nhận việc khi đã đến thì lấp đầy nhanh đến mức nào. Hai kỹ thuật phải phối hợp thì việc giảm nhẹ bức tường bộ nhớ mới hoàn chỉnh.

6. Chuyên sâu: Xen kẽ trong bộ nhớ hiện đại

Ngày nay, xen kẽ đã mở rộng thành tính song song đa tầng hoạt động đồng thời ở nhiều lớp. Trước hết, DDR SDRAM đã có sẵn nhiều bank bên trong một chip (ví dụ: DDR4 có nhiều bank trong mỗi nhóm bank) và dùng xen kẽ bank để che độ trễ phục hồi khi truy cập liên tiếp. Bên trên đó, bộ điều khiển bộ nhớ áp dụng xen kẽ kênh (đa kênh) gộp nhiều DIMM và kênh. Sự cải thiện băng thông mà cấu hình dual, quad channel thường quảng cáo chính là kết quả của xen kẽ theo đơn vị kênh. Ví dụ, dual channel phân tán dữ liệu vào hai kênh để về lý thuyết cung cấp băng thông khoảng gấp 2 lần so với single channel (lợi ích thực tế của ứng dụng nhỏ hơn tùy mẫu truy cập).

Trong lĩnh vực GPU và bộ tăng tốc AI, HBM (High Bandwidth Memory) là ví dụ đẩy nguyên lý xen kẽ đến tột cùng. HBM xếp chồng nhiều die DRAM theo chiều dọc (kết nối bằng TSV) và có giao diện rất rộng cỡ hàng nghìn bit cùng nhiều kênh độc lập, đạt băng thông từ hàng trăm GB/s đến cấp TB/s trên một stack. Trong các tải công việc phải đọc streaming các tensor khổng lồ như huấn luyện học sâu, nếu không có tính song song kênh và bank này thì các đơn vị tính toán sẽ rơi vào tình trạng đói dữ liệu (starvation). Trong bối cảnh này, xen kẽ không chỉ là một kỹ thuật cổ điển đơn giản mà đang được nhìn nhận lại như chiến lược băng thông cốt lõi của phần cứng thời đại AI.

Trong máy chủ đa socket NUMA (Non-Uniform Memory Access), xen kẽ tạo ra đánh đổi giữa hiệu năng và tính cục bộ. Nếu xen kẽ bộ nhớ của nhiều socket để dùng băng thông đồng đều thì nút thắt ở một node cụ thể giảm, nhưng truy cập bị phân tán sang node từ xa nên lợi thế tính cục bộ có thể yếu đi. Vì vậy, hệ điều hành và hypervisor cho phép chọn có xen kẽ hay không theo tính chất tải công việc, như chính sách interleave của numactl. Tải công việc batch và phân tích hướng băng thông thường có lợi với xen kẽ, còn tải công việc nhạy độ trễ và có tính cục bộ cao thường có lợi với bố trí cục bộ trên node.

7. Lưu ý và hàm ý

Từ góc nhìn Kỹ sư chuyên nghiệp (Professional Engineer), xen kẽ bộ nhớ có thể được tổng hợp và vận dụng như sau.

  1. Nguyên tắc thiết kế về sự phù hợp mẫu truy cập: Xen kẽ tối đa hóa băng thông trong truy cập tuần tự nhưng trở nên vô hiệu do xung đột bank với stride lũy thừa của 2, v.v. Do đó, cốt lõi của thiết kế hiệu năng là áp dụng đồng thời căn chỉnh và đệm cấu trúc dữ liệu, chia khối ma trận, ánh xạ bank XOR để làm khớp tính song song phần cứng với mẫu truy cập phần mềm.

  2. Phối hợp phân tầng giữa băng thông và độ trễ: Xen kẽ (băng thông) và cache (độ trễ) bổ trợ lẫn nhau, nên việc tinh chỉnh hiệu năng hệ thống không nên chỉ nhắm vào một bên mà phải đo đồng thời tỷ lệ cache miss và mức sử dụng băng thông bộ nhớ để xác định bản chất của nút thắt rồi mới tiếp cận.

  3. Tầm quan trọng chiến lược trong tải công việc AI và HPC: Tính song song đa kênh, đa bank của HBM quyết định băng thông streaming tensor của học sâu và tính toán khoa học. Khi chọn bộ tăng tốc và thiết kế hệ thống, cần góc nhìn roofline xem xét đồng thời không chỉ khối lượng tính toán lý thuyết (FLOPS) mà cả băng thông bộ nhớ và cường độ tính toán (arithmetic intensity).

  4. Đánh đổi chính sách bố trí trong môi trường NUMA: Trong môi trường đa socket, đa node, xen kẽ là lựa chọn giữa cân bằng băng thông và mất tính cục bộ, nên cần profiling xem tải công việc hướng băng thông hay hướng độ trễ và tính cục bộ rồi mới quyết định chính sách bộ nhớ của OS (interleave vs. local).

  5. Cân bằng với độ tin cậy và khả năng mở rộng: Về hiệu năng thuần túy, xen kẽ bit thấp có lợi hơn, nhưng trong các hệ thống nhiệm vụ trọng yếu (mission critical) coi trọng cô lập lỗi và mở rộng, thay thế theo đơn vị module, cần xem xét xen kẽ bit cao hoặc ánh xạ hỗn hợp để dung hòa tính sẵn sàng và hiệu năng.

Tài liệu tham khảo


Tóm tắt một câu: Xen kẽ bộ nhớ là kỹ thuật chia bộ nhớ thành nhiều bank, kênh và phân tán các địa chỉ liên tiếp để tăng băng thông bằng truy cập song song, chồng lấp; xen kẽ bit thấp mạnh về truy cập tuần tự là chuẩn hiệu năng nhưng có các đánh đổi như xung đột bank, tính cục bộ NUMA, và nó phối hợp với cache (độ trễ) để giảm nhẹ bức tường bộ nhớ, trở thành nền tảng băng thông của bộ nhớ đa kênh hiện đại, HBM và bộ tăng tốc AI.