Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Motivation ---------- After doing some performance testing of cbbackupmgr we noticed that we were spending a significant amount of CPU time in gocbcore. We'd like to reduce this as much as possible to free up CPU time for cbbackupmgr. Changes ------- 1) Avoid unnecessary allocations of DCP packets/TCP write buffers 2) Avoid unnecessary branching using if statements in the golden path where a switch statement would suffice. 3) Rewrote the memdopmap implementation to use a map structure instead of a doubly linked list structure. This avoids linear traversal for each request which depending on the scenario could result in not-insignificant overhead. 4) Added the ability to disable buffer acknowledgement via a option using the DCP agent. 5) Use a 20MB buffered reader on each memcached connection, the same size as used by KV engine. Benchmarking Setup ------------------ 8GB Ephemeral bucket on a single node 7.0.0 cluster, caches on client/server being flushed prior to each test case. DCP tests performed using a barebones DCP drain tool which streams data from the cluster and immediatly discards it. Memcached tests performed using cbbackupmgr generate, results should be taken with a grain of salt. DCP 10,000,000 * 1B ------------------- 1) 33.4s @ 18.27MB/s (103% CPU) 2) 32.7s @ 18.62MB/s (103% CPU) 3) 31.9s @ 19.12MB/s (108% CPU) DCP 10,000,000 * 1B (patched) ----------------------------- 1) 23.7s @ 25.73MB/s (53% CPU) 2) 23.9s @ 25.47MB/s (53% CPU) 3) 22.6s @ 26.93MB/s (57% CPU) DCP 10,000,000 * 1B (patched + disabled buffer ack) --------------------------------------------------- 1) 23.9s @ 25.51MB/s (53% CPU) 2) 24.6s @ 24.81MB/s (55% CPU) 3) 24.6s @ 24.61MB/s (50% CPU) DCP 5,000,000 * 1024B --------------------- 1) 18.4s @ 280.61MB/s (147% CPU) 2) 18.2s @ 283.30MB/s (149% CPU) 3) 18.3s @ 282.90MB/s (148% CPU) DCP 5,000,000 * 1024B (patched) ------------------------------- 1) 18.5s @ 279.31MB/s (62% CPU) 2) 17.9s @ 288.25MB/s (64% CPU) 3) 18.4s @ 280.18MB/s (62% CPU) DCP 5,000,000 * 1024B (patched + disabled buffer ack) ----------------------------------------------------- 1) 18.6s @ 277.42MB/s (58% CPU) 2) 17.5s @ 294.99MB/s (61% CPU) 3) 18.4s @ 280.39MB/s (59% CPU) Memcached 10,000,000 * 1B ------------------------- 1) 54.7s @ 11.30MB/s (293% CPU) 2) 54.7s @ 11.30MB/s (293% CPU) 3) 55.3s @ 11.10MB/s (290% CPU) Memcached 10,000,000 * 1B (patched) ----------------------------------- 1) 51.3s @ 11.97MB/s (197% CPU) 2) 53.2s @ 11.52MB/s (189% CPU) 3) 52.6s @ 11.74MB/s (191% CPU) Memcached 5,000,000 * 1024B --------------------------- 1) 54.6s @ 95.90MB/s (236% CPU) 2) 51.0s @ 103.5MB/s (247% CPU) 3) 51.2s @ 101.5MB/s (248% CPU) Memcached 5,000,000 * 1024B (patched) ------------------------------------- 1) 52.8s @ 99.59MB/s (166% CPU) 2) 49.0s @ 105.6MB/s (174% CPU) 3) 48.7s @ 107.8MB/s (172% CPU) Change-Id: I945207f8e70cd83a3f3ed14409ae6beb82fb182c Reviewed-on: http://review.couchbase.org/c/gocbcore/+/145436 Reviewed-by: Brett Lawson <brett19@gmail.com> Reviewed-by: Charles Dixon <chvckd@gmail.com> Tested-by: James Lee <james.lee@couchbase.com>
- Loading branch information