-
Notifications
You must be signed in to change notification settings - Fork 23
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[NBS] make new volume counters to fix UsedQuota strange values #2704
Conversation
Hi! Thank you for contributing! |
cloud/blockstore/libs/storage/volume/model/volume_throttling_policy.cpp
Outdated
Show resolved
Hide resolved
cloud/blockstore/libs/storage/volume/model/volume_throttling_policy.cpp
Outdated
Show resolved
Hide resolved
fedc91a
to
0bb682e
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Отдельно по iops и bandwidth считать неправильно, потому что троттлер работает не так - он троттлит не независимо по iops и по bandwidth, а считает стоимость каждого запроса и троттлит по стоимости. За секунду суммарная стоимость запросов, проходящих через троттлер, не может быть больше 1. В общем, метрика должна показывать стоимость идущего через троттлер потока запросов, умноженную на 100 (чтоб получились проценты)
#2703
На диске стоят ограничения в 5000 Iops и 89 mbps на чтение\запись
когда пишем 5000 iops и 20 mb метрика UsedQuota показывает корректные 100 процентов диска
новые метрики:
Если же мы будем писать 2500 iops и 10 mb
то UsedQuota показывает невалидные значения в районе нуля
Новые же метрики показывают корректные значения в районе 50 процентов
У тротлера есть бюджет и на каждую io операцию из этого бюджета вычитается цена операции, при этом бюджет восстанавливается с постоянной скоростью, так вот предыдущий вариант раз в секунду спрашивал текущий бюджет тротлера и высчитывал метрику как (MaxBudget - CurrentBudget) / MaxBudget. Допустим, за первые пол секунуды секунды мы потратили половину бюджета, затем пол секунды ничего не писали и не читали, бюджет успел восстановиться до максимального и в итоге в конце секунды получаем метрику 0%, хотя за секунду мы израсходовали половину бюджета. Т.е. предыдущий вариант показывал не использованную за секунду квоту, а сколько нам не хватает бюджета до максимального уровня в данный момент, и, если мы не использовали бюджет на 100%, он успевал полностью восстановиться и итоговая квота получалась в районе нуля