<div dir="ltr">I'm running CPU bound task (make thumbnails from video) in a NIF under  erlang 17 (erts 6.0)<div><br></div><div>I'm using dirty nif scheduling:</div><div><br></div><div><div>static ERL_NIF_TERM</div>
<div>yuv2jpeg0(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]) {</div></div><div>....</div><div>}</div><div><br></div><div><br></div><div><div>static ERL_NIF_TERM</div><div>async_jpeg(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]) {</div>
<div>  ERL_NIF_TERM result = yuv2jpeg0(env, argc, argv);</div><div>  return enif_schedule_dirty_nif_finalizer(env, result, enif_dirty_nif_finalizer);</div><div>}</div><div><br></div><div><br></div><div>static ERL_NIF_TERM</div>
<div>yuv2jpeg(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]) {</div><div>  return enif_schedule_dirty_nif(env, ERL_NIF_DIRTY_JOB_CPU_BOUND, async_jpeg, argc, argv);</div><div>}</div></div><div><br></div><div>I see strange situation: none of CPU core is not 100% loaded, but processes that are calling yuv2jpeg function are hanging in this function:</div>
<div><br></div><div><br></div><div>







<p class="">(<a href="mailto:flussonic@127.0.0.1">flussonic@127.0.0.1</a>)3> process_info(pid(0,961,0)).                  </p>
<p class="">[{current_function,{avcodec,yuv2jpeg0,4}},</p>
<p class=""> {initial_call,{proc_lib,init_p,5}},</p>
<p class=""> {status,runnable},</p>
<p class=""> {message_queue_len,11},</p>
<p class=""> {messages,[{jpeg,[{video_frame,video,37885047.833333336,</p>
<p class="">                                37885047.833333336,0,h264,keyframe,1,</p>
<p class="">                                <<0,0,0,2,9,240,0,0,21,...>>,</p></div><div><br></div><div><br></div><div>I suppose that I could meet the old problem with wrong scheduler behaviour when NIF is using thread for too long.</div>
<div><br></div><div>yuv2jpeg takes usually about 2-4 milliseconds to run.</div><div><br></div><div>Is it possible to debug this situation? Can I somehow ask erlang if it decided that some scheduler is considered idle?</div>
<div><br></div><div>I launch erlang so:</div><div><br></div><div>







<p class="">erlang/erts-6.0/bin/beam.smp -K true -Bi -A 100 -a 32 -stbt s -MBas aoffcaobf -MBacul 0</p><p class=""><br></p><p class=""><br></p></div></div>