[
https://issues.apache.org/jira/browse/COUCHDB-2732?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14624974#comment-14624974
]
ASF GitHub Bot commented on COUCHDB-2732:
-----------------------------------------
GitHub user davisp opened a pull request:
https://github.com/apache/couchdb-couch/pull/71
Optimize couch_ejson_compare NIF
The old nif was allocating a set of collators that were reserved and
released by each scheduler thread. This coordination and the
accompanying mutex turned into a global point of contention when many
schedulers were using couch_ejson_compare.
This change removes the stack based concurrency control in favor of a
`__thread variable`. We end up with the same number of collators but
without any overhead around locking a central mutex.
This increases performance by roughly a factor of five.
COUCHDB-2732
You can merge this pull request into a Git repository by running:
$ git pull https://github.com/cloudant/couchdb-couch
2732-optimize-couch-ejson-compare
Alternatively you can review and apply these changes as the patch at:
https://github.com/apache/couchdb-couch/pull/71.patch
To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:
This closes #71
----
commit 6b38dfacbb97c5cb7c89a27115d1227c7c52dbba
Author: Paul J. Davis <[email protected]>
Date: 2015-07-13T17:14:09Z
Optimize couch_ejson_compare NIF
The old nif was allocating a set of collators that were reserved and
released by each scheduler thread. This coordination and the
accompanying mutex turned into a global point of contention when many
schedulers were using couch_ejson_compare.
This change removes the stack based concurrency control in favor of a
`__thread variable`. We end up with the same number of collators but
without any overhead around locking a central mutex.
This increases performance by roughly a factor of five.
COUCHDB-2732
----
> Use thread local storage for couch_ejson_compare NIF
> ----------------------------------------------------
>
> Key: COUCHDB-2732
> URL: https://issues.apache.org/jira/browse/COUCHDB-2732
> Project: CouchDB
> Issue Type: Improvement
> Security Level: public(Regular issues)
> Reporter: Adam Kocoloski
>
> Some folks inside IBM have demonstrated conclusively that the NIF we use for
> JSON sorting is a significant bottleneck with more than a few concurrent
> users hitting us. The VM ends up spending all of its time dealing with lock
> contention. We'd be better off sticking with the pure Erlang code, but we
> have an even better alternative, which is to use thread local storage to pin
> an allocator to each OS thread and eliminate the locks.
> Patch forthcoming, but I wanted to make sure this got in the tracker. The
> improvement looks really signficant. Interestingly, there was some discussion
> about a performance regression after this was introduced back in COUCHDB-1186
> ... maybe the missing element in that discussion was the client concurrency?
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)