Q: The absolute minimum is 2 per node, regardless of number of cores?
A: Yes
Q: The default is one thread per core, including hyperthreading?
A: Yes, the default mode is one thread per hyper-threading.
Q: Is there any limit or maximum in the code?
A: Currently, there is no maximun limit, but I think we should set the maximum as the core count (hyper-threading) on the node.
Q: You mention large directory traversal and statahead as operations that are async RPC-intensive,
are there any other situations a user may need to be aware of?
A: statahead is part of large directory traversal, and async glimpse lock (agl) is also part of large directory traversal. Both of them are usually can be triggered by "ls -l", "du", "find", and similar system commands.
Another often used async RPC case is I/O, in Lustre, most of I/O are async mode.
Q: Is there any tuning of RPC behavior in this area, in other words for a specific type
of RPC or action, can a user force async or sync behavior?
A: There are some existing proc interfaces maybe affect the efficient for async RPC processing, like "max_rpcs_in_flight". But as for whether a RPC is sync or async, depends on Lustre internal implementation, the developer can specify that inside Lustre code, but there is no tunable interface for users to specify whether the RPC is async or sync outside Lustre code.
Q: what is the parameter name for the ptlrpcd_load_policy? is it "ptlrpcd_load_policy=XX" ??
A: ptlrpcd_load_policy is not the name of some parameter. It is the name for a set of parameters used inside Lustre code to specify how to push the async RPC into some ptlrpcd queue. That means only Lustre developer can use such parameters, but invisible outside Lustre code.
Merged.