/Users/deen/code/yugabyte-db/src/yb/rocksdb/util/perf_context.cc
Line | Count | Source |
1 | | // Copyright (c) 2011-present, Facebook, Inc. All rights reserved. |
2 | | // This source code is licensed under the BSD-style license found in the |
3 | | // LICENSE file in the root directory of this source tree. An additional grant |
4 | | // of patent rights can be found in the PATENTS file in the same directory. |
5 | | // |
6 | | // The following only applies to changes made to this file as part of YugaByte development. |
7 | | // |
8 | | // Portions Copyright (c) YugaByte, Inc. |
9 | | // |
10 | | // Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except |
11 | | // in compliance with the License. You may obtain a copy of the License at |
12 | | // |
13 | | // http://www.apache.org/licenses/LICENSE-2.0 |
14 | | // |
15 | | // Unless required by applicable law or agreed to in writing, software distributed under the License |
16 | | // is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express |
17 | | // or implied. See the License for the specific language governing permissions and limitations |
18 | | // under the License. |
19 | | // |
20 | | #include <sstream> |
21 | | |
22 | | #include "yb/rocksdb/perf_context.h" |
23 | | |
24 | | namespace rocksdb { |
25 | | |
26 | | #if defined(NPERF_CONTEXT) || defined(IOS_CROSS_COMPILE) |
27 | | PerfContext perf_context; |
28 | | #elif _WIN32 |
29 | | __declspec(thread) PerfContext perf_context; |
30 | | #else |
31 | | __thread PerfContext perf_context; |
32 | | #endif |
33 | | |
34 | 842k | void PerfContext::Reset() { |
35 | 842k | #if !defined(NPERF_CONTEXT) && !defined(IOS_CROSS_COMPILE) |
36 | 842k | user_key_comparison_count = 0; |
37 | 842k | block_cache_hit_count = 0; |
38 | 842k | block_read_count = 0; |
39 | 842k | block_read_byte = 0; |
40 | 842k | block_read_time = 0; |
41 | 842k | block_checksum_time = 0; |
42 | 842k | block_decompress_time = 0; |
43 | 842k | internal_key_skipped_count = 0; |
44 | 842k | internal_delete_skipped_count = 0; |
45 | 842k | write_wal_time = 0; |
46 | | |
47 | 842k | get_snapshot_time = 0; |
48 | 842k | get_from_memtable_time = 0; |
49 | 842k | get_from_memtable_count = 0; |
50 | 842k | get_post_process_time = 0; |
51 | 842k | get_from_output_files_time = 0; |
52 | 842k | seek_on_memtable_time = 0; |
53 | 842k | seek_on_memtable_count = 0; |
54 | 842k | seek_child_seek_time = 0; |
55 | 842k | seek_child_seek_count = 0; |
56 | 842k | seek_min_heap_time = 0; |
57 | 842k | seek_internal_seek_time = 0; |
58 | 842k | find_next_user_entry_time = 0; |
59 | 842k | write_pre_and_post_process_time = 0; |
60 | 842k | write_memtable_time = 0; |
61 | 842k | write_delay_time = 0; |
62 | 842k | db_mutex_lock_nanos = 0; |
63 | 842k | db_condition_wait_nanos = 0; |
64 | 842k | merge_operator_time_nanos = 0; |
65 | 842k | read_index_block_nanos = 0; |
66 | 842k | read_filter_block_nanos = 0; |
67 | 842k | new_table_block_iter_nanos = 0; |
68 | 842k | new_table_iterator_nanos = 0; |
69 | 842k | block_seek_nanos = 0; |
70 | 842k | find_table_nanos = 0; |
71 | 842k | bloom_memtable_hit_count = 0; |
72 | 842k | bloom_memtable_miss_count = 0; |
73 | 842k | bloom_sst_hit_count = 0; |
74 | 842k | bloom_sst_miss_count = 0; |
75 | 842k | #endif |
76 | 842k | } |
77 | | |
78 | | #define PERF_CONTEXT_OUTPUT(counter) \ |
79 | 76 | if (!exclude_zero_counters || (counter > 0)38 ) { \ |
80 | 39 | ss << #counter << " = " << counter << ", "; \ |
81 | 39 | } |
82 | | |
83 | 2 | std::string PerfContext::ToString(bool exclude_zero_counters) const { |
84 | | #if defined(NPERF_CONTEXT) || defined(IOS_CROSS_COMPILE) |
85 | | return ""; |
86 | | #else |
87 | 2 | std::ostringstream ss; |
88 | 2 | PERF_CONTEXT_OUTPUT(user_key_comparison_count); |
89 | 2 | PERF_CONTEXT_OUTPUT(block_cache_hit_count); |
90 | 2 | PERF_CONTEXT_OUTPUT(block_read_count); |
91 | 2 | PERF_CONTEXT_OUTPUT(block_read_byte); |
92 | 2 | PERF_CONTEXT_OUTPUT(block_read_time); |
93 | 2 | PERF_CONTEXT_OUTPUT(block_checksum_time); |
94 | 2 | PERF_CONTEXT_OUTPUT(block_decompress_time); |
95 | 2 | PERF_CONTEXT_OUTPUT(internal_key_skipped_count); |
96 | 2 | PERF_CONTEXT_OUTPUT(internal_delete_skipped_count); |
97 | 2 | PERF_CONTEXT_OUTPUT(write_wal_time); |
98 | 2 | PERF_CONTEXT_OUTPUT(get_snapshot_time); |
99 | 2 | PERF_CONTEXT_OUTPUT(get_from_memtable_time); |
100 | 2 | PERF_CONTEXT_OUTPUT(get_from_memtable_count); |
101 | 2 | PERF_CONTEXT_OUTPUT(get_post_process_time); |
102 | 2 | PERF_CONTEXT_OUTPUT(get_from_output_files_time); |
103 | 2 | PERF_CONTEXT_OUTPUT(seek_on_memtable_time); |
104 | 2 | PERF_CONTEXT_OUTPUT(seek_on_memtable_count); |
105 | 2 | PERF_CONTEXT_OUTPUT(seek_child_seek_time); |
106 | 2 | PERF_CONTEXT_OUTPUT(seek_child_seek_count); |
107 | 2 | PERF_CONTEXT_OUTPUT(seek_min_heap_time); |
108 | 2 | PERF_CONTEXT_OUTPUT(seek_internal_seek_time); |
109 | 2 | PERF_CONTEXT_OUTPUT(find_next_user_entry_time); |
110 | 2 | PERF_CONTEXT_OUTPUT(write_pre_and_post_process_time); |
111 | 2 | PERF_CONTEXT_OUTPUT(write_memtable_time); |
112 | 2 | PERF_CONTEXT_OUTPUT(db_mutex_lock_nanos); |
113 | 2 | PERF_CONTEXT_OUTPUT(db_condition_wait_nanos); |
114 | 2 | PERF_CONTEXT_OUTPUT(merge_operator_time_nanos); |
115 | 2 | PERF_CONTEXT_OUTPUT(write_delay_time); |
116 | 2 | PERF_CONTEXT_OUTPUT(read_index_block_nanos); |
117 | 2 | PERF_CONTEXT_OUTPUT(read_filter_block_nanos); |
118 | 2 | PERF_CONTEXT_OUTPUT(new_table_block_iter_nanos); |
119 | 2 | PERF_CONTEXT_OUTPUT(new_table_iterator_nanos); |
120 | 2 | PERF_CONTEXT_OUTPUT(block_seek_nanos); |
121 | 2 | PERF_CONTEXT_OUTPUT(find_table_nanos); |
122 | 2 | PERF_CONTEXT_OUTPUT(bloom_memtable_hit_count); |
123 | 2 | PERF_CONTEXT_OUTPUT(bloom_memtable_miss_count); |
124 | 2 | PERF_CONTEXT_OUTPUT(bloom_sst_hit_count); |
125 | 2 | PERF_CONTEXT_OUTPUT(bloom_sst_miss_count); |
126 | 2 | return ss.str(); |
127 | 2 | #endif |
128 | 2 | } |
129 | | |
130 | | } // namespace rocksdb |