# perf-daemon

## NAME



           perf-daemon - Run record sessions on background
    


## SYNOPSIS



           _perf daemon_
           _perf daemon_ [<options>]
           _perf daemon start_  [<options>]
           _perf daemon stop_   [<options>]
           _perf daemon signal_ [<options>]
           _perf daemon ping_   [<options>]
    


## DESCRIPTION



           This command allows to run simple daemon process that starts and
           monitors configured record sessions.
    
           You can imagine _perf daemon_ of background process with several
           _perf record_ child tasks, like:
    
               # ps axjf
               ...
                    1  916507 ... perf daemon start
               916507  916508 ...  \_ perf record --control=fifo:control,ack -m 10M -e cycles --overwrite --switch-output -a
               916507  916509 ...  \_ perf record --control=fifo:control,ack -m 20M -e sched:* --overwrite --switch-output -a
    
           Not every _perf record_ session is suitable for running under
           daemon. User need perf session that either produces data on query,
           like the flight recorder sessions in above example or session that
           is configured to produce data periodically, like with
           --switch-output configuration for time and size.
    
           Each session is started with control setup (with perf record
           --control options).
    
           Sessions are configured through config file, see CONFIG FILE
           section with EXAMPLES.
    


## OPTIONS



           -v, --verbose
               Be more verbose.
    
           --config=<PATH>
               Config file path. If not provided, perf will check system and
               default locations (/etc/perfconfig, $HOME/.perfconfig).
    
           --base=<PATH>
               Base directory path. Each daemon instance is running on top of
               base directory. Only one instance of server can run on top of
               one directory at the time.
    
           All generic options are available also under commands.
    


## START COMMAND



           The start command creates the daemon process.
    
           -f, --foreground
               Do not put the process in background.
    


## STOP COMMAND



           The stop command stops all the session and the daemon process.
    


## SIGNAL COMMAND



           The signal command sends signal to configured sessions.
    
           --session
               Send signal to specific session.
    


## PING COMMAND



           The ping command sends control ping to configured sessions.
    
           --session
               Send ping to specific session.
    


## CONFIG FILE



           The daemon is configured within standard perf config file by
           following new variables:
    
           daemon.base: Base path for daemon data. All sessions data are
           stored under this path.
    
           session-<NAME>.run: Defines new record session. The value is
           record’s command line without the _record_ keyword.
    
           Each perf record session is run in daemon.base/<NAME> directory.
    


## EXAMPLES



           Example with 2 record sessions:
    
               # cat ~/.perfconfig
               [daemon]
               base=/opt/perfdata
    
               [session-cycles]
               run = -m 10M -e cycles --overwrite --switch-output -a
    
               [session-sched]
               run = -m 20M -e sched:* --overwrite --switch-output -a
    
           Starting the daemon:
    
               # perf daemon start
    
           Check sessions:
    
               # perf daemon
               [603349:daemon] base: /opt/perfdata
               [603350:cycles] perf record -m 10M -e cycles --overwrite --switch-output -a
               [603351:sched] perf record -m 20M -e sched:* --overwrite --switch-output -a
    
           First line is daemon process info with configured daemon base.
    
           Check sessions with more info:
    
               # perf daemon -v
               [603349:daemon] base: /opt/perfdata
                 output:  /opt/perfdata/output
                 lock:    /opt/perfdata/lock
                 up:      1 minutes
               [603350:cycles] perf record -m 10M -e cycles --overwrite --switch-output -a
                 base:    /opt/perfdata/session-cycles
                 output:  /opt/perfdata/session-cycles/output
                 control: /opt/perfdata/session-cycles/control
                 ack:     /opt/perfdata/session-cycles/ack
                 up:      1 minutes
               [603351:sched] perf record -m 20M -e sched:* --overwrite --switch-output -a
                 base:    /opt/perfdata/session-sched
                 output:  /opt/perfdata/session-sched/output
                 control: /opt/perfdata/session-sched/control
                 ack:     /opt/perfdata/session-sched/ack
                 up:      1 minutes
    
           The _base_ path is daemon/session base. The _lock_ file is daemon’s
           lock file guarding that no other daemon is running on top of the
           base. The _output_ file is perf record output for specific session.
           The _control_ and _ack_ files are perf control files. The _up_ number
           shows minutes daemon/session is running.
    
           Make sure control session is online:
    
               # perf daemon ping
               OK   cycles
               OK   sched
    
           Send USR2 signal to session _cycles_ to generate perf.data file:
    
               # perf daemon signal --session cycles
               signal 12 sent to session 'cycles [603452]'
    
               # tail -2  /opt/perfdata/session-cycles/output
               [ perf record: dump data: Woken up 1 times ]
               [ perf record: Dump perf.data.2020123017013149 ]
    
           Send USR2 signal to all sessions:
    
               # perf daemon signal
               signal 12 sent to session 'cycles [603452]'
               signal 12 sent to session 'sched [603453]'
    
               # tail -2  /opt/perfdata/session-cycles/output
               [ perf record: dump data: Woken up 1 times ]
               [ perf record: Dump perf.data.2020123017024689 ]
               # tail -2  /opt/perfdata/session-sched/output
               [ perf record: dump data: Woken up 1 times ]
               [ perf record: Dump perf.data.2020123017024713 ]
    
           Stop daemon:
    
               # perf daemon stop
    


* * *