1 // Copyright 2017 gRPC authors. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 // Automatically generated by tools/codegen/core/gen_stats_data.py 16 17 #ifndef GRPC_SRC_CORE_TELEMETRY_STATS_DATA_H 18 #define GRPC_SRC_CORE_TELEMETRY_STATS_DATA_H 19 20 #include <grpc/support/port_platform.h> 21 #include <stdint.h> 22 23 #include <atomic> 24 #include <memory> 25 26 #include "absl/strings/string_view.h" 27 #include "src/core/telemetry/histogram_view.h" 28 #include "src/core/util/per_cpu.h" 29 30 namespace grpc_core { 31 class HistogramCollector_100000_20; 32 class Histogram_100000_20 { 33 public: 34 static int BucketFor(int value); buckets()35 const uint64_t* buckets() const { return buckets_; } bucket_count()36 size_t bucket_count() const { return 20; } 37 friend Histogram_100000_20 operator-(const Histogram_100000_20& left, 38 const Histogram_100000_20& right); 39 40 private: 41 friend class HistogramCollector_100000_20; 42 uint64_t buckets_[20]{}; 43 }; 44 class HistogramCollector_100000_20 { 45 public: Increment(int value)46 void Increment(int value) { 47 buckets_[Histogram_100000_20::BucketFor(value)].fetch_add( 48 1, std::memory_order_relaxed); 49 } 50 void Collect(Histogram_100000_20* result) const; 51 52 private: 53 std::atomic<uint64_t> buckets_[20]{}; 54 }; 55 class HistogramCollector_65536_26; 56 class Histogram_65536_26 { 57 public: 58 static int BucketFor(int value); buckets()59 const uint64_t* buckets() const { return buckets_; } bucket_count()60 size_t bucket_count() const { return 26; } 61 friend Histogram_65536_26 operator-(const Histogram_65536_26& left, 62 const Histogram_65536_26& right); 63 64 private: 65 friend class HistogramCollector_65536_26; 66 uint64_t buckets_[26]{}; 67 }; 68 class HistogramCollector_65536_26 { 69 public: Increment(int value)70 void Increment(int value) { 71 buckets_[Histogram_65536_26::BucketFor(value)].fetch_add( 72 1, std::memory_order_relaxed); 73 } 74 void Collect(Histogram_65536_26* result) const; 75 76 private: 77 std::atomic<uint64_t> buckets_[26]{}; 78 }; 79 class HistogramCollector_100_20; 80 class Histogram_100_20 { 81 public: 82 static int BucketFor(int value); buckets()83 const uint64_t* buckets() const { return buckets_; } bucket_count()84 size_t bucket_count() const { return 20; } 85 friend Histogram_100_20 operator-(const Histogram_100_20& left, 86 const Histogram_100_20& right); 87 88 private: 89 friend class HistogramCollector_100_20; 90 uint64_t buckets_[20]{}; 91 }; 92 class HistogramCollector_100_20 { 93 public: Increment(int value)94 void Increment(int value) { 95 buckets_[Histogram_100_20::BucketFor(value)].fetch_add( 96 1, std::memory_order_relaxed); 97 } 98 void Collect(Histogram_100_20* result) const; 99 100 private: 101 std::atomic<uint64_t> buckets_[20]{}; 102 }; 103 class HistogramCollector_16777216_20; 104 class Histogram_16777216_20 { 105 public: 106 static int BucketFor(int value); buckets()107 const uint64_t* buckets() const { return buckets_; } bucket_count()108 size_t bucket_count() const { return 20; } 109 friend Histogram_16777216_20 operator-(const Histogram_16777216_20& left, 110 const Histogram_16777216_20& right); 111 112 private: 113 friend class HistogramCollector_16777216_20; 114 uint64_t buckets_[20]{}; 115 }; 116 class HistogramCollector_16777216_20 { 117 public: Increment(int value)118 void Increment(int value) { 119 buckets_[Histogram_16777216_20::BucketFor(value)].fetch_add( 120 1, std::memory_order_relaxed); 121 } 122 void Collect(Histogram_16777216_20* result) const; 123 124 private: 125 std::atomic<uint64_t> buckets_[20]{}; 126 }; 127 class HistogramCollector_80_10; 128 class Histogram_80_10 { 129 public: 130 static int BucketFor(int value); buckets()131 const uint64_t* buckets() const { return buckets_; } bucket_count()132 size_t bucket_count() const { return 10; } 133 friend Histogram_80_10 operator-(const Histogram_80_10& left, 134 const Histogram_80_10& right); 135 136 private: 137 friend class HistogramCollector_80_10; 138 uint64_t buckets_[10]{}; 139 }; 140 class HistogramCollector_80_10 { 141 public: Increment(int value)142 void Increment(int value) { 143 buckets_[Histogram_80_10::BucketFor(value)].fetch_add( 144 1, std::memory_order_relaxed); 145 } 146 void Collect(Histogram_80_10* result) const; 147 148 private: 149 std::atomic<uint64_t> buckets_[10]{}; 150 }; 151 class HistogramCollector_10000_20; 152 class Histogram_10000_20 { 153 public: 154 static int BucketFor(int value); buckets()155 const uint64_t* buckets() const { return buckets_; } bucket_count()156 size_t bucket_count() const { return 20; } 157 friend Histogram_10000_20 operator-(const Histogram_10000_20& left, 158 const Histogram_10000_20& right); 159 160 private: 161 friend class HistogramCollector_10000_20; 162 uint64_t buckets_[20]{}; 163 }; 164 class HistogramCollector_10000_20 { 165 public: Increment(int value)166 void Increment(int value) { 167 buckets_[Histogram_10000_20::BucketFor(value)].fetch_add( 168 1, std::memory_order_relaxed); 169 } 170 void Collect(Histogram_10000_20* result) const; 171 172 private: 173 std::atomic<uint64_t> buckets_[20]{}; 174 }; 175 class HistogramCollector_1800000_40; 176 class Histogram_1800000_40 { 177 public: 178 static int BucketFor(int value); buckets()179 const uint64_t* buckets() const { return buckets_; } bucket_count()180 size_t bucket_count() const { return 40; } 181 friend Histogram_1800000_40 operator-(const Histogram_1800000_40& left, 182 const Histogram_1800000_40& right); 183 184 private: 185 friend class HistogramCollector_1800000_40; 186 uint64_t buckets_[40]{}; 187 }; 188 class HistogramCollector_1800000_40 { 189 public: Increment(int value)190 void Increment(int value) { 191 buckets_[Histogram_1800000_40::BucketFor(value)].fetch_add( 192 1, std::memory_order_relaxed); 193 } 194 void Collect(Histogram_1800000_40* result) const; 195 196 private: 197 std::atomic<uint64_t> buckets_[40]{}; 198 }; 199 struct GlobalStats { 200 enum class Counter { 201 kClientCallsCreated, 202 kServerCallsCreated, 203 kClientChannelsCreated, 204 kClientSubchannelsCreated, 205 kServerChannelsCreated, 206 kInsecureConnectionsCreated, 207 kRqConnectionsDropped, 208 kRqCallsDropped, 209 kRqCallsRejected, 210 kSyscallWrite, 211 kSyscallRead, 212 kTcpReadAlloc8k, 213 kTcpReadAlloc64k, 214 kHttp2SettingsWrites, 215 kHttp2PingsSent, 216 kHttp2WritesBegun, 217 kHttp2TransportStalls, 218 kHttp2StreamStalls, 219 kHttp2HpackHits, 220 kHttp2HpackMisses, 221 kCqPluckCreates, 222 kCqNextCreates, 223 kCqCallbackCreates, 224 kWrrUpdates, 225 kWorkSerializerItemsEnqueued, 226 kWorkSerializerItemsDequeued, 227 kEconnabortedCount, 228 kEconnresetCount, 229 kEpipeCount, 230 kEtimedoutCount, 231 kEconnrefusedCount, 232 kEnetunreachCount, 233 kEnomsgCount, 234 kEnotconnCount, 235 kEnobufsCount, 236 kUncommonIoErrorCount, 237 kMsgErrqueueErrorCount, 238 COUNT 239 }; 240 enum class Histogram { 241 kCallInitialSize, 242 kTcpWriteSize, 243 kTcpWriteIovSize, 244 kTcpReadSize, 245 kTcpReadOffer, 246 kTcpReadOfferIovSize, 247 kHttp2SendMessageSize, 248 kHttp2MetadataSize, 249 kHttp2HpackEntryLifetime, 250 kHttp2HeaderTableSize, 251 kHttp2InitialWindowSize, 252 kHttp2MaxConcurrentStreams, 253 kHttp2MaxFrameSize, 254 kHttp2MaxHeaderListSize, 255 kHttp2PreferredReceiveCryptoMessageSize, 256 kHttp2StreamRemoteWindowUpdate, 257 kHttp2TransportRemoteWindowUpdate, 258 kHttp2TransportWindowUpdatePeriod, 259 kHttp2StreamWindowUpdatePeriod, 260 kWrrSubchannelListSize, 261 kWrrSubchannelReadySize, 262 kWorkSerializerRunTimeMs, 263 kWorkSerializerWorkTimeMs, 264 kWorkSerializerWorkTimePerItemMs, 265 kWorkSerializerItemsPerRun, 266 kChaoticGoodSendmsgsPerWriteControl, 267 kChaoticGoodRecvmsgsPerReadControl, 268 kChaoticGoodSendmsgsPerWriteData, 269 kChaoticGoodRecvmsgsPerReadData, 270 kChaoticGoodThreadHopsPerWriteControl, 271 kChaoticGoodThreadHopsPerReadControl, 272 kChaoticGoodThreadHopsPerWriteData, 273 kChaoticGoodThreadHopsPerReadData, 274 kChaoticGoodTcpReadSizeData, 275 kChaoticGoodTcpReadSizeControl, 276 kChaoticGoodTcpReadOfferData, 277 kChaoticGoodTcpReadOfferControl, 278 kChaoticGoodTcpWriteSizeData, 279 kChaoticGoodTcpWriteSizeControl, 280 COUNT 281 }; 282 GlobalStats(); 283 static const absl::string_view counter_name[static_cast<int>(Counter::COUNT)]; 284 static const absl::string_view 285 histogram_name[static_cast<int>(Histogram::COUNT)]; 286 static const absl::string_view counter_doc[static_cast<int>(Counter::COUNT)]; 287 static const absl::string_view 288 histogram_doc[static_cast<int>(Histogram::COUNT)]; 289 union { 290 struct { 291 uint64_t client_calls_created; 292 uint64_t server_calls_created; 293 uint64_t client_channels_created; 294 uint64_t client_subchannels_created; 295 uint64_t server_channels_created; 296 uint64_t insecure_connections_created; 297 uint64_t rq_connections_dropped; 298 uint64_t rq_calls_dropped; 299 uint64_t rq_calls_rejected; 300 uint64_t syscall_write; 301 uint64_t syscall_read; 302 uint64_t tcp_read_alloc_8k; 303 uint64_t tcp_read_alloc_64k; 304 uint64_t http2_settings_writes; 305 uint64_t http2_pings_sent; 306 uint64_t http2_writes_begun; 307 uint64_t http2_transport_stalls; 308 uint64_t http2_stream_stalls; 309 uint64_t http2_hpack_hits; 310 uint64_t http2_hpack_misses; 311 uint64_t cq_pluck_creates; 312 uint64_t cq_next_creates; 313 uint64_t cq_callback_creates; 314 uint64_t wrr_updates; 315 uint64_t work_serializer_items_enqueued; 316 uint64_t work_serializer_items_dequeued; 317 uint64_t econnaborted_count; 318 uint64_t econnreset_count; 319 uint64_t epipe_count; 320 uint64_t etimedout_count; 321 uint64_t econnrefused_count; 322 uint64_t enetunreach_count; 323 uint64_t enomsg_count; 324 uint64_t enotconn_count; 325 uint64_t enobufs_count; 326 uint64_t uncommon_io_error_count; 327 uint64_t msg_errqueue_error_count; 328 }; 329 uint64_t counters[static_cast<int>(Counter::COUNT)]; 330 }; 331 Histogram_65536_26 call_initial_size; 332 Histogram_16777216_20 tcp_write_size; 333 Histogram_80_10 tcp_write_iov_size; 334 Histogram_16777216_20 tcp_read_size; 335 Histogram_16777216_20 tcp_read_offer; 336 Histogram_80_10 tcp_read_offer_iov_size; 337 Histogram_16777216_20 http2_send_message_size; 338 Histogram_65536_26 http2_metadata_size; 339 Histogram_1800000_40 http2_hpack_entry_lifetime; 340 Histogram_16777216_20 http2_header_table_size; 341 Histogram_16777216_20 http2_initial_window_size; 342 Histogram_16777216_20 http2_max_concurrent_streams; 343 Histogram_16777216_20 http2_max_frame_size; 344 Histogram_16777216_20 http2_max_header_list_size; 345 Histogram_16777216_20 http2_preferred_receive_crypto_message_size; 346 Histogram_16777216_20 http2_stream_remote_window_update; 347 Histogram_16777216_20 http2_transport_remote_window_update; 348 Histogram_100000_20 http2_transport_window_update_period; 349 Histogram_100000_20 http2_stream_window_update_period; 350 Histogram_10000_20 wrr_subchannel_list_size; 351 Histogram_10000_20 wrr_subchannel_ready_size; 352 Histogram_100000_20 work_serializer_run_time_ms; 353 Histogram_100000_20 work_serializer_work_time_ms; 354 Histogram_100000_20 work_serializer_work_time_per_item_ms; 355 Histogram_10000_20 work_serializer_items_per_run; 356 Histogram_100_20 chaotic_good_sendmsgs_per_write_control; 357 Histogram_100_20 chaotic_good_recvmsgs_per_read_control; 358 Histogram_100_20 chaotic_good_sendmsgs_per_write_data; 359 Histogram_100_20 chaotic_good_recvmsgs_per_read_data; 360 Histogram_100_20 chaotic_good_thread_hops_per_write_control; 361 Histogram_100_20 chaotic_good_thread_hops_per_read_control; 362 Histogram_100_20 chaotic_good_thread_hops_per_write_data; 363 Histogram_100_20 chaotic_good_thread_hops_per_read_data; 364 Histogram_16777216_20 chaotic_good_tcp_read_size_data; 365 Histogram_16777216_20 chaotic_good_tcp_read_size_control; 366 Histogram_16777216_20 chaotic_good_tcp_read_offer_data; 367 Histogram_16777216_20 chaotic_good_tcp_read_offer_control; 368 Histogram_16777216_20 chaotic_good_tcp_write_size_data; 369 Histogram_16777216_20 chaotic_good_tcp_write_size_control; 370 HistogramView histogram(Histogram which) const; 371 std::unique_ptr<GlobalStats> Diff(const GlobalStats& other) const; 372 }; 373 class GlobalStatsCollector { 374 public: 375 std::unique_ptr<GlobalStats> Collect() const; IncrementClientCallsCreated()376 void IncrementClientCallsCreated() { 377 data_.this_cpu().client_calls_created.fetch_add(1, 378 std::memory_order_relaxed); 379 } IncrementServerCallsCreated()380 void IncrementServerCallsCreated() { 381 data_.this_cpu().server_calls_created.fetch_add(1, 382 std::memory_order_relaxed); 383 } IncrementClientChannelsCreated()384 void IncrementClientChannelsCreated() { 385 data_.this_cpu().client_channels_created.fetch_add( 386 1, std::memory_order_relaxed); 387 } IncrementClientSubchannelsCreated()388 void IncrementClientSubchannelsCreated() { 389 data_.this_cpu().client_subchannels_created.fetch_add( 390 1, std::memory_order_relaxed); 391 } IncrementServerChannelsCreated()392 void IncrementServerChannelsCreated() { 393 data_.this_cpu().server_channels_created.fetch_add( 394 1, std::memory_order_relaxed); 395 } IncrementInsecureConnectionsCreated()396 void IncrementInsecureConnectionsCreated() { 397 data_.this_cpu().insecure_connections_created.fetch_add( 398 1, std::memory_order_relaxed); 399 } IncrementRqConnectionsDropped()400 void IncrementRqConnectionsDropped() { 401 data_.this_cpu().rq_connections_dropped.fetch_add( 402 1, std::memory_order_relaxed); 403 } IncrementRqCallsDropped()404 void IncrementRqCallsDropped() { 405 data_.this_cpu().rq_calls_dropped.fetch_add(1, std::memory_order_relaxed); 406 } IncrementRqCallsRejected()407 void IncrementRqCallsRejected() { 408 data_.this_cpu().rq_calls_rejected.fetch_add(1, std::memory_order_relaxed); 409 } IncrementSyscallWrite()410 void IncrementSyscallWrite() { 411 data_.this_cpu().syscall_write.fetch_add(1, std::memory_order_relaxed); 412 } IncrementSyscallRead()413 void IncrementSyscallRead() { 414 data_.this_cpu().syscall_read.fetch_add(1, std::memory_order_relaxed); 415 } IncrementTcpReadAlloc8k()416 void IncrementTcpReadAlloc8k() { 417 data_.this_cpu().tcp_read_alloc_8k.fetch_add(1, std::memory_order_relaxed); 418 } IncrementTcpReadAlloc64k()419 void IncrementTcpReadAlloc64k() { 420 data_.this_cpu().tcp_read_alloc_64k.fetch_add(1, std::memory_order_relaxed); 421 } IncrementHttp2SettingsWrites()422 void IncrementHttp2SettingsWrites() { 423 data_.this_cpu().http2_settings_writes.fetch_add(1, 424 std::memory_order_relaxed); 425 } IncrementHttp2PingsSent()426 void IncrementHttp2PingsSent() { 427 data_.this_cpu().http2_pings_sent.fetch_add(1, std::memory_order_relaxed); 428 } IncrementHttp2WritesBegun()429 void IncrementHttp2WritesBegun() { 430 data_.this_cpu().http2_writes_begun.fetch_add(1, std::memory_order_relaxed); 431 } IncrementHttp2TransportStalls()432 void IncrementHttp2TransportStalls() { 433 data_.this_cpu().http2_transport_stalls.fetch_add( 434 1, std::memory_order_relaxed); 435 } IncrementHttp2StreamStalls()436 void IncrementHttp2StreamStalls() { 437 data_.this_cpu().http2_stream_stalls.fetch_add(1, 438 std::memory_order_relaxed); 439 } IncrementHttp2HpackHits()440 void IncrementHttp2HpackHits() { 441 data_.this_cpu().http2_hpack_hits.fetch_add(1, std::memory_order_relaxed); 442 } IncrementHttp2HpackMisses()443 void IncrementHttp2HpackMisses() { 444 data_.this_cpu().http2_hpack_misses.fetch_add(1, std::memory_order_relaxed); 445 } IncrementCqPluckCreates()446 void IncrementCqPluckCreates() { 447 data_.this_cpu().cq_pluck_creates.fetch_add(1, std::memory_order_relaxed); 448 } IncrementCqNextCreates()449 void IncrementCqNextCreates() { 450 data_.this_cpu().cq_next_creates.fetch_add(1, std::memory_order_relaxed); 451 } IncrementCqCallbackCreates()452 void IncrementCqCallbackCreates() { 453 data_.this_cpu().cq_callback_creates.fetch_add(1, 454 std::memory_order_relaxed); 455 } IncrementWrrUpdates()456 void IncrementWrrUpdates() { 457 data_.this_cpu().wrr_updates.fetch_add(1, std::memory_order_relaxed); 458 } IncrementWorkSerializerItemsEnqueued()459 void IncrementWorkSerializerItemsEnqueued() { 460 data_.this_cpu().work_serializer_items_enqueued.fetch_add( 461 1, std::memory_order_relaxed); 462 } IncrementWorkSerializerItemsDequeued()463 void IncrementWorkSerializerItemsDequeued() { 464 data_.this_cpu().work_serializer_items_dequeued.fetch_add( 465 1, std::memory_order_relaxed); 466 } IncrementEconnabortedCount()467 void IncrementEconnabortedCount() { 468 data_.this_cpu().econnaborted_count.fetch_add(1, std::memory_order_relaxed); 469 } IncrementEconnresetCount()470 void IncrementEconnresetCount() { 471 data_.this_cpu().econnreset_count.fetch_add(1, std::memory_order_relaxed); 472 } IncrementEpipeCount()473 void IncrementEpipeCount() { 474 data_.this_cpu().epipe_count.fetch_add(1, std::memory_order_relaxed); 475 } IncrementEtimedoutCount()476 void IncrementEtimedoutCount() { 477 data_.this_cpu().etimedout_count.fetch_add(1, std::memory_order_relaxed); 478 } IncrementEconnrefusedCount()479 void IncrementEconnrefusedCount() { 480 data_.this_cpu().econnrefused_count.fetch_add(1, std::memory_order_relaxed); 481 } IncrementEnetunreachCount()482 void IncrementEnetunreachCount() { 483 data_.this_cpu().enetunreach_count.fetch_add(1, std::memory_order_relaxed); 484 } IncrementEnomsgCount()485 void IncrementEnomsgCount() { 486 data_.this_cpu().enomsg_count.fetch_add(1, std::memory_order_relaxed); 487 } IncrementEnotconnCount()488 void IncrementEnotconnCount() { 489 data_.this_cpu().enotconn_count.fetch_add(1, std::memory_order_relaxed); 490 } IncrementEnobufsCount()491 void IncrementEnobufsCount() { 492 data_.this_cpu().enobufs_count.fetch_add(1, std::memory_order_relaxed); 493 } IncrementUncommonIoErrorCount()494 void IncrementUncommonIoErrorCount() { 495 data_.this_cpu().uncommon_io_error_count.fetch_add( 496 1, std::memory_order_relaxed); 497 } IncrementMsgErrqueueErrorCount()498 void IncrementMsgErrqueueErrorCount() { 499 data_.this_cpu().msg_errqueue_error_count.fetch_add( 500 1, std::memory_order_relaxed); 501 } IncrementCallInitialSize(int value)502 void IncrementCallInitialSize(int value) { 503 data_.this_cpu().call_initial_size.Increment(value); 504 } IncrementTcpWriteSize(int value)505 void IncrementTcpWriteSize(int value) { 506 data_.this_cpu().tcp_write_size.Increment(value); 507 } IncrementTcpWriteIovSize(int value)508 void IncrementTcpWriteIovSize(int value) { 509 data_.this_cpu().tcp_write_iov_size.Increment(value); 510 } IncrementTcpReadSize(int value)511 void IncrementTcpReadSize(int value) { 512 data_.this_cpu().tcp_read_size.Increment(value); 513 } IncrementTcpReadOffer(int value)514 void IncrementTcpReadOffer(int value) { 515 data_.this_cpu().tcp_read_offer.Increment(value); 516 } IncrementTcpReadOfferIovSize(int value)517 void IncrementTcpReadOfferIovSize(int value) { 518 data_.this_cpu().tcp_read_offer_iov_size.Increment(value); 519 } IncrementHttp2SendMessageSize(int value)520 void IncrementHttp2SendMessageSize(int value) { 521 data_.this_cpu().http2_send_message_size.Increment(value); 522 } IncrementHttp2MetadataSize(int value)523 void IncrementHttp2MetadataSize(int value) { 524 data_.this_cpu().http2_metadata_size.Increment(value); 525 } IncrementHttp2HpackEntryLifetime(int value)526 void IncrementHttp2HpackEntryLifetime(int value) { 527 data_.this_cpu().http2_hpack_entry_lifetime.Increment(value); 528 } IncrementHttp2HeaderTableSize(int value)529 void IncrementHttp2HeaderTableSize(int value) { 530 data_.this_cpu().http2_header_table_size.Increment(value); 531 } IncrementHttp2InitialWindowSize(int value)532 void IncrementHttp2InitialWindowSize(int value) { 533 data_.this_cpu().http2_initial_window_size.Increment(value); 534 } IncrementHttp2MaxConcurrentStreams(int value)535 void IncrementHttp2MaxConcurrentStreams(int value) { 536 data_.this_cpu().http2_max_concurrent_streams.Increment(value); 537 } IncrementHttp2MaxFrameSize(int value)538 void IncrementHttp2MaxFrameSize(int value) { 539 data_.this_cpu().http2_max_frame_size.Increment(value); 540 } IncrementHttp2MaxHeaderListSize(int value)541 void IncrementHttp2MaxHeaderListSize(int value) { 542 data_.this_cpu().http2_max_header_list_size.Increment(value); 543 } IncrementHttp2PreferredReceiveCryptoMessageSize(int value)544 void IncrementHttp2PreferredReceiveCryptoMessageSize(int value) { 545 data_.this_cpu().http2_preferred_receive_crypto_message_size.Increment( 546 value); 547 } IncrementHttp2StreamRemoteWindowUpdate(int value)548 void IncrementHttp2StreamRemoteWindowUpdate(int value) { 549 data_.this_cpu().http2_stream_remote_window_update.Increment(value); 550 } IncrementHttp2TransportRemoteWindowUpdate(int value)551 void IncrementHttp2TransportRemoteWindowUpdate(int value) { 552 data_.this_cpu().http2_transport_remote_window_update.Increment(value); 553 } IncrementHttp2TransportWindowUpdatePeriod(int value)554 void IncrementHttp2TransportWindowUpdatePeriod(int value) { 555 data_.this_cpu().http2_transport_window_update_period.Increment(value); 556 } IncrementHttp2StreamWindowUpdatePeriod(int value)557 void IncrementHttp2StreamWindowUpdatePeriod(int value) { 558 data_.this_cpu().http2_stream_window_update_period.Increment(value); 559 } IncrementWrrSubchannelListSize(int value)560 void IncrementWrrSubchannelListSize(int value) { 561 data_.this_cpu().wrr_subchannel_list_size.Increment(value); 562 } IncrementWrrSubchannelReadySize(int value)563 void IncrementWrrSubchannelReadySize(int value) { 564 data_.this_cpu().wrr_subchannel_ready_size.Increment(value); 565 } IncrementWorkSerializerRunTimeMs(int value)566 void IncrementWorkSerializerRunTimeMs(int value) { 567 data_.this_cpu().work_serializer_run_time_ms.Increment(value); 568 } IncrementWorkSerializerWorkTimeMs(int value)569 void IncrementWorkSerializerWorkTimeMs(int value) { 570 data_.this_cpu().work_serializer_work_time_ms.Increment(value); 571 } IncrementWorkSerializerWorkTimePerItemMs(int value)572 void IncrementWorkSerializerWorkTimePerItemMs(int value) { 573 data_.this_cpu().work_serializer_work_time_per_item_ms.Increment(value); 574 } IncrementWorkSerializerItemsPerRun(int value)575 void IncrementWorkSerializerItemsPerRun(int value) { 576 data_.this_cpu().work_serializer_items_per_run.Increment(value); 577 } IncrementChaoticGoodSendmsgsPerWriteControl(int value)578 void IncrementChaoticGoodSendmsgsPerWriteControl(int value) { 579 data_.this_cpu().chaotic_good_sendmsgs_per_write_control.Increment(value); 580 } IncrementChaoticGoodRecvmsgsPerReadControl(int value)581 void IncrementChaoticGoodRecvmsgsPerReadControl(int value) { 582 data_.this_cpu().chaotic_good_recvmsgs_per_read_control.Increment(value); 583 } IncrementChaoticGoodSendmsgsPerWriteData(int value)584 void IncrementChaoticGoodSendmsgsPerWriteData(int value) { 585 data_.this_cpu().chaotic_good_sendmsgs_per_write_data.Increment(value); 586 } IncrementChaoticGoodRecvmsgsPerReadData(int value)587 void IncrementChaoticGoodRecvmsgsPerReadData(int value) { 588 data_.this_cpu().chaotic_good_recvmsgs_per_read_data.Increment(value); 589 } IncrementChaoticGoodThreadHopsPerWriteControl(int value)590 void IncrementChaoticGoodThreadHopsPerWriteControl(int value) { 591 data_.this_cpu().chaotic_good_thread_hops_per_write_control.Increment( 592 value); 593 } IncrementChaoticGoodThreadHopsPerReadControl(int value)594 void IncrementChaoticGoodThreadHopsPerReadControl(int value) { 595 data_.this_cpu().chaotic_good_thread_hops_per_read_control.Increment(value); 596 } IncrementChaoticGoodThreadHopsPerWriteData(int value)597 void IncrementChaoticGoodThreadHopsPerWriteData(int value) { 598 data_.this_cpu().chaotic_good_thread_hops_per_write_data.Increment(value); 599 } IncrementChaoticGoodThreadHopsPerReadData(int value)600 void IncrementChaoticGoodThreadHopsPerReadData(int value) { 601 data_.this_cpu().chaotic_good_thread_hops_per_read_data.Increment(value); 602 } IncrementChaoticGoodTcpReadSizeData(int value)603 void IncrementChaoticGoodTcpReadSizeData(int value) { 604 data_.this_cpu().chaotic_good_tcp_read_size_data.Increment(value); 605 } IncrementChaoticGoodTcpReadSizeControl(int value)606 void IncrementChaoticGoodTcpReadSizeControl(int value) { 607 data_.this_cpu().chaotic_good_tcp_read_size_control.Increment(value); 608 } IncrementChaoticGoodTcpReadOfferData(int value)609 void IncrementChaoticGoodTcpReadOfferData(int value) { 610 data_.this_cpu().chaotic_good_tcp_read_offer_data.Increment(value); 611 } IncrementChaoticGoodTcpReadOfferControl(int value)612 void IncrementChaoticGoodTcpReadOfferControl(int value) { 613 data_.this_cpu().chaotic_good_tcp_read_offer_control.Increment(value); 614 } IncrementChaoticGoodTcpWriteSizeData(int value)615 void IncrementChaoticGoodTcpWriteSizeData(int value) { 616 data_.this_cpu().chaotic_good_tcp_write_size_data.Increment(value); 617 } IncrementChaoticGoodTcpWriteSizeControl(int value)618 void IncrementChaoticGoodTcpWriteSizeControl(int value) { 619 data_.this_cpu().chaotic_good_tcp_write_size_control.Increment(value); 620 } 621 622 private: 623 struct Data { 624 std::atomic<uint64_t> client_calls_created{0}; 625 std::atomic<uint64_t> server_calls_created{0}; 626 std::atomic<uint64_t> client_channels_created{0}; 627 std::atomic<uint64_t> client_subchannels_created{0}; 628 std::atomic<uint64_t> server_channels_created{0}; 629 std::atomic<uint64_t> insecure_connections_created{0}; 630 std::atomic<uint64_t> rq_connections_dropped{0}; 631 std::atomic<uint64_t> rq_calls_dropped{0}; 632 std::atomic<uint64_t> rq_calls_rejected{0}; 633 std::atomic<uint64_t> syscall_write{0}; 634 std::atomic<uint64_t> syscall_read{0}; 635 std::atomic<uint64_t> tcp_read_alloc_8k{0}; 636 std::atomic<uint64_t> tcp_read_alloc_64k{0}; 637 std::atomic<uint64_t> http2_settings_writes{0}; 638 std::atomic<uint64_t> http2_pings_sent{0}; 639 std::atomic<uint64_t> http2_writes_begun{0}; 640 std::atomic<uint64_t> http2_transport_stalls{0}; 641 std::atomic<uint64_t> http2_stream_stalls{0}; 642 std::atomic<uint64_t> http2_hpack_hits{0}; 643 std::atomic<uint64_t> http2_hpack_misses{0}; 644 std::atomic<uint64_t> cq_pluck_creates{0}; 645 std::atomic<uint64_t> cq_next_creates{0}; 646 std::atomic<uint64_t> cq_callback_creates{0}; 647 std::atomic<uint64_t> wrr_updates{0}; 648 std::atomic<uint64_t> work_serializer_items_enqueued{0}; 649 std::atomic<uint64_t> work_serializer_items_dequeued{0}; 650 std::atomic<uint64_t> econnaborted_count{0}; 651 std::atomic<uint64_t> econnreset_count{0}; 652 std::atomic<uint64_t> epipe_count{0}; 653 std::atomic<uint64_t> etimedout_count{0}; 654 std::atomic<uint64_t> econnrefused_count{0}; 655 std::atomic<uint64_t> enetunreach_count{0}; 656 std::atomic<uint64_t> enomsg_count{0}; 657 std::atomic<uint64_t> enotconn_count{0}; 658 std::atomic<uint64_t> enobufs_count{0}; 659 std::atomic<uint64_t> uncommon_io_error_count{0}; 660 std::atomic<uint64_t> msg_errqueue_error_count{0}; 661 HistogramCollector_65536_26 call_initial_size; 662 HistogramCollector_16777216_20 tcp_write_size; 663 HistogramCollector_80_10 tcp_write_iov_size; 664 HistogramCollector_16777216_20 tcp_read_size; 665 HistogramCollector_16777216_20 tcp_read_offer; 666 HistogramCollector_80_10 tcp_read_offer_iov_size; 667 HistogramCollector_16777216_20 http2_send_message_size; 668 HistogramCollector_65536_26 http2_metadata_size; 669 HistogramCollector_1800000_40 http2_hpack_entry_lifetime; 670 HistogramCollector_16777216_20 http2_header_table_size; 671 HistogramCollector_16777216_20 http2_initial_window_size; 672 HistogramCollector_16777216_20 http2_max_concurrent_streams; 673 HistogramCollector_16777216_20 http2_max_frame_size; 674 HistogramCollector_16777216_20 http2_max_header_list_size; 675 HistogramCollector_16777216_20 http2_preferred_receive_crypto_message_size; 676 HistogramCollector_16777216_20 http2_stream_remote_window_update; 677 HistogramCollector_16777216_20 http2_transport_remote_window_update; 678 HistogramCollector_100000_20 http2_transport_window_update_period; 679 HistogramCollector_100000_20 http2_stream_window_update_period; 680 HistogramCollector_10000_20 wrr_subchannel_list_size; 681 HistogramCollector_10000_20 wrr_subchannel_ready_size; 682 HistogramCollector_100000_20 work_serializer_run_time_ms; 683 HistogramCollector_100000_20 work_serializer_work_time_ms; 684 HistogramCollector_100000_20 work_serializer_work_time_per_item_ms; 685 HistogramCollector_10000_20 work_serializer_items_per_run; 686 HistogramCollector_100_20 chaotic_good_sendmsgs_per_write_control; 687 HistogramCollector_100_20 chaotic_good_recvmsgs_per_read_control; 688 HistogramCollector_100_20 chaotic_good_sendmsgs_per_write_data; 689 HistogramCollector_100_20 chaotic_good_recvmsgs_per_read_data; 690 HistogramCollector_100_20 chaotic_good_thread_hops_per_write_control; 691 HistogramCollector_100_20 chaotic_good_thread_hops_per_read_control; 692 HistogramCollector_100_20 chaotic_good_thread_hops_per_write_data; 693 HistogramCollector_100_20 chaotic_good_thread_hops_per_read_data; 694 HistogramCollector_16777216_20 chaotic_good_tcp_read_size_data; 695 HistogramCollector_16777216_20 chaotic_good_tcp_read_size_control; 696 HistogramCollector_16777216_20 chaotic_good_tcp_read_offer_data; 697 HistogramCollector_16777216_20 chaotic_good_tcp_read_offer_control; 698 HistogramCollector_16777216_20 chaotic_good_tcp_write_size_data; 699 HistogramCollector_16777216_20 chaotic_good_tcp_write_size_control; 700 }; 701 PerCpu<Data> data_{PerCpuOptions().SetCpusPerShard(4).SetMaxShards(32)}; 702 }; 703 } // namespace grpc_core 704 705 #endif // GRPC_SRC_CORE_TELEMETRY_STATS_DATA_H 706