Logo

Personal Ops Runbook

Personal runbook covering infrastructure operations for Cloud, Kubernetes, OpenStack, and Ceph environments. Includes deployment and teardown procedures, node management, cluster monitoring setup, and incident response workflows compiled from day-to-day operational work. Intended strictly for personal reference — configurations and scripts are environment-specific and not guaranteed to work as-is elsewhere.

QoS IOPS Limiting - Pure IOPS

Mục lục


Các policy rate-limit của Lightbits Quality of Service (QoS) cho phép bạn đặt trần cho throughput đọc và ghi của một volume. Giới hạn có thể được biểu diễn theo bandwidth, IOPS, hoặc IOPS trên mỗi GB dung lượng volume.

Bài viết này mô tả cách các giới hạn IOPS và IOPS-per-GB được thực thi, thông qua một tùy chọn policy có tên Pure IOPS.

Pure IOPS Overview — Tổng quan về Pure IOPS

Trước đây, giới hạn IOPS của Lightbits thực chất là một ngân sách bandwidth suy ra từ block size 4 KiB. Do đó, IOPS thực tế mà một volume đạt được sẽ giảm xuống khi kích thước I/O của application tăng lên. Pure IOPS loại bỏ sự chênh lệch này giữa IOPS được cấu hình và IOPS thực tế nhận được.

Các CSP đóng gói và bán storage theo tier, và các tier đó gần như luôn được diễn đạt bằng IOPS. Một tenant đăng ký "10.000 IOPS", chứ không phải "X MB/s ở block size 4 KiB". Khi một tenant có ngân sách hạn chế hoặc bị giới hạn theo gói đăng ký chạy workload với I/O kích thước lớn hơn, hành vi trước đây sẽ âm thầm cung cấp ít IOPS hơn nhiều so với mức tenant đã ký kết.

Điều đó dẫn tới:

  • Tranh chấp về SLA và billing - trả tiền cho một tier IOPS mà thực tế không thể đạt tới.

  • Gánh nặng support - trả tiền cho 10K IOPS nhưng chỉ nhận được 2.5K, trong khi vấn đề thực chất là sự lệch pha về đơn vị đo.

  • Định giá và capacity planning thiếu chính xác - khi mức trần thực tế trôi nổi theo block size, rất khó ánh xạ một price tier sang một mức entitlement được bảo đảm, hoặc oversubscribe một cách dự đoán được.

Với Pure IOPS, một CSP có thể thực thi chính xác tier IOPS mà tenant đã đăng ký, độc lập với cách tenant tạo ra I/O. Mức trần khớp với hợp đồng, các tier trở nên rõ ràng và có cơ sở bảo vệ, tính công bằng trong môi trường multi-tenant được cải thiện, và các gói định giá dựa trên IOPS trở nên dễ vận hành.

Với doanh nghiệp và các người dùng không phải CSP, tính dự đoán được đó cũng có giá trị ở bất cứ đâu bạn muốn kiểm soát QoS chi tiết trên volume và tenant - cô lập noisy-neighbor, trần hiệu năng đáng tin cậy cho từng volume, và các con số IOPS ổn định qua các workload hỗn hợp và block lớn. Điều đó khiến việc benchmark, capacity planning và chargeback trở nên đáng tin cậy hơn nhiều, vì giới hạn đã cấu hình hoạt động nhất quán bất kể kích thước I/O của application.

Enabling Pure IOPS — Bật Pure IOPS

Khi Pure IOPS được bật trên policy, mỗi thao tác I/O được tính đúng một đơn vị (1 IOP) vào giới hạn đã cấu hình, bất kể kích thước của nó. Nhờ vậy, giới hạn "5.000 IOPS" đã cấu hình sẽ cho ra đúng 5.000 IOPS bất kể application dùng block size nào. Bước chuyển đổi nội bộ sang bandwidth (bước × 4096) không còn được áp dụng nữa.

each I/O = 1 unit, regardless of size

Example: IOPS Limit Configured to 5,000 with Pure IOPS — Ví dụ: cấu hình giới hạn 5.000 IOPS với Pure IOPS

