<div dir="ltr">Simon, Tung-Han,<div><br></div><div>You may also want to watch these tickets that seem to be related to the issue you describe:</div><div><a href="https://jira.whamcloud.com/browse/LU-14124">https://jira.whamcloud.com/browse/LU-14124</a><br></div><div><a href="https://jira.whamcloud.com/browse/LU-14125">https://jira.whamcloud.com/browse/LU-14125</a><br></div><div><br></div><div>-Nathan</div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Nov 2, 2020 at 7:18 AM Simon Guilbault &lt;<a href="mailto:simon.guilbault@calculquebec.ca">simon.guilbault@calculquebec.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"><div dir="ltr"><div>Hi,</div><div><br></div>If you set it on the MGS, it will be the new default for all the clients and new mount on the FS, the problem is you need LU-12759 (fixed in 2.12.4) on your clients since there was a bug on older clients and that setting was not working correctly.</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Nov 2, 2020 at 12:38 AM Tung-Han Hsieh &lt;<a href="mailto:thhsieh@twcp1.phys.ntu.edu.tw" target="_blank">thhsieh@twcp1.phys.ntu.edu.tw</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">Dear Simon,<br>
<br>
Following your suggestions, now we confirmed that the problem of<br>
dropping I/O performance of a client when there is a continous<br>
I/O in the background is solved. It works charming. Thank you so<br>
much !!<br>
<br>
Here is a final question. We found that this command:<br>
<br>
        lctl set_param osc.*.grant_shrink=0<br>
<br>
can be run the client, which fixed the value of &quot;cur_grant_bytes&quot;<br>
to be the highest value 1880752127, and thereby fixed the problem.<br>
Whenever we remount the file system (I mean, explicitly umount and<br>
mount the file system), we need to execute this command again to<br>
set it to zero.<br>
<br>
But this command:<br>
<br>
        lctl set_param -P osc.*.grant_shrink=0<br>
