bcache so với dm-cache: So sánh bộ nhớ đệm SSD trên Linux

11 phút đọc - 28 tháng 5, 2026

hero section cover
Mục lục
  • bcache so với dm-cache: Bộ nhớ đệm SSD trên Linux
  • Cách thức hoạt động của bcache
  • Cách thức hoạt động của dm-cache
  • Chế độ bộ nhớ đệm
  • bcache so với dm-cache: Nên sử dụng cái nào
  • Kết luận
Chia sẻ

So sánh bcache và dm-cache cho bộ nhớ đệm SSD trên Linux. Cài đặt, hiệu suất, chế độ bộ nhớ đệm và khi nào nên sử dụng từng loại.

bcache so với dm-cache: Bộ nhớ đệm SSD trên Linux

SSD nhanh nhưng đắt tiền tính theo gigabyte. HDD rẻ nhưng chậm. Linux cung cấp cho bạn hai công cụ cấp kernel để kết hợp chúng: bcachedm-cache. Cả hai đều sử dụng SSD làm bộ nhớ đệm trong suốt trước một ổ HDD lớn hơn, nhưng chúng khác nhau về kiến trúc, yêu cầu thiết lập và nơi chúng hoạt động tốt nhất.


 

Cách thức hoạt động của bcache

Bcache đã có trong nhân Linux kể từ phiên bản 3.10 (tháng 6 năm 2013). Nó hoạt động ở lớp khối, vì vậy nó hoạt động với bất kỳ hệ thống tệp nào hỗ trợ UUID.

Bên trong, bcache sử dụng cấu trúc kết hợp giữa cây B+ và nhật ký. Nó chia không gian lưu trữ SSD thành các khối có kích thước cố định (từ 128K đến 2MB), được căn chỉnh theo ranh giới khối xóa. Điều này chuyển đổi các thao tác ghi ngẫu nhiên thành các thao tác ghi tuần tự, từ đó giảm thiểu hiện tượng khuếch đại ghi và kéo dài tuổi thọ của SSD. Các thao tác I/O tuần tự vượt quá 4MB sẽ tự động bỏ qua bộ nhớ đệm, giúp SSD tập trung vào các mẫu truy cập ngẫu nhiên nơi nó mang lại giá trị cao nhất.

Bcache cũng theo dõi độ trễ SSD theo thời gian thực. Nếu độ trễ đọc vượt quá 2ms hoặc độ trễ ghi vượt quá 20ms, nó sẽ hạn chế lưu lượng để ngăn thiết bị bộ nhớ đệm trở thành điểm nghẽn.

Cài đặt

Cài đặt bcache-tools, sau đó định dạng thiết bị lưu trữ và thiết bị bộ nhớ đệm:

make-bcache -B /dev/sdb          # format HDD as backing device
make-bcache -C /dev/sdc          # format SSD as cache device
echo <UUID> > /sys/block/bcache0/bcache/attach   # attach cache

Việc điều chỉnh thời gian chạy được thực hiện thông qua /sys/block/bcache<N>/bcache/ giao diện sysfs, nơi bạn có thể điều chỉnh các chế độ bộ nhớ đệm, ngưỡng I/O tuần tự và mục tiêu độ trễ. Đối với mảng RAID, hãy sử dụng --data-offset để căn chỉnh với độ rộng dải của bạn.

Điểm cần lưu ý: quá trình thiết lập sẽ xóa dữ liệu. Cả hai thiết bị đều phải được định dạng thành mục tiêu bcache, do đó bạn không thể thêm bcache vào hệ thống tệp hiện có mà không xóa sạch nó trước. Các thiết bị bcache cũng không thể thay đổi kích thước sau khi tạo.

Hiệu suất

Tính năng hợp nhất ghi của Bcache mang lại cho nó các con số ghi ngẫu nhiên mạnh mẽ. Trong các bài kiểm tra hiệu năng, nó đã đạt khoảng 18.500 IOPS ghi ngẫu nhiên 4K so với 12.200 IOPS trên SSD thô. Thông lượng đọc ngẫu nhiên có thể đạt khoảng 1.000.000 IOPS với phần cứng đủ mạnh.

Đối với các tác vụ được mã hóa, hãy đặt lớp dm-crypt lên trên /dev/bcache<N> thiết bị thay vì mã hóa từng ổ đĩa cơ sở riêng lẻ. Điều này thường mang lại hiệu suất tốt hơn vì bcache vẫn có thể hợp nhất các thao tác ghi trước khi mã hóa.

