• Andres Freund's avatar
    Improve efficiency of wait event reporting, remove proc.h dependency. · 225a22b1
    Andres Freund authored
    pgstat_report_wait_start() and pgstat_report_wait_end() required two
    conditional branches so far. One to check if MyProc is NULL, the other to
    check if pgstat_track_activities is set. As wait events are used around
    comparatively lightweight operations, and are inlined (reducing branch
    predictor effectiveness), that's not great.
    
    The dependency on MyProc has a second disadvantage: Low-level subsystems, like
    storage/file/fd.c, report wait events, but architecturally it is preferable
    for them to not depend on inter-process subsystems like proc.h (defining
    PGPROC).  After this change including pgstat.h (nor obviously its
    sub-components like backend_status.h, wait_event.h, ...) does not pull in IPC
    related headers anymore.
    
    These goals, efficiency and abstraction, are achieved by having
    pgstat_report_wait_start/end() not interact with MyProc, but instead a new
    my_wait_event_info variable. At backend startup it points to a local variable,
    removing the need to check for MyProc being NULL. During process
    initialization my_wait_event_info is redirected to MyProc->wait_event_info. At
    shutdown this is reversed. Because wait event reporting now does not need to
    know about where the wait event is stored, it does not need to know about
    PGPROC anymore.
    
    The removal of the branch for checking pgstat_track_activities is simpler:
    Don't check anymore. The cost due to the branch are often higher than the
    store - and even if not, pgstat_track_activities is rarely disabled.
    
    The main motivator to commit this work now is that removing the (indirect)
    pgproc.h include from pgstat.h simplifies a patch to move statistics reporting
    to shared memory (which still has a chance to get into 14).
    
    Author: Andres Freund <andres@anarazel.de>
    Discussion: https://postgr.es/m/20210402194458.2vu324hkk2djq6ce@alap3.anarazel.de
    225a22b1
proc.c 61.2 KB