<div dir="ltr">I think you have to add at least few writes to see the difference. In your case, all your scheduler threads have soon read lock (RO copy in their CPU cache), so there is no effect of more granular locks.</div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, May 14, 2015 at 8:40 PM, Viacheslav V. Kovalev <span dir="ltr"><<a href="mailto:kovyl2404@gmail.com" target="_blank">kovyl2404@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I have run this test on following installations (without any<br>
dramatical changes, except absolute values).<br>
<br>
2 logical, 1 physical CPU, Erlang/OTP 17 [erts-6.1] [64-bit] [smp:2:2]<br>
[async-threads:10] [hipe]<br>
8 logical, 1 physical CPU, Erlang/OTP 17 [erts-6.4] [64-bit] [smp:8:8]<br>
[async-threads:10] [hipe]<br>
64 logical, 4 physical CPU, Erlang/OTP 17 [erts-6.3] [64-bit]<br>
[smp:64:64] [async-threads:10] [hipe]<br>
<br>
Also I've experimented with kernel-poll options. I believe it is about<br>
another things, but anyway was interested.<br>
<div class="HOEnZb"><div class="h5"><br>
2015-05-14 19:58 GMT+03:00 Sergej Jurecko <<a href="mailto:sergej.jurecko@gmail.com">sergej.jurecko@gmail.com</a>>:<br>
> I think read_concurrency/write_concurrency are about mutexes between schedulers. So if you have 1000 processes on a single scheduler it makes no difference. How many logical cpus did the machine you were executing tests have?<br>
><br>
><br>
> Sergej<br>
><br>
> On 14 May 2015, at 17:50, Viacheslav V. Kovalev <<a href="mailto:kovyl2404@gmail.com">kovyl2404@gmail.com</a>> wrote:<br>
><br>
>>>> - Your two tests which use the read_concurrency option are both setting it to 'true' (lines 31 and 50 in the gist)<br>
>> Ah yep, my fault. Shameful copypaste. However, as you noticed,<br>
>> `{read_concurrency, false}` should be the same as first test with<br>
>> default parameters. When I've fixed this, nothing was changed.<br>
>><br>
>> What about eprof - it is the last thing I've added to this test. With<br>
>> or without profiler - same results (except of absolute values). Main<br>
>> purpose of profiling was to see if `ets:lookup` is really most<br>
>> expensive operation in this test (and this is true).<br>
>><br>
>> Also I've experimented with different sizes of table and different<br>
>> sizes of keys in table. Seems all this things doesn't matter, so I am<br>
>> really confused with this option and have no ideas.<br>
>><br>
>> 2015-05-14 17:52 GMT+03:00 Chandru <<a href="mailto:chandrashekhar.mullaparthi@gmail.com">chandrashekhar.mullaparthi@gmail.com</a>>:<br>
>>> Hi,<br>
>>><br>
>>> A few comments.<br>
>>><br>
>>> - Your two tests which use the read_concurrency option are both setting it<br>
>>> to 'true' (lines 31 and 50 in the gist)<br>
>>><br>
>>> - I wouldn't run profiling when trying to compare two different options. It<br>
>>> could be that the overhead of profiling is masking any differences between<br>
>>> the two use cases.<br>
>>><br>
>>> - Setting {read_concurrency, false} is the same as not specifying it (so in<br>
>>> effect 2 of the tests are the same)<br>
>>><br>
>>> cheers<br>
>>> Chandru<br>
>>><br>
>>><br>
>>> On 14 May 2015 at 11:29, Viacheslav V. Kovalev <<a href="mailto:kovyl2404@gmail.com">kovyl2404@gmail.com</a>> wrote:<br>
>>>><br>
>>>> Hi, List!<br>
>>>><br>
>>>> I'm playing with ets tweaks and specifically with read_concurrency.<br>
>>>> I've written simple test to measure how this tweak impacts on read<br>
>>>> performance. Test implementations is here<br>
>>>> <a href="https://gist.github.com/kovyl2404/826a51b27ba869527910" target="_blank">https://gist.github.com/kovyl2404/826a51b27ba869527910</a><br>
>>>><br>
>>>> Briefly, this test sequentially creates three [public, set] ets tables<br>
>>>> with different read_concurrency options (without any tweaks, with<br>
>>>> {read_concurrency, true} and with {read_concurrency, false}). After<br>
>>>> one table created, test pupulates table with some random data and runs<br>
>>>> N readers (N is power of 2 from 4 to 1024). Readers performs K random<br>
>>>> reads and exists.<br>
>>>><br>
>>>> Result is quite surprising for me. There absolutely no difference<br>
>>>> between 3 these tests. I have run this test on Erlang 17 on 2-, 8-,<br>
>>>> and 64-core machines and could not find any significant performance<br>
>>>> impact from this tweak.<br>
>>>><br>
>>>> Could anybody explain usecase of this tweak? What should I do to see<br>
>>>> any difference and understand when to use this option?<br>
>>>> _______________________________________________<br>
>>>> erlang-questions mailing list<br>
>>>> <a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
>>>> <a href="http://erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
>>><br>
>>><br>
>> _______________________________________________<br>
>> erlang-questions mailing list<br>
>> <a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
>> <a href="http://erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
><br>
_______________________________________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
</div></div></blockquote></div><br></div>