1. Tổng quan
Hai tham số osd_recovery_sleep
và osd_recovery_sleep_hdd
là cơ chế để giảm tải I/O khi OSD thực hiện recovery hoặc backfill. Cả hai đều chèn thời gian nghỉ tính bằng giây giữa mỗi operation sao chép dữ liệu, giúp hạn chế áp lực lên ổ đĩa, đặc biệt là HDD.
+---------+ copy chunk 1 +---------+ sleep X giây +---------+
| client | ----------------> | OSD | --------------> | OSD |
+---------+ +---------+ +---------+
2. Cơ chế hoạt động
- OSD xử lý từng op (chunk dữ liệu) liên tiếp trong quá trình recovery/backfill.
- Nếu không có sleep → OSD liên tục gửi I/O → HDD chịu tải cao, queue dài, latency tăng → client bị chậm.
- Tham số sleep yêu cầu OSD nghỉ một khoảng thời gian trước khi xử lý op tiếp theo, nhường I/O cho client.
3. Khác nhau giữa hai tham số
osd_recovery_sleep
- Áp dụng cho tất cả OSD (HDD, SSD, NVMe).
osd_recovery_sleep_hdd
- Chỉ áp dụng cho OSD mà Ceph nhận diện là HDD.
- Hữu ích trong cluster hybrid (SSD + HDD) để SSD không bị bóp không cần thiết.
4. Phạm vi tác động
- Recovery: Đồng bộ lại dữ liệu bị mất khi OSD down rồi quay lại.
- Backfill: Di chuyển dữ liệu sang OSD mới hoặc khi rebalance.
- Cả hai tham số đều tác động đến cả recovery và backfill.
5. Cách áp dụng tương đương sleep trong mClock
- Đổi profile (nhanh nhất)
high_client_ops
để ưu tiên I/O client, chấp nhận recovery chậm hơn.high_recovery_ops
để đẩy nhanh hồi phục ngoài giờ.
Profile có sẵn bảng phân bổ reservation/weight/limit giữa client vs background. docs.ceph.com
- Tự tinh chỉnh QoS (nâng cao)
- Chuyển
osd_mclock_profile=custom
rồi đặt:osd_mclock_scheduler_background_recovery_lim osd_mclock_scheduler_background_recovery_res osd_mclock_scheduler_background_recovery_wgt
- Giảm
lim
(mức trần) hoặcres
(tối thiểu) để nhường đường cho client. docs.ceph.com
- Chuyển
- Kết hợp concurrency + chunk size
- Bật
osd_mclock_override_recovery_settings=true
để tự điều khiển lạiosd_max_backfills
,osd_recovery_max_active*
. - Giảm
osd_recovery_max_chunk
(ví dụ 1–2 MiB) để bớt burst mỗi op. docs.ceph.com
- Bật
Sơ đồ quyết định:
[Đang dùng mClock?]--No--> Dùng WPQ + osd_recovery_sleep*
|
Yes
|
[Cần đổi nhanh?]--Yes--> Chọn profile mClock (high_client_ops / high_recovery_ops)
|
No
v
profile=custom + tinh chỉnh *_background_recovery_{res,lim,wgt}
+ (option) override_recovery_settings + giảm chunk
6. Ví dụ lệnh thực tế
Ưu tiên client giờ cao điểm (áp dụng tức thời, không restart OSD)
ceph config set osd osd_mclock_profile high_client_ops
Preset êm trên custom (giảm trần recovery ~20%)
ceph config set osd osd_mclock_profile custom
ceph config set osd osd_mclock_scheduler_background_recovery_lim 0.2
ceph config set osd osd_mclock_scheduler_background_recovery_res 0.02
ceph config set osd osd_recovery_max_chunk 1MiB
Lưu ý: *_res/lim/wgt
chỉ chỉnh được khi custom, các built-in profile khóa các option này.
Khôi phục điều khiển concurrency như WPQ (chỉ khi thật cần)
ceph config set osd osd_mclock_override_recovery_settings true
ceph config set osd osd_max_backfills 1
ceph config set osd osd_recovery_max_active_hdd 1
7. Lời khuyên
- Môi trường production nên giữ mClock và điều tiết bằng profile + QoS; chỉ quay về WPQ nếu có use-case đặc thù cần sleep. docs.ceph.com
- Luôn xác thực capacity (IOPS/BW) trước khi tinh chỉnh tỷ lệ
res/lim
để tránh hạn mức dựa trên thông số ảo. Red Hat Documentation - Dùng preset: high_client_ops trong giờ cao điểm; high_recovery_ops ngoài giờ để rút ngắn thời gian mất redundancy. docs.ceph.com
- Khi cần kiểm soát mạnh tay song song/backfill, bật
osd_mclock_override_recovery_settings=true
rồi đặtosd_max_backfills
,osd_recovery_max_active*
. docs.ceph.com
8. Tài liệu tham khảo
- Ceph — mClock Config Reference (đặc biệt các mục Built-in Profiles Locked Options, Sleep Options, Override recovery settings) docs.ceph.com
- Red Hat Ceph — mClock OSD scheduler + Appendix A: mClock configuration options (mô tả
osd_mclock_profile
, valid choices, áp dụng runtime) Red Hat Documentation+1 - IBM Storage Ceph — mClock configuration options (tổng quan các option QoS) IBM
9. Kết luận
- Các tham số sleep (
osd_recovery_sleep*
,osd_scrub/snaptrim_*_sleep
) không còn tác dụng khi mClock chạy; mClock chủ động vô hiệu hóa để tự điều phối queue. docs.ceph.com - Để đạt hiệu ứng giãn nhịp tương đương trong mClock, hãy dùng profile hoặc tự đặt
res/lim/wgt
cho nhóm background recovery, kết hợp giảm chunk và (nếu cần) giới hạn concurrency vớioverride_recovery_settings
. docs.ceph.com - Thực hành khuyến nghị: đổi profile theo khung giờ, xác thực capacity chuẩn và chỉ dùng WPQ khi thật sự cần delay kiểu cứng. docs.ceph.comRed Hat Documentation