NCBI C++ ToolKit
timing.hpp
Go to the documentation of this file.

Go to the SVN repository for this file.

1 #ifndef PUBSEQ_GATEWAY_TIMING__HPP
2 #define PUBSEQ_GATEWAY_TIMING__HPP
3 
4 /* $Id: timing.hpp 101564 2024-01-04 19:43:03Z satskyse $
5  * ===========================================================================
6  *
7  * PUBLIC DOMAIN NOTICE
8  * National Center for Biotechnology Information
9  *
10  * This software/database is a "United States Government Work" under the
11  * terms of the United States Copyright Act. It was written as part of
12  * the author's official duties as a United States Government employee and
13  * thus cannot be copyrighted. This software/database is freely available
14  * to the public for use. The National Library of Medicine and the U.S.
15  * Government have not placed any restriction on its use or reproduction.
16  *
17  * Although all reasonable efforts have been taken to ensure the accuracy
18  * and reliability of the software and data, the NLM and the U.S.
19  * Government do not and cannot warrant the performance or results that
20  * may be obtained by using this software or data. The NLM and the U.S.
21  * Government disclaim all warranties, express or implied, including
22  * warranties of performance, merchantability or fitness for any particular
23  * purpose.
24  *
25  * Please cite the author in any work or product based on this material.
26  *
27  * ===========================================================================
28  *
29  * Authors: Sergey Satskiy
30  *
31  * File Description:
32  * PSG server timing
33  *
34  */
35 
36 #include "pubseq_gateway_types.hpp"
37 #include "psgs_request.hpp"
38 #include "time_series_stat.hpp"
39 #include "ipsgs_processor.hpp"
40 
41 #include <vector>
42 #include <mutex>
43 using namespace std;
44 
45 #include <util/data_histogram.hpp>
48 
49 
50 const unsigned long kMinStatValue = 0;
51 const unsigned long kMaxStatValue = 16 * 1024 * 1024;
52 const unsigned long kNStatBins = 24;
53 const string kStatScaleType = "log";
54 const unsigned long kTickSpan = 10;
55 
56 
57 class IPSGS_Processor;
58 
59 
63 };
64 
66  // Low level: more or less monolit operations
67  eLookupLmdbSi2csi = 0, // (2)
73 
76 
77  eResolutionLmdb, // (2) From request start
78  eResolutionCass, // (2) From cassandra start
79 
80  eResolutionFoundInCassandra, // (5) From cassandra start
81 
86 
91 
92  // The timings below are collected per processor
93 
94  eResolutionError, // (1) From request start
95  eResolutionNotFound, // (1) From request start
96  eResolutionFound, // (1) From request start
97 
100 
103 
104  eOperationLast // Not for using in the processors' code.
105  // It is for allocating an array with an applog identifiers
106 };
107 
108 
109 // Timing is registered in microseconds, i.e. in integers
110 // Technically speaking the counters will be updated from many threads and
111 // something could be missed. However it seems reasonable not to use atomic
112 // counters because:
113 // - even if something is lost it is not a big deal
114 // - the losses are going to be miserable
115 // - atomic counters may introduce some delays
118 
119 
120 // Returns a serialized dictionary
121 CJsonNode SerializeHistogram(const TOnePSGTiming & histogram,
122  const string & name,
123  const string & description);
124 
125 
126 // The base class for all the collected statistics.
127 // Individual type of operations will derive from it so that they will be able
128 // to tune the nins and intervals as they need.
130 {
131  public:
133  virtual ~CPSGTimingBase() {}
134 
135  public:
136  void Add(uint64_t mks)
137  {
138  if (m_PSGTiming)
139  m_PSGTiming->Add(mks);
140  }
141 
142  void Reset(void)
143  {
144  if (m_PSGTiming)
145  m_PSGTiming->Reset();
146  }
147 
148  void Rotate(void)
149  {
150  if (m_PSGTiming)
151  m_PSGTiming->Rotate();
152  }
153 
155  {
156  if (m_PSGTiming) {
157  // The histogram series counts ticks starting from 0 so even
158  // before the first tick some data may be collected. So +1
159  // is added here.
160  return m_PSGTiming->GetCurrentTick() + 1;
161  }
162  return 0;
163  }
164 
165  // Generic serialization to json
166  virtual CJsonNode SerializeCombined(int most_ancient_time,
167  int most_recent_time,
168  unsigned long tick_span,
169  const string & name,
170  const string & description) const;
171  virtual CJsonNode SerializeSeries(int most_ancient_time,
172  int most_recent_time,
173  unsigned long tick_span,
174  const string & name,
175  const string & description) const;
176 
177  protected:
178  unique_ptr<TPSGTiming> m_PSGTiming;
179 };
180 
181 // At the moment almost all the timing classes are the same
182 // So a macro is used to define them
183 #define TIMING_CLASS(class_name) \
184  class class_name : public CPSGTimingBase \
185  { \
186  public: \
187  class_name(unsigned long min_stat_value, \
188  unsigned long max_stat_value, \
189  unsigned long n_bins, \
190  TOnePSGTiming::EScaleType stat_type, \
191  bool & reset_to_default); \
192  }
193 
194 
195 // LMDB cache operations are supposed to be fast.
196 // There are three tables covered by LMDB cache.
198 
199 // LMDB resolution may involve many tries with the cached tables.
201 
202 // Cassandra operations are supposed to be slower than LMDB.
203 // There are three cassandra tables
205 
206 // Retrieve data from MyNCBI
208 
209 // Cassandra resolution may need a few tries with a two tables
211 
212 // Out of range blob size; should not really happened
214 
215 // Not found blob
217 
218 // Named annotation retrieval
220 
221 // Split history retrieval
223 
224 // Public comment retrieval
226 
227 // Accession version history retrieval
229 
230 // IPG resolve resolution
232 
233 // TSE chunk retrieve
235 
236 // NA resolve for non-cassandra processors
238 
239 // VDB opening timing
241 
242 // SNP PTIS lookup timing
244 
245 // WGS VDB lookup timing
247 
248 // Resolution
250 
251 // Time staying in the backlog
253 
254 // Time staying in the backlog
256 
257 
258 // Blob retrieval depends on a blob size
260 {
261  public:
262  CBlobRetrieveTiming(unsigned long min_blob_size,
263  unsigned long max_blob_size,
264  unsigned long min_stat_value,
265  unsigned long max_stat_value,
266  unsigned long n_bins,
267  TOnePSGTiming::EScaleType stat_type,
268  bool & reset_to_default);
270 
271  public:
272  virtual CJsonNode SerializeCombined(int most_ancient_time,
273  int most_recent_time,
274  unsigned long tick_span,
275  const string & name,
276  const string & description) const;
277  virtual CJsonNode SerializeSeries(int most_ancient_time,
278  int most_recent_time,
279  unsigned long tick_span,
280  const string & name,
281  const string & description) const;
282 
283  unsigned long GetMinBlobSize(void) const
284  { return m_MinBlobSize; }
285 
286  unsigned long GetMaxBlobSize(void) const
287  { return m_MaxBlobSize; }
288 
289  private:
290  unsigned long m_MinBlobSize;
291  unsigned long m_MaxBlobSize;
292 };
293 
294 
295 
297 {
298  public:
299  COperationTiming(unsigned long min_stat_value,
300  unsigned long max_stat_value,
301  unsigned long n_bins,
302  const string & stat_type,
303  unsigned long small_blob_size,
304  const string & only_for_processor,
305  size_t log_timing_threshold,
306  const map<string, size_t> & proc_group_to_index);
308 
309  public:
310  // Blob size is taken into consideration only if
311  // operation == eBlobRetrieve
312  uint64_t Register(IPSGS_Processor * processor,
314  EPSGOperationStatus status,
315  const psg_time_point_t & op_begin_ts,
316  size_t blob_size=0);
317  void RegisterForTimeSeries(CPSGS_Request::EPSGS_Type request_type,
318  CRequestStatus::ECode status);
319  void RegisterProcessorDone(CPSGS_Request::EPSGS_Type request_type,
320  IPSGS_Processor * processor);
321  void RegisterProcessorPerformance(IPSGS_Processor * processor,
322  IPSGS_Processor::EPSGS_Status proc_finish_status);
323 
324  public:
325  void Rotate(void);
326  void RotateRequestStat(void);
327  void CollectMomentousStat(size_t tcp_conn_count,
328  size_t active_request_count,
329  size_t backlog_count);
330  void Reset(void);
331  CJsonNode Serialize(int most_ancient_time,
332  int most_recent_time,
333  const vector<CTempString> & histogram_names,
334  const vector<pair<int, int>> & time_series,
335  unsigned long tick_span) const;
336 
337  private:
338  bool x_SetupBlobSizeBins(unsigned long min_stat_value,
339  unsigned long max_stat_value,
340  unsigned long n_bins,
341  TOnePSGTiming::EScaleType stat_type,
342  unsigned long small_blob_size);
343  ssize_t x_GetBlobRetrievalBinIndex(unsigned long blob_size);
344  void x_UpdateMaxReqsStat(size_t index,
345  uint64_t & max_requests,
346  uint64_t & max_errors,
347  uint64_t & max_warnings,
348  uint64_t & max_not_found) const;
349 
350  private:
353  string m_TooLongIDs[eOperationLast];
354 
355  // Note: 2 items, found and not found
356  vector<unique_ptr<CLmdbCacheTiming>> m_LookupLmdbSi2csiTiming;
357  vector<unique_ptr<CLmdbCacheTiming>> m_LookupLmdbBioseqInfoTiming;
358  vector<unique_ptr<CLmdbCacheTiming>> m_LookupLmdbBlobPropTiming;
359  vector<unique_ptr<CCassTiming>> m_LookupCassSi2csiTiming;
360  vector<unique_ptr<CCassTiming>> m_LookupCassBioseqInfoTiming;
361  vector<unique_ptr<CCassTiming>> m_LookupCassBlobPropTiming;
362  vector<unique_ptr<CMyNCBITiming>> m_RetrieveMyNCBITiming;
363  unique_ptr<CMyNCBITiming> m_RetrieveMyNCBIErrorTiming;
364 
365  vector<unique_ptr<CLmdbResolutionTiming>> m_ResolutionLmdbTiming;
366  vector<unique_ptr<CCassResolutionTiming>> m_ResolutionCassTiming;
367 
368  vector<vector<unique_ptr<CNARetrieveTiming>>> m_NARetrieveTiming;
369  vector<vector<unique_ptr<CTSEChunkRetrieveTiming>>> m_TSEChunkRetrieveTiming;
370  vector<vector<unique_ptr<CNAResolveTiming>>> m_NAResolveTiming;
371 
372  vector<unique_ptr<CSplitHistoryRetrieveTiming>> m_SplitHistoryRetrieveTiming;
373  vector<unique_ptr<CPublicCommentRetrieveTiming>> m_PublicCommentRetrieveTiming;
374  vector<unique_ptr<CAccVerHistoryRetrieveTiming>> m_AccVerHistoryRetrieveTiming;
375  vector<unique_ptr<CIPGResolveRetrieveTiming>> m_IPGResolveRetrieveTiming;
376  vector<unique_ptr<CVDBOpenTiming>> m_VDBOpenTiming;
377  vector<unique_ptr<CSNPPTISLookupTiming>> m_SNPPTISLookupTiming;
378  vector<unique_ptr<CWGSVDBLookupTiming>> m_WGSVDBLookupTiming;
379 
380  // The index is calculated basing on the blob size
381  vector<vector<unique_ptr<CBlobRetrieveTiming>>> m_BlobRetrieveTiming;
382  vector<unsigned long> m_Ends;
383  vector<unique_ptr<CHugeBlobRetrieveTiming>> m_HugeBlobRetrievalTiming;
384  vector<unique_ptr<CNotFoundBlobRetrieveTiming>> m_NotFoundBlobRetrievalTiming;
385  vector<vector<uint64_t>> m_BlobByteCounters;
386  vector<uint64_t> m_HugeBlobByteCounter;
387 
388  // Resolution timing
389  vector<unique_ptr<CResolutionTiming>> m_ResolutionErrorTiming;
390  vector<unique_ptr<CResolutionTiming>> m_ResolutionNotFoundTiming;
391  vector<unique_ptr<CResolutionTiming>> m_ResolutionFoundTiming;
392 
393  unique_ptr<CBacklogTiming> m_BacklogTiming;
394 
395  // 1, 2, 3, 4, 5+ trips to cassandra
396  vector<unique_ptr<CResolutionTiming>> m_ResolutionFoundCassandraTiming;
397 
398  struct SInfo {
400  string m_Name;
402 
403  // Specific for blob retrieval. They also have a cummulative
404  // counter for the blob bytes sent to the user.
406  string m_CounterId;
409 
410  SInfo() :
411  m_Timing(nullptr),
412  m_Counter(nullptr)
413  {}
414 
416  const string & name, const string & description) :
417  m_Timing(timing), m_Name(name), m_Description(description),
418  m_Counter(nullptr)
419  {}
420 
422  const string & name, const string & description,
423  uint64_t * counter,
424  const string & counter_id,
425  const string & counter_name,
426  const string & counter_description) :
427  m_Timing(timing), m_Name(name), m_Description(description),
428  m_Counter(counter),
429  m_CounterId(counter_id),
430  m_CounterName(counter_name),
431  m_CounterDescription(counter_description)
432  {}
433 
434  SInfo(const SInfo &) = default;
435  SInfo & operator=(const SInfo &) = default;
436  SInfo(SInfo &&) = default;
437  SInfo & operator=(SInfo &&) = default;
438  };
439  map<string, SInfo> m_NamesMap;
440 
442 
443  mutable mutex m_Lock; // reset-rotate-serialize lock
444 
452 
456 
457  // The items below collect only the fact (per processor) that the
458  // processor did something for the request i.e. finished with status
459  // 'Done'
460  vector<unique_ptr<CProcessorRequestTimeSeries>> m_IdGetDoneByProc;
461  vector<unique_ptr<CProcessorRequestTimeSeries>> m_IdGetblobDoneByProc;
462  vector<unique_ptr<CProcessorRequestTimeSeries>> m_IdResolveDoneByProc;
463  vector<unique_ptr<CProcessorRequestTimeSeries>> m_IdGetTSEChunkDoneByProc;
464  vector<unique_ptr<CProcessorRequestTimeSeries>> m_IdGetNADoneByProc;
465 
466  // The first index is a request kind
467  // The second index is a processor kind
468  vector<vector<unique_ptr<CProcessorPerformanceTiming>>> m_DoneProcPerformance;
469  vector<vector<unique_ptr<CProcessorPerformanceTiming>>> m_NotFoundProcPerformance;
470  vector<vector<unique_ptr<CProcessorPerformanceTiming>>> m_TimeoutProcPerformance;
471  vector<vector<unique_ptr<CProcessorPerformanceTiming>>> m_ErrorProcPerformance;
472 };
473 
474 #endif /* PUBSEQ_GATEWAY_TIMING__HPP */
475 
unsigned long GetMaxBlobSize(void) const
Definition: timing.hpp:286
unsigned long m_MinBlobSize
Definition: timing.hpp:290
unsigned long m_MaxBlobSize
Definition: timing.hpp:291
unsigned long GetMinBlobSize(void) const
Definition: timing.hpp:283
A series of same-structured histograms covering logarithmically (base 2) increasing time periods....
CHistogram – collect the distribution of the numerical data samples.
JSON node abstraction.
CMomentousCounterSeries m_BacklogStat
Definition: timing.hpp:455
CMomentousCounterSeries m_TCPConnectionsStat
Definition: timing.hpp:453
unique_ptr< CMyNCBITiming > m_RetrieveMyNCBIErrorTiming
Definition: timing.hpp:363
vector< unique_ptr< CResolutionTiming > > m_ResolutionFoundTiming
Definition: timing.hpp:391
vector< vector< unique_ptr< CBlobRetrieveTiming > > > m_BlobRetrieveTiming
Definition: timing.hpp:381
vector< vector< unique_ptr< CProcessorPerformanceTiming > > > m_NotFoundProcPerformance
Definition: timing.hpp:469
vector< vector< uint64_t > > m_BlobByteCounters
Definition: timing.hpp:385
CRequestTimeSeries m_IdGetblobStat
Definition: timing.hpp:446
vector< unique_ptr< CWGSVDBLookupTiming > > m_WGSVDBLookupTiming
Definition: timing.hpp:378
vector< unique_ptr< CAccVerHistoryRetrieveTiming > > m_AccVerHistoryRetrieveTiming
Definition: timing.hpp:374
vector< unique_ptr< CProcessorRequestTimeSeries > > m_IdGetDoneByProc
Definition: timing.hpp:460
vector< vector< unique_ptr< CNAResolveTiming > > > m_NAResolveTiming
Definition: timing.hpp:370
CRequestTimeSeries m_IpgResolveStat
Definition: timing.hpp:451
vector< unique_ptr< CResolutionTiming > > m_ResolutionNotFoundTiming
Definition: timing.hpp:390
vector< unique_ptr< CCassTiming > > m_LookupCassBioseqInfoTiming
Definition: timing.hpp:360
vector< unique_ptr< CResolutionTiming > > m_ResolutionErrorTiming
Definition: timing.hpp:389
vector< unique_ptr< CMyNCBITiming > > m_RetrieveMyNCBITiming
Definition: timing.hpp:362
CRequestTimeSeries m_IdGetTSEChunkStat
Definition: timing.hpp:449
size_t m_LogTimingThresholdMks
Definition: timing.hpp:352
unique_ptr< CBacklogTiming > m_BacklogTiming
Definition: timing.hpp:393
vector< unique_ptr< CLmdbCacheTiming > > m_LookupLmdbBioseqInfoTiming
Definition: timing.hpp:357
vector< unique_ptr< CResolutionTiming > > m_ResolutionFoundCassandraTiming
Definition: timing.hpp:396
CRequestTimeSeries m_IdGetNAStat
Definition: timing.hpp:450
vector< unique_ptr< CSNPPTISLookupTiming > > m_SNPPTISLookupTiming
Definition: timing.hpp:377
vector< unique_ptr< CVDBOpenTiming > > m_VDBOpenTiming
Definition: timing.hpp:376
map< string, SInfo > m_NamesMap
Definition: timing.hpp:439
vector< unique_ptr< CHugeBlobRetrieveTiming > > m_HugeBlobRetrievalTiming
Definition: timing.hpp:383
vector< unique_ptr< CSplitHistoryRetrieveTiming > > m_SplitHistoryRetrieveTiming
Definition: timing.hpp:372
vector< unique_ptr< CNotFoundBlobRetrieveTiming > > m_NotFoundBlobRetrievalTiming
Definition: timing.hpp:384
vector< vector< unique_ptr< CNARetrieveTiming > > > m_NARetrieveTiming
Definition: timing.hpp:368
vector< unique_ptr< CLmdbCacheTiming > > m_LookupLmdbSi2csiTiming
Definition: timing.hpp:356
vector< unique_ptr< CProcessorRequestTimeSeries > > m_IdGetNADoneByProc
Definition: timing.hpp:464
vector< unique_ptr< CPublicCommentRetrieveTiming > > m_PublicCommentRetrieveTiming
Definition: timing.hpp:373
vector< unique_ptr< CCassResolutionTiming > > m_ResolutionCassTiming
Definition: timing.hpp:366
CRequestTimeSeries m_IdAccVerHistStat
Definition: timing.hpp:448
CRequestTimeSeries m_IdResolveStat
Definition: timing.hpp:447
map< string, size_t > m_ProcGroupToIndex
Definition: timing.hpp:441
vector< vector< unique_ptr< CTSEChunkRetrieveTiming > > > m_TSEChunkRetrieveTiming
Definition: timing.hpp:369
vector< unsigned long > m_Ends
Definition: timing.hpp:382
vector< unique_ptr< CLmdbResolutionTiming > > m_ResolutionLmdbTiming
Definition: timing.hpp:365
vector< unique_ptr< CProcessorRequestTimeSeries > > m_IdGetTSEChunkDoneByProc
Definition: timing.hpp:463
string m_OnlyForProcessor
Definition: timing.hpp:351
vector< unique_ptr< CIPGResolveRetrieveTiming > > m_IPGResolveRetrieveTiming
Definition: timing.hpp:375
vector< unique_ptr< CCassTiming > > m_LookupCassBlobPropTiming
Definition: timing.hpp:361
vector< unique_ptr< CCassTiming > > m_LookupCassSi2csiTiming
Definition: timing.hpp:359
vector< unique_ptr< CLmdbCacheTiming > > m_LookupLmdbBlobPropTiming
Definition: timing.hpp:358
vector< vector< unique_ptr< CProcessorPerformanceTiming > > > m_ErrorProcPerformance
Definition: timing.hpp:471
vector< unique_ptr< CProcessorRequestTimeSeries > > m_IdGetblobDoneByProc
Definition: timing.hpp:461
vector< vector< unique_ptr< CProcessorPerformanceTiming > > > m_DoneProcPerformance
Definition: timing.hpp:468
CMomentousCounterSeries m_ActiveRequestsStat
Definition: timing.hpp:454
vector< unique_ptr< CProcessorRequestTimeSeries > > m_IdResolveDoneByProc
Definition: timing.hpp:462
CRequestTimeSeries m_IdGetStat
Definition: timing.hpp:445
vector< vector< unique_ptr< CProcessorPerformanceTiming > > > m_TimeoutProcPerformance
Definition: timing.hpp:470
vector< uint64_t > m_HugeBlobByteCounter
Definition: timing.hpp:386
unique_ptr< TPSGTiming > m_PSGTiming
Definition: timing.hpp:178
void Add(uint64_t mks)
Definition: timing.hpp:136
void Reset(void)
Definition: timing.hpp:142
virtual ~CPSGTimingBase()
Definition: timing.hpp:133
TPSGTiming::TTicks GetNumberOfCoveredTicks(void) const
Definition: timing.hpp:154
void Rotate(void)
Definition: timing.hpp:148
Interface class (and self-factory) for request processor objects that can retrieve data from a given ...
EPSGS_Status
The GetStatus() method returns a processor current status.
Frequency histogram for data distribution of the numerical samples.
unsigned int TTicks
Type of the unit of time.
EScaleType
Scale type.
operation
Bit operations.
Definition: bmconst.h:191
int ssize_t
Definition: ncbiconf_msvc.h:92
#define nullptr
Definition: ncbimisc.hpp:45
psg_clock_t::time_point psg_time_point_t
unsigned __int64 uint64_t
Definition: stdint.h:136
SInfo(CPSGTimingBase *timing, const string &name, const string &description, uint64_t *counter, const string &counter_id, const string &counter_name, const string &counter_description)
Definition: timing.hpp:421
SInfo & operator=(SInfo &&)=default
uint64_t * m_Counter
Definition: timing.hpp:405
SInfo(CPSGTimingBase *timing, const string &name, const string &description)
Definition: timing.hpp:415
SInfo(SInfo &&)=default
SInfo(const SInfo &)=default
CPSGTimingBase * m_Timing
Definition: timing.hpp:399
SInfo & operator=(const SInfo &)=default
const unsigned long kNStatBins
Definition: timing.hpp:52
EPSGOperationStatus
Definition: timing.hpp:60
@ eOpStatusFound
Definition: timing.hpp:61
@ eOpStatusNotFound
Definition: timing.hpp:62
const unsigned long kMinStatValue
Definition: timing.hpp:50
#define TIMING_CLASS(class_name)
Definition: timing.hpp:183
CJsonNode SerializeHistogram(const TOnePSGTiming &histogram, const string &name, const string &description)
Definition: timing.cpp:56
const string kStatScaleType
Definition: timing.hpp:53
EPSGOperation
Definition: timing.hpp:65
@ eTseChunkRetrieve
Definition: timing.hpp:101
@ eWGS_VDBLookup
Definition: timing.hpp:90
@ eIPGResolveRetrieve
Definition: timing.hpp:85
@ eResolutionError
Definition: timing.hpp:94
@ eBacklog
Definition: timing.hpp:88
@ eResolutionNotFound
Definition: timing.hpp:95
@ eNAResolve
Definition: timing.hpp:102
@ eSNP_PTISLookup
Definition: timing.hpp:89
@ eResolutionCass
Definition: timing.hpp:78
@ eSplitHistoryRetrieve
Definition: timing.hpp:82
@ eNARetrieve
Definition: timing.hpp:99
@ eResolutionFound
Definition: timing.hpp:96
@ eVDBOpen
Definition: timing.hpp:87
@ eLookupCassBioseqInfo
Definition: timing.hpp:71
@ eAccVerHistRetrieve
Definition: timing.hpp:84
@ eMyNCBIRetrieve
Definition: timing.hpp:74
@ eLookupCassBlobProp
Definition: timing.hpp:72
@ eMyNCBIRetrieveError
Definition: timing.hpp:75
@ eResolutionFoundInCassandra
Definition: timing.hpp:80
@ eLookupLmdbBlobProp
Definition: timing.hpp:69
@ eBlobRetrieve
Definition: timing.hpp:98
@ eLookupLmdbBioseqInfo
Definition: timing.hpp:68
@ eResolutionLmdb
Definition: timing.hpp:77
@ eOperationLast
Definition: timing.hpp:104
@ eLookupLmdbSi2csi
Definition: timing.hpp:67
@ ePublicCommentRetrieve
Definition: timing.hpp:83
@ eLookupCassSi2csi
Definition: timing.hpp:70
const unsigned long kMaxStatValue
Definition: timing.hpp:51
const unsigned long kTickSpan
Definition: timing.hpp:54
CHistogram< uint64_t, uint64_t, uint64_t > TOnePSGTiming
Definition: timing.hpp:116
CHistogramTimeSeries< uint64_t, uint64_t, uint64_t > TPSGTiming
Definition: timing.hpp:117
USING_NCBI_SCOPE
Definition: timing.hpp:47
void Serialize(CNcbiOstream &, const CRawScoreVector< Key, Score > &)
Generics These throw an exception; we must implement serialization for each type.
Modified on Fri Jan 05 07:24:53 2024 by modify_doxy.py rev. 669887