Details
-
Improvement
-
Resolution: Duplicate
-
Minor
-
None
-
None
-
9223372036854775807
Description
The ltd->ltd_qos.lq_same_space boolean that decides whether the LOD QOS allocator is active for an allocation or not is tracked for the entire LOV, when it should actually be tracked on a per-pool basis.
Consider the case where there are SSD of 1TB in size (in an ssd pool), and HDD OSTs of 100TB in size (in an hdd pool). In a newly-formatted filesystem, it is clear that the SSD OSTs would have 1% of the free space of the HDD OSTs, and lq_same_space=0 is set in ltd_qos_penalties_calc(). As a result, QOS would always be active and the SSDs would be skipped for virtually all normal (default pool) allocations, unless the ssd pool is specifically requested. That is fine (even desirable) for the default all-OST pool.
Now, if an allocation is using either the ssd or hdd pools, lod_ost_alloc_qos() will find the global lq_same_space=0 and not use RR allocation, but less-optimal QOS space weighted allocation, even though the space of OSTs in either pool may be well balanced. Instead, the lq_same_space flag should be kept on struct lu_tgt_pool so that allocations within a given pool can decide for RR or QOS allocation independently of the global pool.
Attachments
Issue Links
Activity
Link | Original: This issue is related to EX-782 [ EX-782 ] |
Resolution | New: Duplicate [ 3 ] | |
Status | Original: Open [ 1 ] | New: Resolved [ 5 ] |
Link | New: This issue is related to EX-901 [ EX-901 ] |
Link | New: This issue is related to EX-782 [ EX-782 ] |
Labels | Original: HPv2 | New: HPv3 |
Labels | New: HPv2 |
Description |
Original:
The {{ltd->ltd_qos.lq_same_space}} boolean that decides whether the LOD QOS allocator is active for an allocation or not is tracked for the entire LOV, when it should actually be tracked on a per-pool basis.
Consider the case where there are SSD of 1TB in size (in an {{ssd}} pool), and HDD OSTs of 100TB in size (in an {{hdd}} pool). In a newly-formatted filesystem, it is clear that the SSD OSTs would have 1% of the free space of the HDD OSTs, and {{lq_same_space=0}} is set in {{ltd_qos_penalties_calc()}}. As a result, QOS would always be active and the SSDs would be skipped for virtually all normal (default pool) allocations, unless the {{ssd}} pool is specifically requested. That is fine (even desirable) for the default all-OST pool. Now, if an allocation is using either the {{ssd}} or {{hdd}} pools, {{lod_ost_alloc_qos()}} will find the global {{lq_same_space=0}} and not use RR allocation, but QOS space balanced allocation, even though the space of OSTs in either pool may be well balanced. Instead, the {{lq_same_space}} flag should be kept on {{struct lu_tgt_pool}} so that allocations within the pool can decide for RR or QOS allocation independently of the global pool. |
New:
The {{ltd->ltd_qos.lq_same_space}} boolean that decides whether the LOD QOS allocator is active for an allocation or not is tracked for the entire LOV, when it should actually be tracked on a per-pool basis.
Consider the case where there are SSD of 1TB in size (in an {{ssd}} pool), and HDD OSTs of 100TB in size (in an {{hdd}} pool). In a newly-formatted filesystem, it is clear that the SSD OSTs would have 1% of the free space of the HDD OSTs, and {{lq_same_space=0}} is set in {{ltd_qos_penalties_calc()}}. As a result, QOS would always be active and the SSDs would be skipped for virtually all normal (default pool) allocations, unless the {{ssd}} pool is specifically requested. That is fine (even desirable) for the default all-OST pool. Now, if an allocation is using either the {{ssd}} or {{hdd}} pools, {{lod_ost_alloc_qos()}} will find the global {{lq_same_space=0}} and not use RR allocation, but less-optimal QOS space weighted allocation, even though the space of OSTs in either pool may be well balanced. Instead, the {{lq_same_space}} flag should be kept on {{struct lu_tgt_pool}} so that allocations within a given pool can decide for RR or QOS allocation independently of the global pool. |
Description |
Original:
The {{ltd->ltd_qos.lq_same_space}} boolean that decides whether the LOD QOS allocator is active for an allocation or not is tracked for the entire LOV, when it should actually be tracked on a per-pool basis.
Consider the case where there are SSD of 1TB in size (in an {{ssd}} pool), and HDD OSTs of 100TB in size (in an {{hdd}} pool). In a newly-formatted filesystem, it is clear that the SSD OSTs would have 1% of the free space of the HDD OSTs, and {{lq_same_space=0}} is set in {{ltd_qos_penalties_calc()}}. As a result, QOS would always be active and the SSDs would be skipped for virtually all normal (default pool) allocations, unless they are specifically requested. That is fine (even desirable) for the default all-OST pool. Now, if an allocation is using either the {{ssd}} or {{hdd}} pools, {{lod_ost_alloc_qos()}} will find the global {{lq_same_space=0}} and not use RR allocation, but QOS space balanced allocation, even though the space of OSTs in either pool may be well balanced. Instead, the {{lq_same_space}} flag should be kept on {{struct lu_tgt_pool}} so that allocations within the pool can decide for RR or QOS allocation independently of the global pool. |
New:
The {{ltd->ltd_qos.lq_same_space}} boolean that decides whether the LOD QOS allocator is active for an allocation or not is tracked for the entire LOV, when it should actually be tracked on a per-pool basis.
Consider the case where there are SSD of 1TB in size (in an {{ssd}} pool), and HDD OSTs of 100TB in size (in an {{hdd}} pool). In a newly-formatted filesystem, it is clear that the SSD OSTs would have 1% of the free space of the HDD OSTs, and {{lq_same_space=0}} is set in {{ltd_qos_penalties_calc()}}. As a result, QOS would always be active and the SSDs would be skipped for virtually all normal (default pool) allocations, unless the {{ssd}} pool is specifically requested. That is fine (even desirable) for the default all-OST pool. Now, if an allocation is using either the {{ssd}} or {{hdd}} pools, {{lod_ost_alloc_qos()}} will find the global {{lq_same_space=0}} and not use RR allocation, but QOS space balanced allocation, even though the space of OSTs in either pool may be well balanced. Instead, the {{lq_same_space}} flag should be kept on {{struct lu_tgt_pool}} so that allocations within the pool can decide for RR or QOS allocation independently of the global pool. |
Closing as a duplicate of
LU-13363