- File:
-
- 1 edited
-
libcfa/src/concurrency/stats.cfa (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/concurrency/stats.cfa
r45b9b21 rbbbd2c4 38 38 stats->ready.pop.search.espec = 0; 39 39 stats->ready.threads.migration = 0; 40 stats->ready.threads.extunpark = 0;41 40 stats->ready.threads.threads = 0; 42 41 stats->ready.sleep.halts = 0; … … 68 67 } 69 68 70 static inline void tally_one( volatile uint64_t * agg, volatile uint64_t * val) {71 uint64_t add = __atomic_exchange_n(val, 0_l64u, __ATOMIC_RELAXED);72 __atomic_fetch_add(agg, add, __ATOMIC_RELAXED);73 }74 75 static inline void tally_one( volatile int64_t * agg, volatile int64_t * val) {76 int64_t add = __atomic_exchange_n(val, 0_l64, __ATOMIC_RELAXED);77 __atomic_fetch_add(agg, add, __ATOMIC_RELAXED);78 }79 80 69 void __tally_stats( struct __stats_t * cltr, struct __stats_t * proc ) { 81 tally_one( &cltr->ready.push.local.attempt, &proc->ready.push.local.attempt ); 82 tally_one( &cltr->ready.push.local.success, &proc->ready.push.local.success ); 83 tally_one( &cltr->ready.push.share.attempt, &proc->ready.push.share.attempt ); 84 tally_one( &cltr->ready.push.share.success, &proc->ready.push.share.success ); 85 tally_one( &cltr->ready.push.extrn.attempt, &proc->ready.push.extrn.attempt ); 86 tally_one( &cltr->ready.push.extrn.success, &proc->ready.push.extrn.success ); 87 tally_one( &cltr->ready.pop.local .attempt, &proc->ready.pop.local .attempt ); 88 tally_one( &cltr->ready.pop.local .success, &proc->ready.pop.local .success ); 89 tally_one( &cltr->ready.pop.local .elock , &proc->ready.pop.local .elock ); 90 tally_one( &cltr->ready.pop.local .eempty , &proc->ready.pop.local .eempty ); 91 tally_one( &cltr->ready.pop.local .espec , &proc->ready.pop.local .espec ); 92 tally_one( &cltr->ready.pop.help .attempt, &proc->ready.pop.help .attempt ); 93 tally_one( &cltr->ready.pop.help .success, &proc->ready.pop.help .success ); 94 tally_one( &cltr->ready.pop.help .elock , &proc->ready.pop.help .elock ); 95 tally_one( &cltr->ready.pop.help .eempty , &proc->ready.pop.help .eempty ); 96 tally_one( &cltr->ready.pop.help .espec , &proc->ready.pop.help .espec ); 97 tally_one( &cltr->ready.pop.steal .attempt, &proc->ready.pop.steal .attempt ); 98 tally_one( &cltr->ready.pop.steal .success, &proc->ready.pop.steal .success ); 99 tally_one( &cltr->ready.pop.steal .elock , &proc->ready.pop.steal .elock ); 100 tally_one( &cltr->ready.pop.steal .eempty , &proc->ready.pop.steal .eempty ); 101 tally_one( &cltr->ready.pop.steal .espec , &proc->ready.pop.steal .espec ); 102 tally_one( &cltr->ready.pop.search.attempt, &proc->ready.pop.search.attempt ); 103 tally_one( &cltr->ready.pop.search.success, &proc->ready.pop.search.success ); 104 tally_one( &cltr->ready.pop.search.elock , &proc->ready.pop.search.elock ); 105 tally_one( &cltr->ready.pop.search.eempty , &proc->ready.pop.search.eempty ); 106 tally_one( &cltr->ready.pop.search.espec , &proc->ready.pop.search.espec ); 107 tally_one( &cltr->ready.threads.migration , &proc->ready.threads.migration ); 108 tally_one( &cltr->ready.threads.extunpark , &proc->ready.threads.extunpark ); 109 tally_one( &cltr->ready.threads.threads , &proc->ready.threads.threads ); 110 tally_one( &cltr->ready.sleep.halts , &proc->ready.sleep.halts ); 111 tally_one( &cltr->ready.sleep.cancels , &proc->ready.sleep.cancels ); 112 tally_one( &cltr->ready.sleep.wakes , &proc->ready.sleep.wakes ); 113 tally_one( &cltr->ready.sleep.exits , &proc->ready.sleep.exits ); 70 __atomic_fetch_add( &cltr->ready.push.local.attempt, proc->ready.push.local.attempt, __ATOMIC_SEQ_CST ); proc->ready.push.local.attempt = 0; 71 __atomic_fetch_add( &cltr->ready.push.local.success, proc->ready.push.local.success, __ATOMIC_SEQ_CST ); proc->ready.push.local.success = 0; 72 __atomic_fetch_add( &cltr->ready.push.share.attempt, proc->ready.push.share.attempt, __ATOMIC_SEQ_CST ); proc->ready.push.share.attempt = 0; 73 __atomic_fetch_add( &cltr->ready.push.share.success, proc->ready.push.share.success, __ATOMIC_SEQ_CST ); proc->ready.push.share.success = 0; 74 __atomic_fetch_add( &cltr->ready.push.extrn.attempt, proc->ready.push.extrn.attempt, __ATOMIC_SEQ_CST ); proc->ready.push.extrn.attempt = 0; 75 __atomic_fetch_add( &cltr->ready.push.extrn.success, proc->ready.push.extrn.success, __ATOMIC_SEQ_CST ); proc->ready.push.extrn.success = 0; 76 __atomic_fetch_add( &cltr->ready.pop.local .attempt, proc->ready.pop.local .attempt, __ATOMIC_SEQ_CST ); proc->ready.pop.local .attempt = 0; 77 __atomic_fetch_add( &cltr->ready.pop.local .success, proc->ready.pop.local .success, __ATOMIC_SEQ_CST ); proc->ready.pop.local .success = 0; 78 __atomic_fetch_add( &cltr->ready.pop.local .elock , proc->ready.pop.local .elock , __ATOMIC_SEQ_CST ); proc->ready.pop.local .elock = 0; 79 __atomic_fetch_add( &cltr->ready.pop.local .eempty , proc->ready.pop.local .eempty , __ATOMIC_SEQ_CST ); proc->ready.pop.local .eempty = 0; 80 __atomic_fetch_add( &cltr->ready.pop.local .espec , proc->ready.pop.local .espec , __ATOMIC_SEQ_CST ); proc->ready.pop.local .espec = 0; 81 __atomic_fetch_add( &cltr->ready.pop.help .attempt, proc->ready.pop.help .attempt, __ATOMIC_SEQ_CST ); proc->ready.pop.help .attempt = 0; 82 __atomic_fetch_add( &cltr->ready.pop.help .success, proc->ready.pop.help .success, __ATOMIC_SEQ_CST ); proc->ready.pop.help .success = 0; 83 __atomic_fetch_add( &cltr->ready.pop.help .elock , proc->ready.pop.help .elock , __ATOMIC_SEQ_CST ); proc->ready.pop.help .elock = 0; 84 __atomic_fetch_add( &cltr->ready.pop.help .eempty , proc->ready.pop.help .eempty , __ATOMIC_SEQ_CST ); proc->ready.pop.help .eempty = 0; 85 __atomic_fetch_add( &cltr->ready.pop.help .espec , proc->ready.pop.help .espec , __ATOMIC_SEQ_CST ); proc->ready.pop.help .espec = 0; 86 __atomic_fetch_add( &cltr->ready.pop.steal .attempt, proc->ready.pop.steal .attempt, __ATOMIC_SEQ_CST ); proc->ready.pop.steal .attempt = 0; 87 __atomic_fetch_add( &cltr->ready.pop.steal .success, proc->ready.pop.steal .success, __ATOMIC_SEQ_CST ); proc->ready.pop.steal .success = 0; 88 __atomic_fetch_add( &cltr->ready.pop.steal .elock , proc->ready.pop.steal .elock , __ATOMIC_SEQ_CST ); proc->ready.pop.steal .elock = 0; 89 __atomic_fetch_add( &cltr->ready.pop.steal .eempty , proc->ready.pop.steal .eempty , __ATOMIC_SEQ_CST ); proc->ready.pop.steal .eempty = 0; 90 __atomic_fetch_add( &cltr->ready.pop.steal .espec , proc->ready.pop.steal .espec , __ATOMIC_SEQ_CST ); proc->ready.pop.steal .espec = 0; 91 __atomic_fetch_add( &cltr->ready.pop.search.attempt, proc->ready.pop.search.attempt, __ATOMIC_SEQ_CST ); proc->ready.pop.search.attempt = 0; 92 __atomic_fetch_add( &cltr->ready.pop.search.success, proc->ready.pop.search.success, __ATOMIC_SEQ_CST ); proc->ready.pop.search.success = 0; 93 __atomic_fetch_add( &cltr->ready.pop.search.elock , proc->ready.pop.search.elock , __ATOMIC_SEQ_CST ); proc->ready.pop.search.elock = 0; 94 __atomic_fetch_add( &cltr->ready.pop.search.eempty , proc->ready.pop.search.eempty , __ATOMIC_SEQ_CST ); proc->ready.pop.search.eempty = 0; 95 __atomic_fetch_add( &cltr->ready.pop.search.espec , proc->ready.pop.search.espec , __ATOMIC_SEQ_CST ); proc->ready.pop.search.espec = 0; 96 __atomic_fetch_add( &cltr->ready.threads.migration , proc->ready.threads.migration , __ATOMIC_SEQ_CST ); proc->ready.threads.migration = 0; 97 __atomic_fetch_add( &cltr->ready.threads.threads , proc->ready.threads.threads , __ATOMIC_SEQ_CST ); proc->ready.threads.threads = 0; 98 __atomic_fetch_add( &cltr->ready.sleep.halts , proc->ready.sleep.halts , __ATOMIC_SEQ_CST ); proc->ready.sleep.halts = 0; 99 __atomic_fetch_add( &cltr->ready.sleep.cancels , proc->ready.sleep.cancels , __ATOMIC_SEQ_CST ); proc->ready.sleep.cancels = 0; 100 __atomic_fetch_add( &cltr->ready.sleep.wakes , proc->ready.sleep.wakes , __ATOMIC_SEQ_CST ); proc->ready.sleep.wakes = 0; 101 __atomic_fetch_add( &cltr->ready.sleep.exits , proc->ready.sleep.exits , __ATOMIC_SEQ_CST ); proc->ready.sleep.exits = 0; 114 102 115 103 #if defined(CFA_HAVE_LINUX_IO_URING_H) 116 tally_one( &cltr->io.alloc.fast , &proc->io.alloc.fast );117 tally_one( &cltr->io.alloc.slow , &proc->io.alloc.slow );118 tally_one( &cltr->io.alloc.fail , &proc->io.alloc.fail );119 tally_one( &cltr->io.alloc.revoke , &proc->io.alloc.revoke );120 tally_one( &cltr->io.alloc.block , &proc->io.alloc.block );121 tally_one( &cltr->io.submit.fast , &proc->io.submit.fast );122 tally_one( &cltr->io.submit.slow , &proc->io.submit.slow );123 tally_one( &cltr->io.flush.external , &proc->io.flush.external );124 tally_one( &cltr->io.calls.flush , &proc->io.calls.flush );125 tally_one( &cltr->io.calls.submitted , &proc->io.calls.submitted );126 tally_one( &cltr->io.calls.drain , &proc->io.calls.drain );127 tally_one( &cltr->io.calls.completed , &proc->io.calls.completed );128 tally_one( &cltr->io.calls.errors.busy, &proc->io.calls.errors.busy );129 tally_one( &cltr->io.poller.sleeps , &proc->io.poller.sleeps );104 __atomic_fetch_add( &cltr->io.alloc.fast , proc->io.alloc.fast , __ATOMIC_SEQ_CST ); proc->io.alloc.fast = 0; 105 __atomic_fetch_add( &cltr->io.alloc.slow , proc->io.alloc.slow , __ATOMIC_SEQ_CST ); proc->io.alloc.slow = 0; 106 __atomic_fetch_add( &cltr->io.alloc.fail , proc->io.alloc.fail , __ATOMIC_SEQ_CST ); proc->io.alloc.fail = 0; 107 __atomic_fetch_add( &cltr->io.alloc.revoke , proc->io.alloc.revoke , __ATOMIC_SEQ_CST ); proc->io.alloc.revoke = 0; 108 __atomic_fetch_add( &cltr->io.alloc.block , proc->io.alloc.block , __ATOMIC_SEQ_CST ); proc->io.alloc.block = 0; 109 __atomic_fetch_add( &cltr->io.submit.fast , proc->io.submit.fast , __ATOMIC_SEQ_CST ); proc->io.submit.fast = 0; 110 __atomic_fetch_add( &cltr->io.submit.slow , proc->io.submit.slow , __ATOMIC_SEQ_CST ); proc->io.submit.slow = 0; 111 __atomic_fetch_add( &cltr->io.flush.external , proc->io.flush.external , __ATOMIC_SEQ_CST ); proc->io.flush.external = 0; 112 __atomic_fetch_add( &cltr->io.calls.flush , proc->io.calls.flush , __ATOMIC_SEQ_CST ); proc->io.calls.flush = 0; 113 __atomic_fetch_add( &cltr->io.calls.submitted , proc->io.calls.submitted , __ATOMIC_SEQ_CST ); proc->io.calls.submitted = 0; 114 __atomic_fetch_add( &cltr->io.calls.drain , proc->io.calls.drain , __ATOMIC_SEQ_CST ); proc->io.calls.drain = 0; 115 __atomic_fetch_add( &cltr->io.calls.completed , proc->io.calls.completed , __ATOMIC_SEQ_CST ); proc->io.calls.completed = 0; 116 __atomic_fetch_add( &cltr->io.calls.errors.busy, proc->io.calls.errors.busy, __ATOMIC_SEQ_CST ); proc->io.calls.errors.busy = 0; 117 __atomic_fetch_add( &cltr->io.poller.sleeps , proc->io.poller.sleeps , __ATOMIC_SEQ_CST ); proc->io.poller.sleeps = 0; 130 118 #endif 131 119 } … … 144 132 uint64_t totalR = ready.pop.local.success + ready.pop.help.success + ready.pop.steal.success + ready.pop.search.success; 145 133 uint64_t totalS = ready.push.local.success + ready.push.share.success + ready.push.extrn.success; 146 sstr | "- totals : " | eng3(totalR) | "run," | eng3(totalS) | "schd (" | eng3(ready.push.extrn.success) | "ext," | eng3(ready.threads.migration) | "mig ," | eng3(ready.threads.extunpark) | " eupk)";134 sstr | "- totals : " | eng3(totalR) | "run," | eng3(totalS) | "schd (" | eng3(ready.push.extrn.success) | "ext," | eng3(ready.threads.migration) | "mig)"; 147 135 148 136 double push_len = ((double)ready.push.local.attempt + ready.push.share.attempt + ready.push.extrn.attempt) / totalS;
Note:
See TracChangeset
for help on using the changeset viewer.