<div dir="ltr">I assume the reason for keying the file requests is to prevent a single port from<div>soaking up all the async threads?</div><div><br></div><div>Rr</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">
On Tue, Aug 13, 2013 at 4:52 AM, Lukas Larsson <span dir="ltr"><<a href="mailto:lukas@erlang.org" target="_blank">lukas@erlang.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div text="#000000" bgcolor="#FFFFFF">
And there it is, conclusive proof that I should not be debugging
Rickard's code before lunch. <br>
<br>
Found the issue, will create a fix for it. As a workaround for R16B
you can use a prime number as the number of async threads :)<span class="HOEnZb"><font color="#888888"><br>
<br>
Lukas</font></span><div><div class="h5"><br>
<br>
<div>On 13/08/13 10:05, Lukas Larsson wrote:<br>
</div>
<blockquote type="cite">
Sigh, apparently I spoke too soon. <br>
<br>
I remembered incorrectly about the change. It was in R16B that
ErlDrvPort became a ptr and it was an id before R16B. Anyways, it
is odd that the ptr is 8 bit aligned on you system. On mine
(Ubuntu 13.04, x86_64) the ptrs are not aligned and the load is
nicely distributed among async threads. If I remember correctly
you are using FreeBSD on x86_64? I'll check if I can reproduce the
behavior you are seeing on our FreeBSD machine. <br>
<br>
Lukas<br>
<br>
<div>On 13/08/13 09:40, Lukas Larsson
wrote:<br>
</div>
<blockquote type="cite">
Hello Rick!<br>
<br>
Which version of Erlang are you using? From R16B (I think), the
ErlDrvPort datatype no longer is a pointer to the port struct.
Instead it is the slot id into the port table and those ids
should contain all values. I did a quick test on my computer
running the latest on maint on github and seem to get a full
spread over all async threads. <br>
<br>
Lukas<br>
<br>
<div>On 13/08/13 05:40, Rick Reed wrote:<br>
</div>
<blockquote type="cite">
<div dir="ltr">It looks to me as though there's a bit of a
problem in the way efile_drv.c generates the
<div>key that's used to select an async driver queue. It
uses the address of the port which</div>
<div>on our system is 8-byte aligned. Meanwhile,
erl_async.c does a simple mod operation</div>
<div>with the number of async threads, so the number of
threads that can actually be used</div>
<div>by file operations is 1/8th of the number configured.
I suspect this isn't intended.</div>
<div><br>
</div>
<div>Rr</div>
<div><br>
</div>
</div>
<br>
<fieldset></fieldset>
<br>
<pre>_______________________________________________
erlang-bugs mailing list
<a href="mailto:erlang-bugs@erlang.org" target="_blank">erlang-bugs@erlang.org</a>
<a href="http://erlang.org/mailman/listinfo/erlang-bugs" target="_blank">http://erlang.org/mailman/listinfo/erlang-bugs</a>
</pre>
</blockquote>
<br>
<br>
<fieldset></fieldset>
<br>
<pre>_______________________________________________
erlang-bugs mailing list
<a href="mailto:erlang-bugs@erlang.org" target="_blank">erlang-bugs@erlang.org</a>
<a href="http://erlang.org/mailman/listinfo/erlang-bugs" target="_blank">http://erlang.org/mailman/listinfo/erlang-bugs</a>
</pre>
</blockquote>
<br>
<br>
<fieldset></fieldset>
<br>
<pre>_______________________________________________
erlang-bugs mailing list
<a href="mailto:erlang-bugs@erlang.org" target="_blank">erlang-bugs@erlang.org</a>
<a href="http://erlang.org/mailman/listinfo/erlang-bugs" target="_blank">http://erlang.org/mailman/listinfo/erlang-bugs</a>
</pre>
</blockquote>
<br>
</div></div></div>
</blockquote></div><br></div>