• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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