<div dir="ltr"><div>Hello!</div><div><br></div>erts_schedule is the function that is responsible to selecting which thing to run next (port, process, etc). When trying to figure out what it should run it takes a bunch of locks, some of them are spinlocks. You should not really be spending all that much time in this function, so something is fishy.<div><br></div><div>It could be that the lcnt emulator has a bug/feature that could explain this, so (as you say) try running without it and see if you get the same problem.</div><div>It could be that lcnt+perf has some bug.</div><div>Or it could be something completely different that I can't think of.</div><div><br></div><div>Lukas</div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Jun 23, 2021 at 11:00 AM Max Lapshin <<a href="mailto:max.lapshin@gmail.com">max.lapshin@gmail.com</a>> 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">I've clicked 'a' on this erts_schedule and see following:<br>
<br>
<br>
Percent│ mov erts_msacc_enabled,%eax<br>
│ movq $0x0,0x20(%rsp)<br>
│ test %eax,%eax<br>
│ ↓ je 7e3<br>
│ mov erts_msacc_key,%edi<br>
│ → callq ethr_tsd_get<br>
│ mov %rax,0x20(%rsp)<br>
│ 7e3: test %ebx,%ebx<br>
│ movl $0x1,0x18(%rsp)<br>
│ ↓ jne 1702<br>
│ 7f3: mov 0xb0(%r14),%eax<br>
│ test %eax,%eax<br>
│ ↓ je 1660<br>
│ movabs $0x7fffffffffffffff,%r13<br>
│ xor %ebx,%ebx<br>
│ 80e: mov $0x64,%edx<br>
│ ↓ jmp 826<br>
4.73 │ 815: subl $0x1,0x2c(%rsp)<br>
1.64 │ mov 0x2c(%rsp),%eax<br>
1.31 │ ┌──test %eax,%eax<br>
│ ├──jle 15a0<br>
0.03 │ 826:│ mov 0x18(%rbp),%r12d<br>
0.01 │ │ mov %r12d,%eax<br>
│ │ and $0x9,%eax<br>
0.67 │ │ cmp $0x9,%eax<br>
│ │↓ jne 15a0<br>
86.62 │ │ pause<br>
0.06 │ │ sub $0x1,%edx<br>
3.92 │ │↑ jne 815<br>
0.16 │ │→ callq sched_yield@plt<br>
0.00 │ │ test %eax,%eax<br>
│ │ mov $0x64,%edx<br>
<br>
<br>
<br>
<br>
82% on some instruction pause<br>
<br>
I will try to run this again on non-lcnt beam, but seems that this is<br>
somewhere around spinlock?<br>
<br>
On Wed, Jun 23, 2021 at 11:39 AM Max Lapshin <<a href="mailto:max.lapshin@gmail.com" target="_blank">max.lapshin@gmail.com</a>> wrote:<br>
><br>
> Perf report shows me things that I cannot analyse:<br>
><br>
><br>
> + 63.85% 51.25% streamer beam.lcnt.smp [.] erts_schedule<br>
> + 59.99% 0.02% streamer beam.lcnt.smp [.]<br>
> erts_dirty_process_main<br>
> + 29.50% 0.04% streamer jitted-881027-8664.so [.]<br>
> gen_server:handle_msg/6<br>
> + 25.66% 0.04% streamer jitted-881027-34178.so [.]<br>
> mpts_reader:handle_info/2<br>
><br>
><br>
> mpts_reader is my code and thanks for pointing out to me that it seems<br>
> to be the CPU eater.<br>
><br>
> I cannot understand what means that erts_schedule takes 63 / 51% of time.<br>
> Is erts_schedule a container to all functions below?<br>
</blockquote></div>