<br>
has to be run in the MGS node. Only setting it in MGS but without<br>
setting in the client, it seems that the &quot;cur_grant_bytes&quot; of the<br>
testing client still dropping under the background continous I/O.<br>
So I am asking what&#39;s the meaning of this setting in MGS node.<br>
<br>
Thank you very much.<br>
<br>
<br>
T.H.Hsieh<br>
<br>
On Fri, Oct 30, 2020 at 01:37:01PM +0800, Tung-Han Hsieh wrote:<br>
&gt; Dear Simon,<br>
&gt; <br>
&gt; Thank you very much for your useful information. Now we are arranging<br>
&gt; the system maintenance date in order to upgrade to Lustre-2.12.5. Then<br>
&gt; we will follow your suggestion to see whether this problem could be<br>
&gt; fixed.<br>
&gt; <br>
&gt; Here I report a test of under continuous I/O, how the cur_grant_bytes<br>
&gt; changed overtime. Again the client runs the following script for<br>
&gt; continuous reading in the background:<br>
&gt; <br>
&gt;     # The Lustre file system was mounted under /home<br>
&gt;     while [ 1 ]; do<br>
&gt;         tar cf - /home/large/data | ssh remote_host &quot;cat &gt; /dev/null&quot;<br>
&gt;     done<br>
&gt; <br>
&gt; And every 20 mins, in the same client we copied a 600MB file from one<br>
&gt; directory to another within Lustre, and check the &quot;cur_grant_bytes&quot; by<br>
&gt; the following command running in the same client:<br>
&gt; <br>
&gt;     /opt/lustre/sbin/lctl get_param osc.*.cur_grant_bytes<br>
&gt; <br>
&gt; The result is (every line separated by around 20 mins):<br>
&gt; <br>
&gt; osc.chome-OST0000-osc-ffff88a039150000.cur_grant_bytes=1880752127<br>
&gt; osc.chome-OST0000-osc-ffff88a039150000.cur_grant_bytes=1410564096<br>
&gt; osc.chome-OST0000-osc-ffff88a039150000.cur_grant_bytes=1059201024<br>
&gt; osc.chome-OST0000-osc-ffff88a039150000.cur_grant_bytes=794400768<br>
&gt; osc.chome-OST0000-osc-ffff88a039150000.cur_grant_bytes=595800576<br>
&gt; osc.chome-OST0000-osc-ffff88a039150000.cur_grant_bytes=446850432<br>
&gt; osc.chome-OST0000-osc-ffff88a039150000.cur_grant_bytes=335137824<br>
&gt; osc.chome-OST0000-osc-ffff88a039150000.cur_grant_bytes=251353368<br>
&gt; osc.chome-OST0000-osc-ffff88a039150000.cur_grant_bytes=188515026<br>
&gt; osc.chome-OST0000-osc-ffff88a039150000.cur_grant_bytes=141386270<br>
&gt; osc.chome-OST0000-osc-ffff88a039150000.cur_grant_bytes=106039703<br>
&gt; osc.chome-OST0000-osc-ffff88a039150000.cur_grant_bytes=79529778<br>
&gt; osc.chome-OST0000-osc-ffff88a039150000.cur_grant_bytes=59647334<br>
&gt; osc.chome-OST0000-osc-ffff88a039150000.cur_grant_bytes=44735501<br>
&gt; osc.chome-OST0000-osc-ffff88a039150000.cur_grant_bytes=33551626<br>
&gt; osc.chome-OST0000-osc-ffff88a039150000.cur_grant_bytes=25163720<br>
&gt; osc.chome-OST0000-osc-ffff88a039150000.cur_grant_bytes=18872790<br>
&gt; osc.chome-OST0000-osc-ffff88a039150000.cur_grant_bytes=14154593<br>
&gt; osc.chome-OST0000-osc-ffff88a039150000.cur_grant_bytes=10615945<br>
&gt; osc.chome-OST0000-osc-ffff88a039150000.cur_grant_bytes=7961959<br>
&gt; osc.chome-OST0000-osc-ffff88a039150000.cur_grant_bytes=5971470<br>
&gt; osc.chome-OST0000-osc-ffff88a039150000.cur_grant_bytes=4478603<br>
&gt; osc.chome-OST0000-osc-ffff88a039150000.cur_grant_bytes=3358953<br>
&gt; osc.chome-OST0000-osc-ffff88a039150000.cur_grant_bytes=2519215<br>
&gt; osc.chome-OST0000-osc-ffff88a039150000.cur_grant_bytes=1889412<br>
&gt; osc.chome-OST0000-osc-ffff88a039150000.cur_grant_bytes=1417059<br>
&gt; osc.chome-OST0000-osc-ffff88a039150000.cur_grant_bytes=1062795<br>
&gt; osc.chome-OST0000-osc-ffff88a039150000.cur_grant_bytes=797097<br>
&gt; osc.chome-OST0000-osc-ffff88a039150000.cur_grant_bytes=797097<br>
&gt; ....<br>
&gt; <br>
&gt; The value 797097 seems to be the minimum. When it dropped to 1062795,<br>
&gt; the time of cp dramatically increased from around 1 sec to 1 min. In<br>
&gt; addition, during the test, the cluster is completely idling. And it<br>
&gt; is obvious that this test does not saturate the loading of both network<br>
&gt; and MDT / OST hardware (they have almost no loading).<br>
&gt; <br>
&gt; I am wondering whether this could be a bug to report to the development<br>
&gt; team.<br>
&gt; <br>
&gt; Best Regards,<br>
&gt; <br>
&gt; T.H.Hsieh<br>
&gt; <br>
&gt; On Thu, Oct 29, 2020 at 09:49:42AM -0400, Simon Guilbault wrote:<br>
&gt; &gt; Our current workaround was to use the following command on the MGS with<br>
&gt; &gt; Lustre 2.12.5 that include the patches in LU-12651 and LU-12759 (we were<br>
&gt; &gt; using a patched 2.12.4 a few months ago):<br>
&gt; &gt; lctl set_param -P osc.*.grant_shrink=0<br>
&gt; &gt; <br>
&gt; &gt; We could not find the root cause of the underlying problem, dynamic grant<br>
&gt; &gt; shrinking seems to be useful when the OSTs are running out of free space.<br>
&gt; &gt; <br>
&gt; &gt; On Wed, Oct 28, 2020 at 11:47 PM Tung-Han Hsieh &lt;<br>
&gt; &gt; <a href="mailto:thhsieh@twcp1.phys.ntu.edu.tw" target="_blank">thhsieh@twcp1.phys.ntu.edu.tw</a>&gt; wrote:<br>
&gt; &gt; <br>
&gt; &gt; &gt; Dear Simon,<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; Thank you very much for your hint. Yes, you are right. We compared<br>
&gt; &gt; &gt; the grant size of two client by (running in each client):<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;         lctl get_param osc.*.cur_grant_bytes<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; - Client A: It has run the following large data transfer for over 36 hrs.<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;         while [ 1 ]; do<br>
&gt; &gt; &gt;             tar cf - /home/large/data | ssh remote_host &quot;cat &gt; /dev/null&quot;<br>
&gt; &gt; &gt;         done<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;   The value of &quot;cur_grant_bytes&quot; is 796134.<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; - Client B: It is almost idling during the action of Client A.<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;   The value of &quot;cur_grant_bytes&quot; is 1715863552.<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; If this is the reason that hit the I/O performance of Client A seriously,<br>
&gt; &gt; &gt; is it possible to maintain it at a constant value at least for the head<br>
&gt; &gt; &gt; node (since the head node is the most probable one to have large and long<br>
&gt; &gt; &gt; time data I/O of the whole cluster, especially for a data center) ?<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; I would be also like to ask: Why this value has to be dynamically adjusted<br>
&gt; &gt; &gt; ?<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; Thank you very much for your comment in advance.<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; Best Regards,<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; T.H.Hsieh<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; On Wed, Oct 28, 2020 at 02:00:21PM -0400, Simon Guilbault wrote:<br>
&gt; &gt; &gt; &gt; Hi, we had a similar performance problem on our login/DTNs node a few<br>
&gt; &gt; &gt; &gt; months ago, the problem was the grant size was shrinking and was getting<br>
&gt; &gt; &gt; &gt; stuck under 1MB. Once under 1MB, the client had to send every request to<br>
&gt; &gt; &gt; &gt; the OST using sync IO.<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; Check the output of the following command:<br>
&gt; &gt; &gt; &gt; lctl get_param osc.*.cur_grant_bytes<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; On Wed, Oct 28, 2020 at 12:08 AM Tung-Han Hsieh &lt;<br>
&gt; &gt; &gt; &gt; <a href="mailto:thhsieh@twcp1.phys.ntu.edu.tw" target="_blank">thhsieh@twcp1.phys.ntu.edu.tw</a>&gt; wrote:<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; Dear All,<br>
&gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; Sorry that I am not sure whether this mail was successfully posted to<br>
&gt; &gt; &gt; &gt; &gt; the lustre-discuss mailing list or not. So I resent it again. Please<br>
&gt; &gt; &gt; &gt; &gt; ignore it if you already read it before.<br>
&gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; ===========================================================================<br>
&gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; Dear Andreas,<br>
&gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; Thank you very much for your kindly suggestions. These days I got a<br>
&gt; &gt; &gt; chance<br>
&gt; &gt; &gt; &gt; &gt; to follow your suggestions for the test. This email is to report the<br>
&gt; &gt; &gt; &gt; &gt; results<br>
&gt; &gt; &gt; &gt; &gt; I have done so far. What I have done were:<br>
&gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; 1. Upgrade one client (with Infiniband) to Lustre 2.13.56_44_gf8a8d3f<br>
&gt; &gt; &gt; &gt; &gt;    (obtained from github). The compiling information is:<br>
&gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt;    - Linux kernel 4.19.123.<br>
&gt; &gt; &gt; &gt; &gt;    - Infiniband MLNX_OFED_SRC-4.6-1.0.1.1.<br>
&gt; &gt; &gt; &gt; &gt;    - ./configure --prefix=/opt/lustre \<br>
&gt; &gt; &gt; &gt; &gt;                  --with-o2ib=/path/of/mlnx-ofed-kernel-4.6 \<br>
&gt; &gt; &gt; &gt; &gt;                  --disable-server --enable-mpitests=no<br>
&gt; &gt; &gt; &gt; &gt;    - make<br>
&gt; &gt; &gt; &gt; &gt;    - make install<br>
&gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; 2. We mounted the lustre file system (lustre MDT/OST servers: version<br>
&gt; &gt; &gt; &gt; &gt;    2.12.4 with Infiniband with ZFS backend) by this command:<br>
&gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt;    - mount -t lustre -o flock mdt@o2ib:/chome /home<br>
&gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; 3. The script to simulate large data transfer is following:<br>
&gt; &gt; &gt; &gt; &gt;    (the directory &quot;/home/large/data&quot; contains 758 files, each size<br>
&gt; &gt; &gt; 600MB)<br>
&gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt;    while [ 1 ]; do<br>
&gt; &gt; &gt; &gt; &gt;        tar cf - /home/large/data | ssh remote_host &quot;cat &gt; /dev/null&quot;<br>
&gt; &gt; &gt; &gt; &gt;    done<br>
&gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt;    ps. Note that this scenario is common in a large data center, while<br>
&gt; &gt; &gt; &gt; &gt;        some users transferring large data out of the data center<br>
&gt; &gt; &gt; through<br>
&gt; &gt; &gt; &gt; &gt;        the head node; while other users might copy files and do their<br>
&gt; &gt; &gt; &gt; &gt;        normal works in the same head node.<br>
&gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; 4. During the data transfer in the background, I occationally ran this<br>
&gt; &gt; &gt; &gt; &gt;    command in the same client to test whether there is any abnormality<br>
&gt; &gt; &gt; &gt; &gt;    in I/O performance (where /home/dir1/file has size 600MB):<br>
&gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt;    cp /home/dir1/file /home/dir2/<br>
&gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt;    In the beginning this command can complete in about 1 sec. But after<br>
&gt; &gt; &gt; &gt; &gt;    around 18 hours (not exactly, because the test ran overnight while<br>
&gt; &gt; &gt; &gt; &gt;    I was sleeping), the problem appeared. The time to complete the same<br>
&gt; &gt; &gt; &gt; &gt;    cp command was more than 1 minute.<br>
&gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt;    During the test, I am sure that the whole cluster was idling. The<br>
&gt; &gt; &gt; MDT<br>
&gt; &gt; &gt; &gt; &gt;    and OST servers did not have other loading. The CPU usage of the<br>
&gt; &gt; &gt; testing<br>
&gt; &gt; &gt; &gt; &gt;    client was below 0.3.<br>
&gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt;    Then I stopped the test, and let the whole system completely idle.<br>
&gt; &gt; &gt; But<br>
&gt; &gt; &gt; &gt; &gt;    after 3 hours, the I/O abnormality of the same &quot;cp&quot; command was<br>
&gt; &gt; &gt; still<br>
&gt; &gt; &gt; &gt; &gt;    there. Only after I unmounted /home and remounted /home, the<br>
&gt; &gt; &gt; abnormality<br>
&gt; &gt; &gt; &gt; &gt;    of &quot;cp&quot; recovered to normal.<br>
&gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; Before and after remounting /home (which I call &quot;reset&quot;), I did the<br>
&gt; &gt; &gt; &gt; &gt; following tests:<br>
&gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; 1. Using &quot;top&quot; to check the memory usage:<br>
&gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; Before reset:<br>
&gt; &gt; &gt; &gt; &gt; =====================================<br>
&gt; &gt; &gt; &gt; &gt; top - 10:43:15 up 35 days, 52 min,  3 users,  load average: 0.00, 0.00,<br>
&gt; &gt; &gt; &gt; &gt; 0.00<br>
&gt; &gt; &gt; &gt; &gt; Tasks: 404 total,   1 running, 162 sleeping,   0 stopped,   0 zombie<br>
&gt; &gt; &gt; &gt; &gt; %Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,<br>
&gt; &gt; &gt; &gt; &gt; 0.0 st<br>
&gt; &gt; &gt; &gt; &gt; KiB Mem : 13232632+total, 13000131+free,   647784 used,  1677220<br>
&gt; &gt; &gt; buff/cache<br>
&gt; &gt; &gt; &gt; &gt; KiB Swap: 15631240 total, 15631240 free,        0 used. 13076376+avail<br>
&gt; &gt; &gt; Mem<br>
&gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; After reset:<br>
&gt; &gt; &gt; &gt; &gt; =====================================<br>
&gt; &gt; &gt; &gt; &gt; top - 10:48:02 up 35 days, 57 min,  3 users,  load average: 0.04, 0.01,<br>
&gt; &gt; &gt; &gt; &gt; 0.00<br>
&gt; &gt; &gt; &gt; &gt; Tasks: 395 total,   1 running, 159 sleeping,   0 stopped,   0 zombie<br>
&gt; &gt; &gt; &gt; &gt; %Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,<br>
&gt; &gt; &gt; &gt; &gt; 0.0 st<br>
&gt; &gt; &gt; &gt; &gt; KiB Mem : 13232632+total, 12946539+free,   675948 used,  2184976<br>
&gt; &gt; &gt; buff/cache<br>
&gt; &gt; &gt; &gt; &gt; KiB Swap: 15631240 total, 15631240 free,        0 used. 13073571+avail<br>
&gt; &gt; &gt; Mem<br>
&gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt;    It seems that most of the memory were in &quot;free&quot; state. The amount of<br>
&gt; &gt; &gt; &gt; &gt;    hidden memory was neglectable. So I did not further investigate the<br>
&gt; &gt; &gt; &gt; &gt;    amount of slab memory.<br>
&gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; 2. Using &quot;strace&quot; with the following commands:<br>
&gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt;    - Before reset (took 1 min of each cp):<br>
&gt; &gt; &gt; &gt; &gt;      strace -c -o /tmp/log2-err.txt cp /home/dir1/file /home/dir2/<br>
&gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt;    - After reset (took 1 sec of each cp):<br>
&gt; &gt; &gt; &gt; &gt;      strace -c -o /tmp/log2-reset.txt cp /home/dir1/file /home/dir2/<br>
&gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt;    From the log files, the major time consuming was read and write<br>
&gt; &gt; &gt; &gt; &gt; syscalls.<br>
&gt; &gt; &gt; &gt; &gt;    The others are neglectable.<br>
&gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt;    % time     seconds  usecs/call     calls    errors syscall<br>
&gt; &gt; &gt; &gt; &gt;    ------ ----------- ----------- --------- --------- ----------------<br>
&gt; &gt; &gt; &gt; &gt;    (Before reset)<br>
&gt; &gt; &gt; &gt; &gt;     71.46    0.278424        1920       145           write<br>
&gt; &gt; &gt; &gt; &gt;     28.06    0.109322         705       155           read<br>
&gt; &gt; &gt; &gt; &gt;    (After reset)<br>
&gt; &gt; &gt; &gt; &gt;     52.92    0.299091        2063       145           write<br>
&gt; &gt; &gt; &gt; &gt;     46.85    0.264777        1708       155           read<br>
&gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt;    Before reset, since we have done the cp test for the same file a<br>
&gt; &gt; &gt; &gt; &gt;    few times, the file was already cached. So the reading time is<br>
&gt; &gt; &gt; &gt; &gt;    smaller before reset than that after reset (since after reset /home<br>
&gt; &gt; &gt; &gt; &gt;    was remounted).<br>
&gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt;    Hence from this result, the time of syscalls looks normal. The<br>
&gt; &gt; &gt; &gt; &gt;    performance drop seems occuring in other places.<br>
&gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; Now I haven&#39;t done the investigation of Lustre kernel debug log by<br>
&gt; &gt; &gt; enabling<br>
&gt; &gt; &gt; &gt; &gt; Lustre debug=-1. We will find another chance to do it.<br>
&gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; Up to now, any comments or suggestions are very welcome.<br>
&gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; Thanks for your help in advance.<br>
&gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; Best Regards,<br>
&gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; T.H.Hsieh<br>
&gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; On Thu, Oct 08, 2020 at 01:32:53PM -0600, Andreas Dilger wrote:<br>
&gt; &gt; &gt; &gt; &gt; &gt; On Oct 8, 2020, at 10:37 AM, Tung-Han Hsieh &lt;<br>
&gt; &gt; &gt; &gt; &gt; <a href="mailto:thhsieh@twcp1.phys.ntu.edu.tw" target="_blank">thhsieh@twcp1.phys.ntu.edu.tw</a>&gt; wrote:<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; Dear All,<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; In the past months, we encountered several times of Lustre I/O<br>
&gt; &gt; &gt; &gt; &gt; abnormally<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; slowing down. It is quite mysterious that there seems no problem<br>
&gt; &gt; &gt; on the<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; network hardware, nor the lustre itself since there is no error<br>
&gt; &gt; &gt; message<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; at all in MDT/OST/client sides.<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; Recently we probably found a way to reproduce it, and then have<br>
&gt; &gt; &gt; some<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; suspections. We found that if we continuously perform I/O on a<br>
&gt; &gt; &gt; client<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; without stop, then after some time threshold (probably more than 24<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; hours), the additional file I/O bandwidth of that client will be<br>
&gt; &gt; &gt; &gt; &gt; shriked<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; dramatically.<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; Our configuration is the following:<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; - One MDT and one OST server, based on ZFS + Lustre-2.12.4.<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; - The OST is served by a RAID 5 system with 15 SAS hard disks.<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; - Some clients connect to MDT/OST through Infiniband, some through<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt;  gigabit ethernet.<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; Our test was focused on the clients using infiniband, which is<br>
&gt; &gt; &gt; &gt; &gt; described<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; in the following:<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; We have a huge (several TB) amount of data stored in the Lustre<br>
&gt; &gt; &gt; file<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; system to be transferred to outside network. In order not to<br>
&gt; &gt; &gt; exhaust<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; the network bandwidth of our institute, we transfer the data with<br>
&gt; &gt; &gt; &gt; &gt; limited<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; bandwidth via the following command:<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; rsync -av --bwlimit=1000 &lt;data_in_Lustre&gt;<br>
&gt; &gt; &gt; &gt; &gt; &lt;out_side_server&gt;:/&lt;out_side_path&gt;/<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; That is, the transferring rate is 1 MB per second, which is<br>
&gt; &gt; &gt; relatively<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; low. The client read the data from Lustre through infiniband. So<br>
&gt; &gt; &gt; during<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; data transmission, presumably there is no problem to do other data<br>
&gt; &gt; &gt; I/O<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; on the same client. On average, when copy a 600 MB file from one<br>
&gt; &gt; &gt; &gt; &gt; directory<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; to another directory (both in the same Lustre file system), it took<br>
&gt; &gt; &gt; &gt; &gt; about<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; 1.0 - 2.0 secs, even when the rsync process still working.<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; But after about 24 hours of continuously sending data via rsync,<br>
&gt; &gt; &gt; the<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; additional I/O on the same client was dramatically shrinked. When<br>
&gt; &gt; &gt; it<br>
&gt; &gt; &gt; &gt; &gt; happens,<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; it took more than 1 minute to copy a 600 MB from somewhere to<br>
&gt; &gt; &gt; another<br>
&gt; &gt; &gt; &gt; &gt; place<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; (both in the same Lustre) while rsync is still running.<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; Then, we stopped the rsync process, and wait for a while (about one<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; hour). The I/O performance of copying that 600 MB file returns<br>
&gt; &gt; &gt; normal.<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; Based on this observation, we are suspecting that whether there is<br>
&gt; &gt; &gt; a<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; hidden QoS mechanism built in Lustre ? When a process occupies the<br>
&gt; &gt; &gt; I/O<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; bandwidth for a long time and exceeded some limits, does Lustre<br>
&gt; &gt; &gt; &gt; &gt; automatically<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; shrinked the I/O bandwidth for all processes running in the same<br>
&gt; &gt; &gt; &gt; &gt; client ?<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; I am not against such QoS design, if it does exist. But the amount<br>
&gt; &gt; &gt; of<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; shrinking seems to be too large for infiniband (QDR and above).<br>
&gt; &gt; &gt; Then<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; I am further suspecting that whether this is due to that our<br>
&gt; &gt; &gt; system is<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; mixed with clients in which some have infiniband but some do not ?<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; Could anyone help to fix this problem ? Any suggestions will be<br>
&gt; &gt; &gt; very<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; appreciated.<br>
&gt; &gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt; There is no &quot;hidden QOS&quot;, unless it is so well hidden that I don&#39;t<br>
&gt; &gt; &gt; know<br>
&gt; &gt; &gt; &gt; &gt; &gt; about it.<br>
&gt; &gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt; You could investigate several different things to isolate the<br>
&gt; &gt; &gt; problem:<br>
&gt; &gt; &gt; &gt; &gt; &gt; - try with a 2.13.56 client to see if the problem is already fixed<br>
&gt; &gt; &gt; &gt; &gt; &gt; - check if the client is using a lot of CPU when it becomes slow<br>
&gt; &gt; &gt; &gt; &gt; &gt; - run strace on your copy process to see which syscalls are slow<br>
&gt; &gt; &gt; &gt; &gt; &gt; - check memory/slab usage<br>
&gt; &gt; &gt; &gt; &gt; &gt; - enable Lustre debug=-1 and dump the kernel debug log to see where<br>
&gt; &gt; &gt; &gt; &gt; &gt;   the process is taking a long time to complete a request<br>
&gt; &gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt; It is definitely possible that there is some kind of problem, since<br>
&gt; &gt; &gt; this<br>
&gt; &gt; &gt; &gt; &gt; &gt; is not a very common workload to be continuously writing to the same<br>
&gt; &gt; &gt; file<br>
&gt; &gt; &gt; &gt; &gt; &gt; descriptor for over a day.  You&#39;ll have to do the investigation on<br>
&gt; &gt; &gt; your<br>
&gt; &gt; &gt; &gt; &gt; &gt; system to isolate the source of the problem.<br>
&gt; &gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt; Cheers, Andreas<br>
&gt; &gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; _______________________________________________<br>
&gt; &gt; &gt; &gt; &gt; lustre-discuss mailing list<br>
&gt; &gt; &gt; &gt; &gt; <a href="mailto:lustre-discuss@lists.lustre.org" target="_blank">lustre-discuss@lists.lustre.org</a><br>
&gt; &gt; &gt; &gt; &gt; <a href="http://lists.lustre.org/listinfo.cgi/lustre-discuss-lustre.org" rel="noreferrer" target="_blank">http://lists.lustre.org/listinfo.cgi/lustre-discuss-lustre.org</a><br>
&gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt;<br>
</blockquote></div>
_______________________________________________<br>
lustre-discuss mailing list<br>
<a href="mailto:lustre-discuss@lists.lustre.org" target="_blank">lustre-discuss@lists.lustre.org</a><br>
<a href="http://lists.lustre.org/listinfo.cgi/lustre-discuss-lustre.org" rel="noreferrer" target="_blank">http://lists.lustre.org/listinfo.cgi/lustre-discuss-lustre.org</a><br>
</blockquote></div>