[erlang-bugs] efile_drv & async thread key
Tue Aug 13 13:52:19 CEST 2013
And there it is, conclusive proof that I should not be debugging
Rickard's code before lunch.
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 :)
On 13/08/13 10:05, Lukas Larsson wrote:
> Sigh, apparently I spoke too soon.
> 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.
> On 13/08/13 09:40, Lukas Larsson wrote:
>> Hello Rick!
>> 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.
>> On 13/08/13 05:40, Rick Reed wrote:
>>> It looks to me as though there's a bit of a problem in the way
>>> efile_drv.c generates the
>>> key that's used to select an async driver queue. It uses the
>>> address of the port which
>>> on our system is 8-byte aligned. Meanwhile, erl_async.c does a
>>> simple mod operation
>>> with the number of async threads, so the number of threads that can
>>> actually be used
>>> by file operations is 1/8th of the number configured. I suspect
>>> this isn't intended.
>>> erlang-bugs mailing list
>> erlang-bugs mailing list
> erlang-bugs mailing list
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the erlang-bugs