Changeset 68f36f4


Ignore:
Timestamp:
Jun 19, 2020, 4:59:19 PM (4 years ago)
Author:
Thierry Delisle <tdelisle@…>
Branches:
ADT, arm-eh, ast-experimental, enum, forall-pointer-decay, jacob/cs343-translation, master, new-ast, new-ast-unique-expr, pthread-emulation, qualifiedEnum
Children:
0f89d4f
Parents:
64a7146
Message:

Added Idle Sleep stats and removed extra call to unsafe_remove

Location:
libcfa/src/concurrency
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • libcfa/src/concurrency/kernel.cfa

    r64a7146 r68f36f4  
    371371
    372372                        // Make sure we aren't on the idle queue
     373                        #if !defined(__CFA_NO_STATISTICS__)
     374                                bool removed =
     375                        #endif
    373376                        unsafe_remove( this->cltr->idles, this );
    374                         Link(processor) * link = &this->cltr->idles.stack;
    375                         for() {
    376                                 processor * next = link->top;
    377                                 if( next == this ) {
    378                                         link->top = getNext(this)->top;
    379                                         break;
    380                                 }
    381                                 if( next == 0p ) break;
    382                                 link = getNext(next);
    383                         }
     377
     378                        #if !defined(__CFA_NO_STATISTICS__)
     379                                if(removed) __tls_stats()->ready.sleep.exits++;
     380                        #endif
    384381
    385382                // Unlock the RWlock
     
    672669                push( thrd->curr_cluster, thrd );
    673670
    674                 __wake_one(id, thrd->curr_cluster);
     671                #if !defined(__CFA_NO_STATISTICS__)
     672                        bool woke =
     673                #endif
     674                        __wake_one(id, thrd->curr_cluster);
     675
     676                #if !defined(__CFA_NO_STATISTICS__)
     677                        if(woke) __tls_stats()->ready.sleep.wakes++;
     678                #endif
    675679        ready_schedule_unlock( id );
    676680
     
    969973        if( do_terminate ) return;
    970974
     975        #if !defined(__CFA_NO_STATISTICS__)
     976                __tls_stats()->ready.sleep.halts++;
     977        #endif
    971978        // Push self to queue
    972979        push(cltr->idles, *this);
     
    979986                        __wake_one( id, cltr );
    980987                ready_schedule_unlock( id );
     988                #if !defined(__CFA_NO_STATISTICS__)
     989                        __tls_stats()->ready.sleep.cancels++;
     990                #endif
    981991        }
    982992
  • libcfa/src/concurrency/stats.cfa

    r64a7146 r68f36f4  
    1313                stats->ready.pick.pop .attempt = 0;
    1414                stats->ready.pick.pop .success = 0;
     15                stats->ready.sleep.halts   = 0;
     16                stats->ready.sleep.cancels = 0;
     17                stats->ready.sleep.wakes   = 0;
     18                stats->ready.sleep.exits   = 0;
    1519
    1620                #if defined(HAVE_LINUX_IO_URING_H)
     
    3741                __atomic_fetch_add( &cltr->ready.pick.pop .attempt, proc->ready.pick.pop .attempt, __ATOMIC_SEQ_CST );
    3842                __atomic_fetch_add( &cltr->ready.pick.pop .success, proc->ready.pick.pop .success, __ATOMIC_SEQ_CST );
     43                __atomic_fetch_add( &cltr->ready.sleep.halts  , proc->ready.sleep.halts  , __ATOMIC_SEQ_CST );
     44                __atomic_fetch_add( &cltr->ready.sleep.cancels, proc->ready.sleep.cancels, __ATOMIC_SEQ_CST );
     45                __atomic_fetch_add( &cltr->ready.sleep.wakes  , proc->ready.sleep.wakes  , __ATOMIC_SEQ_CST );
     46                __atomic_fetch_add( &cltr->ready.sleep.exits  , proc->ready.sleep.exits  , __ATOMIC_SEQ_CST );
    3947
    4048                #if defined(HAVE_LINUX_IO_URING_H)
     
    8997                        "- push average probe len : %'18.2lf, %'18.2lf%% (%'15lu attempts)\n"
    9098                        "- pop  average probe len : %'18.2lf, %'18.2lf%% (%'15lu attempts)\n"
     99                        "- Idle Sleep -\n"
     100                        "-- halts                 : %'15lu\n"
     101                        "-- cancelled halts       : %'15lu\n"
     102                        "-- schedule wake         : %'15lu\n"
     103                        "-- wake on exit          : %'15lu\n"
    91104                        #if defined(HAVE_LINUX_IO_URING_H)
    92105                                "\n"
     
    109122                        , push_len, push_sur, stats->ready.pick.push.attempt
    110123                        , pop_len , pop_sur , stats->ready.pick.pop .attempt
     124                        , stats->ready.sleep.halts, stats->ready.sleep.cancels, stats->ready.sleep.wakes, stats->ready.sleep.exits
    111125                        #if defined(HAVE_LINUX_IO_URING_H)
    112126                                , submit_avg.cnt
  • libcfa/src/concurrency/stats.hfa

    r64a7146 r68f36f4  
    3434                        } pop;
    3535                } pick;
     36                struct {
     37                        volatile uint64_t halts;
     38                        volatile uint64_t cancels;
     39                        volatile uint64_t wakes;
     40                        volatile uint64_t exits;
     41                } sleep;
    3642        };
    3743
Note: See TracChangeset for help on using the changeset viewer.