Cách thức hoạt động của dm-cache

dm-cache là một mục tiêu Device Mapper nằm trên một khối lượng logic hiện có. Nó sử dụng ba thiết bị phụ: thiết bị gốc (HDD), thiết bị bộ nhớ đệm (SSD hoặc NVMe) và thiết bị siêu dữ liệu theo dõi vị trí khối và trạng thái bẩn. Chính sách bộ nhớ đệm mặc định là smq (Stochastic Multi-Queue), giúp xác định dữ liệu nóng trong khối lượng công việc hỗn hợp.

Ưu điểm chính: dm-cache có thể được xếp lớp lên một khối lượng LVM đang hoạt động mà không làm hỏng dữ liệu hiện có. Bạn cũng có thể thay đổi kích thước của nó bằng các lệnh LVM tiêu chuẩn.

Cài đặt với LVM

Cách thực tế để cấu hình dm-cache là thông qua lvmcache. Cấu hình thủ công dmsetup có thể thực hiện được nhưng dễ xảy ra lỗi và không tồn tại sau khi khởi động lại. Cách tiếp cận LVM:

  1. Tạo các Khối lượng Vật lý (PV) trên cả ổ cứng HDD và SSD.
  2. Thêm cả hai PV vào một Nhóm Khối lượng (VG) duy nhất.
  3. Tạo ba Khối lượng logic: một để lưu trữ dữ liệu (HDD), một để lưu trữ bộ nhớ đệm (SSD) và một để lưu trữ siêu dữ liệu (SSD).
  4. Kết hợp các LV bộ nhớ đệm và siêu dữ liệu thành một nhóm bộ nhớ đệm:
    lvconvert --type cache-pool --poolmetadata <meta_lv> <cache_lv>
  5. Gắn nhóm bộ nhớ đệm vào nguồn:
    lvconvert --type cache --cachepool <pool_lv> <data_lv>

Một điều cần lưu ý: gắn hệ thống tệp qua /dev/mapper/ đường dẫn của nó, không phải bằng UUID. Gắn kết bằng UUID có thể bỏ qua lớp bộ nhớ đệm và truy cập trực tiếp vào thiết bị nguồn.

Hiệu suất và bộ nhớ

Trong chế độ ghi lại (writeback) với tải công việc Zipf 90/10 đọc/ghi, dm-cache đã đạt tốc độ đọc khoảng 193 MB/s và tốc độ ghi khoảng 21 MB/s. Trong một bài kiểm tra khác, việc lưu trữ bộ nhớ đệm cho ổ cứng HDD 100 GB với phân vùng NVMe 10 GB đã tăng IOPS ghi ngẫu nhiên từ 118 lên 798.

Đổi lại là vấn đề bộ nhớ. Chi phí metadata của dm-cache phụ thuộc vào kích thước khối. Kích thước khối 512 byte có thể tiêu tốn hơn 16 GB RAM cho mỗi 100 GB bộ nhớ đệm. Tăng kích thước khối lên 4.096 byte sẽ giảm sử dụng bộ nhớ xuống khoảng 2 GB cho mỗi 100 GB. Chọn kích thước khối gần với kích thước I/O trung bình của bạn (64 KB là điểm khởi đầu hợp lý) và đảm bảo nó là bội số của 64 sector (32 KB), trong khoảng từ 32 KB đến 1 GB.

Siêu dữ liệu được xóa sau mỗi lần ghi FLUSH hoặc FUA, hoặc ít nhất một lần mỗi giây. Để đảm bảo tính sẵn sàng cao, hãy nhân bản thiết bị siêu dữ liệu để tránh điểm lỗi duy nhất.

Chế độ bộ nhớ đệm

Cả bcache và dm-cache đều hỗ trợ các chế độ bộ nhớ đệm cốt lõi giống nhau. Sự lựa chọn này ảnh hưởng đến cả hiệu suất và an toàn dữ liệu.

Chế độCách thức hoạt độngTốc độRủi ro
Ghi quaDữ liệu được ghi đồng thời vào cả SSD và HDDChỉ tăng tốc độ đọcThấp. HDD luôn chứa dữ liệu hiện tại.
Ghi lạiDữ liệu ghi được lưu vào SSD trước, sau đó mới được ghi vào HDDTăng tốc độ đọc và ghiCao hơn. Nếu SSD bị lỗi trước khi đồng bộ hóa, dữ liệu sẽ bị mất.
Ghi vòng / Truyền quaCác thao tác ghi bỏ qua bộ nhớ đệm hoàn toànChỉ tăng tốc độ đọc, giảm hao mòn SSDThấp. HDD luôn có dữ liệu hiện tại.

