• Thomas Richter's avatar
    s390/cpum_sf: Adjust sampling interval to avoid hitting sample limits · 39d4a501
    Thomas Richter authored
    Function perf_event_ever_overflow() and perf_event_account_interrupt()
    are called every time samples are processed by the interrupt handler.
    However function perf_event_account_interrupt() has checks to avoid being
    flooded with interrupts (more then 1000 samples are received per
    task_tick).  Samples are then dropped and a PERF_RECORD_THROTTLED is
    added to the perf data. The perf subsystem limit calculation is:
    
        maximum sample frequency := 100000 --> 1 samples per 10 us
        task_tick = 10ms = 10000us --> 1000 samples per task_tick
    
    The work flow is
    
    measurement_alert() uses SDBT head and each SBDT points to 511
     SDB pages, each with 126 sample entries. After processing 8 SBDs
     and for each valid sample calling:
    
         perf_event_overflow()
           perf_event_account_interrupts()
    
    there is a considerable amount of samples being dropped, especially when
    the sample frequency is very high and near the 100000 limit.
    
    To avoid the high amount of samples being dropped near the end of a
    task_tick time frame, increment the sampling interval in case of
    dropped events. The CPU Measurement sampling facility on the s390
    supports only intervals, specifiing how many CPU cycles have to be
    executed before a sample is generated. Increase the interval when the
    samples being generated hit the task_tick limit.
    Signed-off-by: default avatarThomas Richter <tmricht@linux.ibm.com>
    Signed-off-by: default avatarVasily Gorbik <gor@linux.ibm.com>
    39d4a501
perf_cpum_sf.c 62.1 KB