<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>