<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">Hi! Thanks for your reply!<br class=""><div class="">
<div dir="auto" style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><div>--</div><div>Serge Petrenko</div><div><a href="mailto:sergepetrenko@tarantool.org" class="">sergepetrenko@tarantool.org</a></div><div class=""><br class=""></div></div><br class="Apple-interchange-newline"><br class="Apple-interchange-newline">

</div>
<div><br class=""><blockquote type="cite" class=""><div class="">20 нояб. 2019 г., в 4:44, Alexander Turenko <<a href="mailto:alexander.turenko@tarantool.org" class="">alexander.turenko@tarantool.org</a>> написал(а):</div><br class="Apple-interchange-newline"><div class=""><div class="">It still shows miscompares for me:<br class=""><br class="">$ cat /proc/cpuinfo | grep processor | wc -l<br class="">8<br class="">$ (cd test && ./test-run.py $(yes fiber.test.lua | head -n 1000))<br class=""><br class="">commit aefc64faaf7bfbb58ac53bf5abea55d1faabcbfe<br class=""><br class="">The miscompare looks so:<br class=""><br class="">[006] Test failed! Result content mismatch:<br class="">[006] --- app/fiber.result<span class="Apple-tab-span" style="white-space:pre">    </span>Tue Nov 19 20:39:21 2019<br class="">[006] +++ app/fiber.reject<span class="Apple-tab-span" style="white-space:pre">     </span>Wed Nov 20 04:33:39 2019<br class="">[006] @@ -1525,7 +1525,7 @@<br class="">[006]  -- disable the test above.<br class="">[006]  sum_avg <= 100 or sum_avg<br class="">[006]  ---<br class="">[006] -- true<br class="">[006] +- 100<br class="">[006]  ...<br class="">[006]  -- not exact due to accumulated integer division errors<br class="">[006]  --sum_avg > 99 and sum_avg <= 100 or sum_avg<br class=""><br class="">Maybe it is some rounding issue.<br class=""><br class="">When I changed the condition to sum_avg <= 101, I got:<br class=""><br class="">[015] Test failed! Result content mismatch:<br class="">[015] --- app/fiber.result<span class="Apple-tab-span" style="white-space:pre">     </span>Wed Nov 20 04:35:14 2019<br class="">[015] +++ app/fiber.reject<span class="Apple-tab-span" style="white-space:pre">     </span>Wed Nov 20 04:35:36 2019<br class="">[015] @@ -1512,7 +1512,7 @@<br class="">[015]  ...<br class="">[015]  sum_inst<br class="">[015]  ---<br class="">[015] -- 100<br class="">[015] +- 45.802853351342<br class="">[015]  ...<br class="">[015]  -- when a fiber dies, its impact on the thread moving average<br class="">[015]  -- persists for a couple of ev loop iterations, but it is no<br class=""><br class="">Sorry, but it does not look okay for me in the sense that it may lead to<br class="">problems in testing: we already have enough ones.<br class=""><br class="">Let's provide a test that will work stable or describe why it is not<br class="">possible. In the latter case we can extract an unstable test case and<br class="">mark it as fragile using suite.ini test-run's option. It will not<br class="">strictly close the problem, but will lower its probability.<br class=""><br class="">Maybe we can even retry such tests or allows them to fail:<br class=""><a href="https://github.com/tarantool/test-run/issues/189" class="">https://github.com/tarantool/test-run/issues/189</a><br class=""><br class="">Anyway, if those fixes descrease probability of fails, I don't mind.<br class="">Just noted that a further work may be needed.<br class=""></div></div></blockquote><div><br class=""></div><div>Well, yes, they do. Just try to run this test before the patch.</div><div>Anyway, I guess you’re right that we shouldn’t leave flaky tests if</div><div>possible, so I commented the flaky pieces out and added a request to</div><div>reenable them once #4625 (List dead fibers in <a href="http://fiber.top" class="">fiber.top</a>() output) is</div><div>implemented.</div><div><br class=""></div><div>The diff’s below. Now 1000 out of 1000 tests pass with 16 concurrent</div><div>jobs, at least on my machine.</div><div><br class=""></div><br class=""><blockquote type="cite" class=""><div class=""><div class=""><br class="">WBR, Alexander Turenko.<br class=""><br class="">On Tue, Nov 19, 2019 at 11:57:11PM +0100, Vladislav Shpilevoy wrote:<br class=""><blockquote type="cite" class="">Hi! Thanks for the fixes!<br class=""><br class="">LGTM.<br class=""><br class="">On 18/11/2019 17:05, Serge Petrenko wrote:<br class=""><blockquote type="cite" class="">The first patch factors all the clock-related members of struct fiber and struct<br class="">cord into appropriate structs and adds methods for their updates and resets.<br class=""><br class="">The second patch fixes exponential moving average calculation so that we do not<br class="">experience huge numbers in average load percentage calculations.<br class=""><br class="">The third patch alters <a href="http://fiber.top" class="">fiber.top</a>() test to wait for correct output before<br class="">testing it. <br class=""><br class="">Follow-up <a href="https://github.com/tarantool/tarantool/issues/2694" class="">https://github.com/tarantool/tarantool/issues/2694</a><br class="">Branch <a href="https://github.com/tarantool/tarantool/tree/sp/gh-2694-test-fixup" class="">https://github.com/tarantool/tarantool/tree/sp/gh-2694-test-fixup</a><br class=""><br class="">Changes in v3:<br class=""> - introduce a new patch which refactors all the clock stat<br class="">   handling.<br class=""> - introduce a patch fixing EMA calculation<br class=""> - review fixes as per review from Vladislav<br class=""><br class="">Changes in v2:<br class=""> - clean up all fibers clock stats on fiber.top_enable()<br class=""> - push 0 instead of NaN when cord clock_delta_last is 0<br class=""> - review fixes as per review from Vladislav<br class=""><br class="">Serge Petrenko (3):<br class="">  <a href="http://fiber.top" class="">fiber.top</a>() refactor clock and cpu time calculation<br class="">  <a href="http://fiber.top" class="">fiber.top</a>(): alter exponential moving average calculation<br class="">  app/fiber: wait till a full event loop iteration ends<br class=""><br class=""> src/lib/core/fiber.c    | 175 ++++++++++++++++++++++++----------------<br class=""> src/lib/core/fiber.h    | 109 +++++++++++++++++--------<br class=""> src/lua/fiber.c         |  20 +++--<br class=""> test/app/fiber.result   |  38 ++++++---<br class=""> test/app/fiber.test.lua |  36 +++++++--<br class=""> 5 files changed, 252 insertions(+), 126 deletions(-)<br class=""><br class=""></blockquote></blockquote></div></div></blockquote></div><br class=""><div class=""><br class=""></div><div class=""><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">diff --git a/test/app/fiber.result b/test/app/fiber.result</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">index b767bbb59..6d9604ad8 100644</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">--- a/test/app/fiber.result</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">+++ b/test/app/fiber.result</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">@@ -1510,25 +1510,21 @@ for k, v in pairs(a) do\</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class=""> end</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class=""> ---</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class=""> ...</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">-sum_inst</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">----</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">-- 100</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">-...</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class=""> -- when a fiber dies, its impact on the thread moving average</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class=""> -- persists for a couple of ev loop iterations, but it is no</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class=""> -- longer listed in <a href="http://fiber.top" class="">fiber.top</a>(). So sum_avg may way smaller than</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">--- 100%. See gh-4625 for details and reenable the test below as</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">+-- 100%. See gh-4625 for details and reenable both tests below as</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class=""> -- soon as it is implemented.</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class=""> -- In rare cases when a fiber dies on the same event loop</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class=""> -- iteration as you issue <a href="http://fiber.top" class="">fiber.top</a>(), sum_inst will also be</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">--- smaller than 100%, but it is so rare I don't even want to</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">--- disable the test above.</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">-sum_avg <= 100 or sum_avg</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">+-- smaller than 100%.</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">+-- sum_inst</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">+sum_avg <= 100.1 or sum_avg</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class=""> ---</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class=""> - true</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class=""> ...</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class=""> -- not exact due to accumulated integer division errors</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">---sum_avg > 99 and sum_avg <= 100 or sum_avg</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">+--sum_avg > 99 and sum_avg <= 100.1 or sum_avg</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class=""> tbl = nil</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class=""> ---</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class=""> ...</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">diff --git a/test/app/fiber.test.lua b/test/app/fiber.test.lua</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">index 7f7350acc..6df210d9c 100644</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">--- a/test/app/fiber.test.lua</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">+++ b/test/app/fiber.test.lua</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">@@ -658,19 +658,18 @@ for k, v in pairs(a) do\</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">     sum_avg = sum_avg + v["average"]\</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class=""> end</span></div><p style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo; min-height: 13px;" class=""><span style="font-variant-ligatures: no-common-ligatures" class=""> </span><br class="webkit-block-placeholder"></p><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">-sum_inst</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class=""> -- when a fiber dies, its impact on the thread moving average</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class=""> -- persists for a couple of ev loop iterations, but it is no</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class=""> -- longer listed in <a href="http://fiber.top" class="">fiber.top</a>(). So sum_avg may way smaller than</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">--- 100%. See gh-4625 for details and reenable the test below as</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">+-- 100%. See gh-4625 for details and reenable both tests below as</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class=""> -- soon as it is implemented.</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class=""> -- In rare cases when a fiber dies on the same event loop</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class=""> -- iteration as you issue <a href="http://fiber.top" class="">fiber.top</a>(), sum_inst will also be</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">--- smaller than 100%, but it is so rare I don't even want to</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">--- disable the test above.</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">-sum_avg <= 100 or sum_avg</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">+-- smaller than 100%.</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">+-- sum_inst</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">+sum_avg <= 100.1 or sum_avg</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class=""> -- not exact due to accumulated integer division errors</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">---sum_avg > 99 and sum_avg <= 100 or sum_avg</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">+--sum_avg > 99 and sum_avg <= 100.1 or sum_avg</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class=""> tbl = nil</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class=""> f = fiber.new(function()\</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">     local fiber_key = fiber.self().id()..'/'..fiber.self().name()\</span></div></div></body></html>