<div dir="ltr">Thank you very much for your answer. It helps a lot. My Lustre version is 2.10. <div><br></div><div>For thread_min, when I set it to a number larger than 12, everything works well, but when I set it to a number smaller than 12, whatever value I set, it shows 8. </div><div><br></div><div>   # lctl set_param ost.OSS.ost.threads_min=10<br>    ost.OSS.ost.threads_min=10<br>    # lctl get_param ost.OSS.ost.threads_min<br>    ost.OSS.ost.threads_max=8<br></div><div><br></div><div>My cluster has 4 OSS and 3 clients.</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Nov 3, 2020 at 5:00 PM Andreas Dilger &lt;<a href="mailto:adilger@dilger.ca">adilger@dilger.ca</a>&gt; wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On Nov 3, 2020, at 9:25 AM, Youbiao He &lt;<a href="mailto:yh54@iastate.edu" target="_blank">yh54@iastate.edu</a>&gt; wrote:<br>
&gt; I have installed lustre file system on CentOS. It works well when I write or read files. But when I try to set the thread_started and thread_min for oss services, I met the following problem.<br>
<br>
It is always important to include the Lustre release version that you are using in any problem report.<br>
<br>
&gt; To set parameters, I run: &quot;sudo lctl set_param ost.OSS.ost.threads_started=36&quot;<br>
&gt; then, I check the setting value by running: &quot;lctl get_param ost.OSS.ost.threads_started&quot;, and then it shows &quot;ost.OSS.ost.threads_started=21&quot;. So I can not change the parameter &quot;ost.OSS.ost.threads_started&quot;.<br>
<br>
The &quot;threads_started&quot; parameter is read-only, and lists the number of threads currently running. I agree that &quot;lctl set_param&quot; should probably print an error for the user in this case.  You can see which parameters are writable by the &#39;=&#39; after the parameter name:<br>
<br>
    $ lctl list_param -F ost.OSS.ost.threads*<br>
    ost.OSS.ost.threads_max=<br>
    ost.OSS.ost.threads_min=<br>
    ost.OSS.ost.threads_started<br>
<br>
The underlying writable /proc or /sys files also has mode 644 instead of 444:<br>
<br>
    $ ls -l /proc/fs/lustre/ost/OSS/ost/threads_*<br>
    0 -rw-r--r-- 1 root root 0 Nov  3 15:53 /proc/fs/lustre/ost/OSS/ost/threads_max<br>
    0 -rw-r--r-- 1 root root 0 Nov  3 15:53 /proc/fs/lustre/ost/OSS/ost/threads_min<br>
    0 -r--r--r-- 1 root root 0 Nov  3 15:53 /proc/fs/lustre/ost/OSS/ost/threads_started<br>
<br>
There *is* an non-zero command status returned to the caller, but it is not obvious:<br>
<br>
    # lctl set_param ost.OSS.ost.threads_started=38<br>
    # echo $?<br>
    5<br>
<br>
<br>
&gt; Another problem is on the parameter &quot;ost.OSS.ost.threads_min&quot;, When I set it to 10 using lctl, and it shows the parameter is set to 8, not 10.<br>
<br>
In my testing, this seems to work OK:<br>
<br>
    # lctl get_param ost.OSS.ost.*thread*<br>
    ost.OSS.ost.threads_max=64<br>
    ost.OSS.ost.threads_min=3<br>
    ost.OSS.ost.threads_started=36<br>
    # lctl set_param ost.OSS.ost.threads_min=8<br>
    ost.OSS.ost.threads_min=8<br>
    # lctl get_param ost.OSS.ost.*thread*<br>
    ost.OSS.ost.threads_max=64<br>
    ost.OSS.ost.threads_min=8<br>
    ost.OSS.ost.threads_started=36<br>
<br>
Writing to threads_min at runtime doesn&#39;t change the current number of running threads.  More service threads are only started when there are enough concurrently processed requests to start new threads, but it will no longer *stop* threads once threads_min is hit.<br>
<br>
    # lctl set_param ost.OSS.ost.threads_min=48<br>
    ost.OSS.ost.threads_min=48<br>
    # lctl get_param ost.OSS.ost.threads*<br>
    ost.OSS.ost.threads_max=64<br>
    ost.OSS.ost.threads_min=48<br>
    ost.OSS.ost.threads_started=36<br>
<br>
Cheers, Andreas<br>
<br>
<br>
<br>
<br>
<br>
</blockquote></div>