Details
-
Improvement
-
Resolution: Fixed
-
Minor
-
None
-
14163
Description
lctl set_param should have an option to set a parameter across multiple matched files in parallel. For instance, if you execute this lctl set_param command:
lctl set_param [parallel-option] ldlm.namespaces.*osc*.lru_size=clear
it should write "clear" to the files matching the given parameter pattern in parallel.
This enhancement is required to speed up clearing of Lustre caches. When there are many OSTs, executing
lctl set_param ldlm.namespaces.*.lru_size=clear
takes a long time, and there is no reason that the lru_size files can't be written to in parallel. Then the work can be done on each OST in parallel.
For example, with 16 OSTs, it takes 5.4 seconds to clear caches across all namespaces. This could be sped up by parallelizing the write to lru_size across the namespaces.
If this enhancement is added, then LU-3970 can also be resolved.
Attachments
Issue Links
- is related to
-
LU-3970 Add procfs interface for clearing lustre caches in parallel
-
- Resolved
-
Per John's comment on the gerrit change, I wrote a bash function to do accomplish a set_param in parallel:
In my testing on a VM with many mounts, this function achieves about 50-100% of the performance of the lctl set_param -p, but performance varies a lot. This is pretty good, but we would still like a single interface to set general Lustre parameters (including lru_size) in parallel. lctl seems like the most appropriate place to do this, although the implementation in C is more complicated than the above implementation in bash.
I think the closeness in performance is due to the fact that the bash implementation has no artifical limit to the number of subprocesses it spawns while the lctl set_param -p implementation limits itself to 8 threads per core. I'm going to bump that up to 32 threads per core and see how it performs. I'd also like to do a performance comparison on real hardware with a file system with many more OSTs.