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

Reply via email to