dm-cache
là bộ đệm "di chuyển chậm": cần phải có nhiều lỗi đọc/ghi để quảng cáo một khối, đặc biệt là khi quảng cáo một khối mới có nghĩa là hạ cấp một cái đã được lưu trong bộ nhớ cache.
Bản chất dựa trên khối cố định của dm-cache
, cùng với việc không có khu vực chỉ ghi dành riêng, có nghĩa là cần có nhiều thao tác ghi vào cùng các khối không được lưu trong bộ nhớ cache để kích hoạt quảng cáo/thay thế khối.Tuy nhiên, điều này cũng ngụ ý rằng bộ đệm ẩn trang nhân không "hấp thụ" nhiều lần ghi bị thiếu này, hợp nhất chúng trong một lần ghi vào các thiết bị khối bên dưới.
Nói cách khác, có lẽ bạn đang nhìn thấy hiệu ứng kết hợp của bộ đệm ẩn trang nhân (hấp thụ và hợp nhất các ghi) và sự miễn cưỡng của dm-cache
để thúc đẩy các khối bị bỏ lỡ đầu tiên.
Nếu bạn muốn dự trữ một số thiết bị/dung lượng để chỉ ghi bộ đệm, bạn có thể nhấn vào dm-writecache
(và bình thường lvmcache
)
Thông tin thêm:
dm-cache
có chặn các lượt truy cập theo dõi thăng hạng/hạ cấp hay không. Lúc đầu, bạn có một bộ đệm trống với tất cả I/O được hướng đến thiết bị gốc (chậm). Vì vậy, khi bạn phát hành, giả sử, 4K đọc, nó sẽ truy cập vào thiết bị chậm bên dưới, với dm-cache
theo dõi sự bỏ lỡ. Sau một số lần bỏ lỡ khác cùng một khối bộ đệm (mặc định 32K), sau đó toàn bộ khối bộ đệm được sao chép vào thiết bị nhanh. Nếu bây giờ bạn ghi vào các khối đã lưu trong bộ đệm, thì quá trình ghi của bạn sẽ được lưu vào bộ nhớ đệm. Tuy nhiên, nếu bài viết của bạn dành cho một khối chưa được lưu trong bộ nhớ cache, nó đi thẳng đến thiết bị gốc (chậm). Sau một số ghi không được lưu trong bộ nhớ cache khác, dm-cache
cuối cùng sẽ phân bổ toàn bộ khối bộ đệm (hãy nhớ, 32K theo mặc định) sao chép dữ liệu gốc vào thiết bị bộ đệm. Tại thời điểm này, các lần đọc/ghi mới có thể được phục vụ từ bộ đệm. Hạ cấp rất đơn giản: khi một khối mới phải được thăng cấp, khối cũ nhất sẽ bị loại bỏ/xóa.
Nói cách khác, để ghi được lưu vào bộ đệm, phân đoạn bộ đệm tương ứng phải được cấp phát và dữ liệu sao lưu phải được sao chép trên thiết bị đệm (cấp phát khi ghi). Để hạn chế việc sử dụng băng thông giữa thiết bị gốc và thiết bị bộ đệm, việc sao chép này chỉ được thực hiện sau nhiều lần bỏ lỡ (tức là: một lần bỏ lỡ sẽ không phải thúc đẩy một khối). Lưu ý rằng việc đọc nhiều lần cùng một khối chưa được lưu trong bộ nhớ cache sẽ không phải hoạt động, vì bộ đệm ẩn trang nhân sẽ chỉ cung cấp khối được lưu trong bộ nhớ cache của chính nó.
dm-writecache
hoạt động khác, giống với bộ đệm ghi lại bộ điều khiển RAID truyền thống hơn. Nó lưu trữ tất cả các viết, bỏ qua đọc. Nó gần như có thể được coi là "bộ đệm trang L2 chỉ ghi", nơi các trang bẩn được "hoán đổi" chờ thiết bị chậm bắt kịp. Để sử dụng nó, bạn cần phân vùng các thiết bị nhanh của mình giữa dm-cache
(tại thời điểm này, phải được chạy dưới dạng viết qua
bộ đệm) và dm-writecache
hoặc để dành các thiết bị khác nhau cho chúng. Tôi chẳng bao giờ đã thử thực hiện điều đó thông qua LVM và tôi nghi ngờ rằng công cụ này sẽ ngăn bạn lồng/xếp chồng hai mô-đun bộ đệm khác nhau. Tuy nhiên, bạn có thể thử qua trực tiếp dmsetup
mệnh lệnh.