4. Goals and Non Goals
• Need to spread I/O fairly between tenants
• “fairly” = policy-based share of total IOPS, not naïve first-come first-
served
• “tenant” = real person/org (or internal activity), may have multiple
clients/connections
• Not trying to achieve fine-grained perfect ratios
• Just “keeping a lid” on greedy or malfunctioning users
• Try to make sure everyone has some traffic going through
• Avoid absolute numbers (e.g. IOPS), tricky tuning
• Not scalable and difficult to manage
5. Goals and Non Goals
• Need to spread I/O fairly between tenants
• “fairly” = policy-based share of total IOPS, not naïve first-come first-
served
• “tenant” = real person/org (or internal activity), may have multiple
clients/connections
• Not trying to achieve fine-grained perfect ratios
• Just “keeping a lid” on greedy or malfunctioning users
• Try to make sure everyone has some traffic going through
• Avoid absolute numbers (e.g. IOPS), tricky tuning
• Not scalable and difficult to manage
10. Sharing Time: Ensuring Fairness
• Modifications to io-threads translator, group FOPs
by namespace
• Separate queue per-tenant instead of per-connection
• General approach to scheduling is Weighted Fair
Queuing
• Each tenant gets a “share” (weight)
• FOPS[tenant] = FOPS[total] * share[tenant] / share[total]
• Tenant queues are strung together in a ring-of-queues called “the
clock.”
• The same queue can show up multiple times in the clock based on
weight
• Future: experiment with other priority algorithms
• Abstract io-threads so different algorithms can be plugged in and
chosen
• e.g. Deficit Round Robin (to deal with very expensive operations)
11. Sharing Time: Ensuring Fairness
• Modifications to io-threads translator, group FOPs
by namespace
• Separate queue per-tenant instead of per-connection
• General approach to scheduling is Weighted Fair
Queuing
• Each tenant gets a “share” (weight)
⌾ FOPS[tenant] = FOPS[total] * share[tenant] / share[total]
• Tenant queues are strung together in a ring-of-queues called “the
clock.”
• The same queue can show up multiple times in the clock based on
weight
• Future: experiment with other priority algorithms
• Abstract io-threads so different algorithms can be plugged in and
chosen
• e.g. Deficit Round Robin (to deal with very expensive operations)
12. Sharing Time: Ensuring Fairness
• Modifications to io-threads translator, group FOPs
by namespace
• Separate queue per-tenant instead of per-connection
• General approach to scheduling is Weighted Fair
Queuing
• Each tenant gets a “share” (weight)
⌾ FOPS[tenant] = FOPS[total] * share[tenant] / share[total]
• Tenant queues are strung together in a ring-of-queues called “the
clock.”
• The same queue can show up multiple times in the clock based on
weight
• Future: experiment with other priority algorithms
• Abstract io-threads so different algorithms can be plugged in and
chosen
• e.g. Deficit Round Robin (to deal with very expensive operations)