Background daemons have two main ways to make sure they don't hog resources:
* sleep between cycles (with something like interval or the deprecated run_pause) and
* ratelimiting within a cycle (with *_per_second settings).
The former prevents busy loops in a mostly empty cluster but causes square waves where the process hammers disks as fast as it can, then leaves them idle a while, then hammers them, leaves them idle, etc.
Ratelimiting is nice because it smooths that usage out -- instead of eating all the available I/O 50% of the time, the process can use ~50% of available I/O all the time, keeping the same cycle time but leaving overhead available for things like client requests.
Currently, however, only the following background daemons support ratelimiting:
Background daemons have two main ways to make sure they don't hog resources:
* sleep between cycles (with something like interval or the deprecated run_pause) and
* ratelimiting within a cycle (with *_per_second settings).
The former prevents busy loops in a mostly empty cluster but causes square waves where the process hammers disks as fast as it can, then leaves them idle a while, then hammers them, leaves them idle, etc.
Ratelimiting is nice because it smooths that usage out -- instead of eating all the available I/O 50% of the time, the process can use ~50% of available I/O all the time, keeping the same cycle time but leaving overhead available for things like client requests.
Currently, however, only the following background daemons support ratelimiting:
* object-auditor
* object-updater
* container-auditor
* container-updater
* account-auditor
It would be nice to have ratelimiting available for:
* object- reconstructor reconciler replicator
* object-replicator
* container-
* container-
* container-sharder
* account-replicator
Maybe it'd be nice to have for object-expirer and account-reaper, too? Not sure.