Skip to content

Commit a0d8deb

Browse files
Queue age to reflect the avg time spent by an item in the dirty queue
Correct the vbucket stat queue_age to reflect the average time spent by an item in the dirty queue. The following stats would reflect this change: - vb_active_queue_age - vb_replica_queue_age - vb_pending_queue_age Change-Id: I01b13177aaff36650024cbfc76476313ef1ac223 Reviewed-on: http://review.couchbase.org/55878 Reviewed-by: Chiyoung Seo <[email protected]> Tested-by: buildbot <[email protected]>
1 parent 195e616 commit a0d8deb

File tree

4 files changed

+18
-18
lines changed

4 files changed

+18
-18
lines changed

docs/stats.org

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -375,7 +375,7 @@ For introductory information on stats within Couchbase, start with the
375375
| vb_active_ops_reject | Number of rejected operations |
376376
| vb_active_queue_size | Active items in disk queue |
377377
| vb_active_queue_memory | Memory used for disk queue |
378-
| vb_active_queue_age | Sum of disk queue item age in milliseconds |
378+
| vb_active_queue_age | Average disk queue item age in milliseconds|
379379
| vb_active_queue_pending | Total bytes of pending writes |
380380
| vb_active_queue_fill | Total enqueued items |
381381
| vb_active_queue_drain | Total drained items |
@@ -401,7 +401,7 @@ For introductory information on stats within Couchbase, start with the
401401
| vb_replica_ops_reject | Number of rejected operations |
402402
| vb_replica_queue_size | Replica items in disk queue |
403403
| vb_replica_queue_memory | Memory used for disk queue |
404-
| vb_replica_queue_age | Sum of disk queue item age in milliseconds |
404+
| vb_replica_queue_age | Average disk queue item age in milliseconds|
405405
| vb_replica_queue_pending | Total bytes of pending writes |
406406
| vb_replica_queue_fill | Total enqueued items |
407407
| vb_replica_queue_drain | Total drained items |
@@ -427,7 +427,7 @@ For introductory information on stats within Couchbase, start with the
427427
| vb_pending_ops_reject | Number of rejected operations |
428428
| vb_pending_queue_size | Pending items in disk queue |
429429
| vb_pending_queue_memory | Memory used for disk queue |
430-
| vb_pending_queue_age | Sum of disk queue item age in milliseconds |
430+
| vb_pending_queue_age | Average disk queue item age in milliseconds|
431431
| vb_pending_queue_pending | Total bytes of pending writes |
432432
| vb_pending_queue_fill | Total enqueued items |
433433
| vb_pending_queue_drain | Total drained items |
@@ -458,7 +458,7 @@ The stats below are listed for each vbucket.
458458
| ops_reject | Number of rejected operations |
459459
| queue_size | Pending items in disk queue |
460460
| queue_memory | Memory used for disk queue |
461-
| queue_age | Sum of disk queue item age in milliseconds |
461+
| queue_age | Average disk queue item age in milliseconds|
462462
| queue_fill | Total enqueued items |
463463
| queue_drain | Total drained items |
464464
| pending writes | Total bytes of pending writes |

src/ep_engine.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ class VBucketCountVisitor : public VBucketVisitor {
166166
size_t getQueueMemory() { return queueMemory; }
167167
size_t getQueueFill() { return queueFill; }
168168
size_t getQueueDrain() { return queueDrain; }
169-
uint64_t getAge() { return queueAge; }
169+
uint64_t getAge() { return (numVbucket > 0 ? queueAge / numVbucket : 0); }
170170
size_t getPendingWrites() { return pendingWrites; }
171171
size_t getChkPersistRemaining() { return chkPersistRemaining; }
172172

src/vbucket.cc

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,6 @@ void VBucket::doStatsForQueueing(Item& qi, size_t itemBytes)
206206
++dirtyQueueSize;
207207
dirtyQueueMem.fetch_add(sizeof(Item));
208208
++dirtyQueueFill;
209-
dirtyQueueAge.fetch_add(qi.getQueuedTime());
210209
dirtyQueuePendingWrites.fetch_add(itemBytes);
211210
}
212211

@@ -220,11 +219,9 @@ void VBucket::doStatsForFlushing(Item& qi, size_t itemBytes)
220219
}
221220
++dirtyQueueDrain;
222221

223-
if (dirtyQueueAge > qi.getQueuedTime()) {
224-
dirtyQueueAge.fetch_sub(qi.getQueuedTime());
225-
} else {
226-
dirtyQueueAge.store(0);
227-
}
222+
rel_time_t diff = ep_current_time() - qi.getQueuedTime();
223+
dirtyQueueAgeSum.fetch_add(diff > 0 ? diff : 0);
224+
dirtyQueueSamples++;
228225

229226
if (dirtyQueuePendingWrites > itemBytes) {
230227
dirtyQueuePendingWrites.fetch_sub(itemBytes);
@@ -254,7 +251,8 @@ void VBucket::resetStats() {
254251
dirtyQueueSize.store(0);
255252
dirtyQueueMem.store(0);
256253
dirtyQueueFill.store(0);
257-
dirtyQueueAge.store(0);
254+
dirtyQueueAgeSum.store(0);
255+
dirtyQueueSamples.store(0);
258256
dirtyQueuePendingWrites.store(0);
259257
dirtyQueueDrain.store(0);
260258
fileSpaceUsed = 0;

src/vbucket.h

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,8 @@ class VBucket : public RCValue {
163163
dirtyQueueMem(0),
164164
dirtyQueueFill(0),
165165
dirtyQueueDrain(0),
166-
dirtyQueueAge(0),
166+
dirtyQueueAgeSum(0),
167+
dirtyQueueSamples(0),
167168
dirtyQueuePendingWrites(0),
168169
metaDataDisk(0),
169170
numExpiredItems(0),
@@ -304,13 +305,13 @@ class VBucket : public RCValue {
304305

305306
void resetStats();
306307

307-
// Get age sum in millisecond
308+
// Get age average in milliseconds
308309
uint64_t getQueueAge() {
309-
rel_time_t currentAge = ep_current_time() * dirtyQueueSize;
310-
if (currentAge < dirtyQueueAge) {
310+
if (dirtyQueueSamples == 0) {
311311
return 0;
312+
} else {
313+
return (dirtyQueueAgeSum / dirtyQueueSamples) * 1000;
312314
}
313-
return (currentAge - dirtyQueueAge) * 1000;
314315
}
315316

316317
void fireAllOps(EventuallyPersistentEngine &engine);
@@ -488,7 +489,8 @@ class VBucket : public RCValue {
488489
AtomicValue<size_t> dirtyQueueMem;
489490
AtomicValue<size_t> dirtyQueueFill;
490491
AtomicValue<size_t> dirtyQueueDrain;
491-
AtomicValue<uint64_t> dirtyQueueAge;
492+
AtomicValue<uint64_t> dirtyQueueAgeSum;
493+
AtomicValue<uint64_t> dirtyQueueSamples;
492494
AtomicValue<size_t> dirtyQueuePendingWrites;
493495
AtomicValue<size_t> metaDataDisk;
494496

0 commit comments

Comments
 (0)