Writethrough là tùy chọn mặc định an toàn cho cả hai công cụ. Writeback nhanh hơn nhưng tiềm ẩn rủi ro thực sự: nếu SSD hỏng trong khi đang lưu trữ dữ liệu chưa được xóa, dữ liệu đó sẽ bị mất và hệ thống tệp có thể bị hỏng. Chỉ sử dụng writeback khi bạn có SSD dự phòng hoặc có thể chấp nhận mất dữ liệu thỉnh thoảng.

bcache so với dm-cache: Nên sử dụng cái nào

Yếu tốbcachedm-cache
Cài đặt trên dữ liệu hiện cóPhá hủy (yêu cầu xóa dữ liệu)Không phá hủy (chuyển đổi trực tuyến)
Thay đổi kích thướcKhông được hỗ trợĐược hỗ trợ qua LVM
Tối ưu hóa ghi ngẫu nhiênMạnh (tập trung ghi tuần tự)Tiêu chuẩn
Bỏ qua I/O tuần tựTự động (>4MB)Quản lý bởi chính sách smq
Chi phí bộ nhớThấp (cây B+)Cao hơn (tùy thuộc vào kích thước khối)
Siêu dữ liệuTrên thiết bị bộ nhớ đệmThiết bị riêng biệt, có thể được nhân đôi

Sử dụng bcache khi bạn đang xây dựng một hệ thống mới từ đầu và muốn có hiệu suất I/O ngẫu nhiên tốt nhất có thể. Đây là lựa chọn tốt hơn cho các tác vụ nặng về ghi như cơ sở dữ liệu và lưu trữ VM, cũng như cho các mảng RAID 6 nơi các hình phạt ghi ngẫu nhiên rất nghiêm trọng.

Sử dụng dm-cache khi bạn cần thêm bộ nhớ đệm vào một máy chủ đang hoạt động. Tích hợp LVM của nó cho phép bạn gắn bộ nhớ đệm mà không gây gián đoạn dịch vụ hoặc di chuyển dữ liệu. Đây là lựa chọn phù hợp hơn cho các tác vụ có nhiều thao tác đọc và các môi trường cần tính linh hoạt để điều chỉnh kích thước hoặc cấu hình lại lưu trữ ngay lập tức.

Kết luận

Cả hai công cụ đều giải quyết cùng một vấn đề, nhưng chúng phù hợp với các tình huống khác nhau. Bcache là lựa chọn tối ưu về hiệu năng cho các hệ thống mới. dm-cache là lựa chọn thực tiễn cho các hệ thống LVM hiện có. Dù bạn chọn công cụ nào, hãy bắt đầu với chế độ writethrough cho đến khi bạn tin tưởng vào độ tin cậy của SSD, sau đó chuyển sang chế độ writeback nếu cần hiệu năng ghi cao.

Nếu bạn cần máy chủ chuyên dụng với cấu hình bộ nhớ đệm SSD, hãy khám phá các tùy chọn máy chủ chuyên dụng của FDC.

Blog

Nổi bật trong tuần

Các bài viết khác
XDP và eBPF cho xử lý gói tin trên Linux

XDP và eBPF cho xử lý gói tin trên Linux

Cách XDP và eBPF xử lý hàng triệu gói tin mỗi giây ở cấp trình điều khiển NIC. Các bài kiểm tra hiệu năng, trường hợp sử dụng DDoS, thiết lập chuỗi công cụ và yêu cầu phần cứng

14 phút đọc - 27 tháng 5, 2026

Tại sao việc sở hữu một VPS mạnh mẽ và không giới hạn băng thông lại quan trọng

3 phút đọc - 9 tháng 5, 2025

Các bài viết khác
background image

Bạn có thắc mắc hoặc cần giải pháp tùy chỉnh?

icon

Các tùy chọn linh hoạt

icon

Phạm vi toàn cầu

icon

Triển khai ngay lập tức

icon

Các tùy chọn linh hoạt

icon

Phạm vi toàn cầu

icon

Triển khai ngay lập tức