This is an automated email from the ASF dual-hosted git repository. alexey pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/kudu.git
commit 9d2ae8b2114f0add8e63c6ccd63ac0b9a49079d6 Author: Todd Lipcon <[email protected]> AuthorDate: Mon Mar 2 23:12:37 2020 -0800 tserver: avoid spinlock in scanners hot path This replaces a spinlock protection of the scanner "rows_returned" counter to just be an atomic integer instead. This saved some CPU cycles in the TSBS benchmark. Change-Id: If3c32e94ada847076580e20571440833a8544c57 Reviewed-on: http://gerrit.cloudera.org:8080/15502 Reviewed-by: Adar Dembo <[email protected]> Tested-by: Kudu Jenkins --- src/kudu/tserver/scanners.h | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/kudu/tserver/scanners.h b/src/kudu/tserver/scanners.h index b30bcb9..5f81763 100644 --- a/src/kudu/tserver/scanners.h +++ b/src/kudu/tserver/scanners.h @@ -16,6 +16,7 @@ // under the License. #pragma once +#include <atomic> #include <cstddef> #include <cstdint> #include <memory> @@ -299,13 +300,11 @@ class Scanner { } void add_num_rows_returned(int64_t num_rows_added) { - std::lock_guard<simple_spinlock> l(lock_); num_rows_returned_ += num_rows_added; DCHECK_LE(num_rows_added, num_rows_returned_); } int64_t num_rows_returned() const { - std::lock_guard<simple_spinlock> l(lock_); return num_rows_returned_; } @@ -347,8 +346,7 @@ class Scanner { // The current call sequence ID. uint32_t call_seq_id_; - // Protects last_access_time_ call_seq_id_, iter_, spec_, and - // num_rows_returned_. + // Protects last_access_time_ call_seq_id_, iter_, spec_ mutable simple_spinlock lock_; // The time the scanner was started. @@ -383,7 +381,7 @@ class Scanner { // The number of rows that have been serialized and sent over the wire by // this scanner. - int64_t num_rows_returned_; + std::atomic<int64_t> num_rows_returned_; // The cumulative amounts of wall, user cpu, and system cpu time spent on // this scanner, in seconds.