Application I/O Size Actual IOPS Achieved
4KiB ~5,000 IOPS
8 KiB ~5,000 IOPS
128 KiB ~5,000 IOPS

Giới hạn được cấu hình giờ đây có nghĩa đúng như những gì nó nói - 5.000 IOPS - với mọi kích thước I/O. Điều này khiến giới hạn trở nên dự đoán được và độc lập với kích thước, đúng với kỳ vọng thông thường về một "IOPS limit".

Điều này áp dụng cho cả hai loại giới hạn:

  • IOPS — giá trị được cấu hình chính là mức trần IOPS tuyệt đối cho volume.

  • IOPS-per-GB — mức trần hiệu dụng bằng giới hạn per-GB × dung lượng volume tính theo GB, và mỗi I/O vẫn được tính là một đơn vị vào mức trần hiệu dụng đó.

Pure IOPS là tùy chọn opt-in và mặc định bị tắt, nên các policy và hành vi hiện có sẽ không thay đổi trừ khi bạn bật nó lên một cách tường minh.

Using lbcli

Thêm flag --pure-iops khi tạo hoặc cập nhật một policy loại IOPS/IOPS-per-GB:

# Create a policy
lbcli create qos-policy --name=my-policy --type iops \
 --write-limit 5000 --read-limit 5000 --pure-iops

# Update an existing policy
lbcli update qos-policy --name=my-policy --type iops \
 --write-limit 5000 --read-limit 5000 --pure-iops

Using the REST API — Dùng REST API

Đặt field pureIops thành true trên QoS policy khi tạo hoặc cập nhật nó:

{
 "name": "my-policy",
 "limitIops": { "readIops": 5000, "writeIops": 5000 },
 "pureIops": true
}

Verify the Setting

Giá trị hiện tại được hiển thị trong danh sách policy:

lbcli list qos-policies -o json

Output có chứa field pureIops (true hoặc false) cho từng policy.

Validation and Compatibility — Kiểm tra hợp lệ và tương thích

  • Mặc định là tắt. Khi pureIopsfalse (mặc định), hành vi giống hệt như trước khi có thay đổi này. Các policy hiện có không bị ảnh hưởng.

  • Chỉ hợp lệ với các giới hạn dựa trên IOPS. Pure IOPS chỉ có thể kết hợp với loại giới hạn iops hoặc iops-per-gb. Kết hợp nó với giới hạn bandwidth sẽ bị từ chối với lỗi InvalidArgument, vì việc giới hạn bandwidth về bản chất dựa trên byte.

  • Áp dụng khi create và update. Tùy chọn này có thể được đặt khi tạo policy mới, hoặc áp dụng cho một policy hiện có thông qua thao tác update.

Nguồn: https://documentation.lightbitslabs.com/lightbits-private-cloud/qos-iops-limiting-pure-iops


Nguồn tham khảo

  1. QoS IOPS Limiting - Pure IOPS — https://documentation.lightbitslabs.com/lightbits-private-cloud/qos-iops-limiting-pure-iops

Ghi chú về nguồn

  • URL fetch thành công. Trang thuộc phiên bản 3.20.x, mục Lightbits Administration Guide.
  • Cấu trúc heading giữ nguyên 1:1: H1, các mục ## (Pure IOPS Overview, Enabling Pure IOPS, Validation and Compatibility) và các mục ### bên trong Enabling Pure IOPS.
  • Dòng each I/O = 1 unit, regardless of size trong bản gốc đứng riêng như một dòng nhấn mạnh, không nằm trong code block; bản dịch giữ nguyên nguyên văn tiếng Anh và vị trí của nó.
  • Bản gốc có một số lỗi trình bày nhỏ ở phần văn xuôi ("size. so a configured..." — chữ thường sau dấu chấm; "each I/O = 1 unit" viết thường đầu dòng); bản dịch truyền đạt đúng ý mà không tái tạo lỗi ở phần văn xuôi.
  • Bản gốc không bọc các đoạn lệnh lbcli, JSON trong khối code có nhãn "Bash/Copy" như các trang khác; bản dịch đưa chúng vào code block để giữ nguyên vẹn nội dung kỹ thuật, không sửa một ký tự nào bên trong.