~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/tools/virtio/virtio-trace/README

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /tools/virtio/virtio-trace/README (Version linux-6.12-rc7) and /tools/virtio/virtio-trace/README (Version linux-5.12.19)


  1 Trace Agent for virtio-trace                        1 Trace Agent for virtio-trace
  2 ============================                        2 ============================
  3                                                     3 
  4 Trace agent is a user tool for sending trace d      4 Trace agent is a user tool for sending trace data of a guest to a Host in low
  5 overhead. Trace agent has the following functi      5 overhead. Trace agent has the following functions:
  6  - splice a page of ring-buffer to read_pipe w      6  - splice a page of ring-buffer to read_pipe without memory copying
  7  - splice the page from write_pipe to virtio-c      7  - splice the page from write_pipe to virtio-console without memory copying
  8  - write trace data to stdout by using -o opti      8  - write trace data to stdout by using -o option
  9  - controlled by start/stop orders from a Host      9  - controlled by start/stop orders from a Host
 10                                                    10 
 11 The trace agent operates as follows:               11 The trace agent operates as follows:
 12  1) Initialize all structures.                     12  1) Initialize all structures.
 13  2) Create a read/write thread per CPU. Each t     13  2) Create a read/write thread per CPU. Each thread is bound to a CPU.
 14     The read/write threads hold it.                14     The read/write threads hold it.
 15  3) A controller thread does poll() for a star     15  3) A controller thread does poll() for a start order of a host.
 16  4) After the controller of the trace agent re     16  4) After the controller of the trace agent receives a start order from a host,
 17     the controller wake read/write threads.        17     the controller wake read/write threads.
 18  5) The read/write threads start to read trace     18  5) The read/write threads start to read trace data from ring-buffers and
 19     write the data to virtio-serial.               19     write the data to virtio-serial.
 20  6) If the controller receives a stop order fr     20  6) If the controller receives a stop order from a host, the read/write threads
 21     stop to read trace data.                       21     stop to read trace data.
 22                                                    22 
 23                                                    23 
 24 Files                                              24 Files
 25 =====                                              25 =====
 26                                                    26 
 27 README: this file                                  27 README: this file
 28 Makefile: Makefile of trace agent for virtio-t     28 Makefile: Makefile of trace agent for virtio-trace
 29 trace-agent.c: includes main function, sets up     29 trace-agent.c: includes main function, sets up for operating trace agent
 30 trace-agent.h: includes all structures and som     30 trace-agent.h: includes all structures and some macros
 31 trace-agent-ctl.c: includes controller functio     31 trace-agent-ctl.c: includes controller function for read/write threads
 32 trace-agent-rw.c: includes read/write threads      32 trace-agent-rw.c: includes read/write threads function
 33                                                    33 
 34                                                    34 
 35 Setup                                              35 Setup
 36 =====                                              36 =====
 37                                                    37 
 38 To use this trace agent for virtio-trace, we n     38 To use this trace agent for virtio-trace, we need to prepare some virtio-serial
 39 I/Fs.                                              39 I/Fs.
 40                                                    40 
 41 1) Make FIFO in a host                             41 1) Make FIFO in a host
 42  virtio-trace uses virtio-serial pipe as trace     42  virtio-trace uses virtio-serial pipe as trace data paths as to the number
 43 of CPUs and a control path, so FIFO (named pip     43 of CPUs and a control path, so FIFO (named pipe) should be created as follows:
 44         # mkdir /tmp/virtio-trace/                 44         # mkdir /tmp/virtio-trace/
 45         # mkfifo /tmp/virtio-trace/trace-path-     45         # mkfifo /tmp/virtio-trace/trace-path-cpu{0,1,2,...,X}.{in,out}
 46         # mkfifo /tmp/virtio-trace/agent-ctl-p     46         # mkfifo /tmp/virtio-trace/agent-ctl-path.{in,out}
 47                                                    47 
 48 For example, if a guest use three CPUs, the na     48 For example, if a guest use three CPUs, the names are
 49         trace-path-cpu{0,1,2}.{in.out}             49         trace-path-cpu{0,1,2}.{in.out}
 50 and                                                50 and
 51         agent-ctl-path.{in,out}.                   51         agent-ctl-path.{in,out}.
 52                                                    52 
 53 2) Set up of virtio-serial pipe in a host          53 2) Set up of virtio-serial pipe in a host
 54  Add qemu option to use virtio-serial pipe.        54  Add qemu option to use virtio-serial pipe.
 55                                                    55 
 56  ##virtio-serial device##                          56  ##virtio-serial device##
 57      -device virtio-serial-pci,id=virtio-seria     57      -device virtio-serial-pci,id=virtio-serial0\
 58  ##control path##                                  58  ##control path##
 59      -chardev pipe,id=charchannel0,path=/tmp/v     59      -chardev pipe,id=charchannel0,path=/tmp/virtio-trace/agent-ctl-path\
 60      -device virtserialport,bus=virtio-serial0     60      -device virtserialport,bus=virtio-serial0.0,nr=1,chardev=charchannel0,\
 61       id=channel0,name=agent-ctl-path\             61       id=channel0,name=agent-ctl-path\
 62  ##data path##                                     62  ##data path##
 63      -chardev pipe,id=charchannel1,path=/tmp/v     63      -chardev pipe,id=charchannel1,path=/tmp/virtio-trace/trace-path-cpu0\
 64      -device virtserialport,bus=virtio-serial0 !!  64      -device virtserialport,bus=virtio-serial0.0,nr=2,chardev=charchannel0,\
 65       id=channel1,name=trace-path-cpu0\            65       id=channel1,name=trace-path-cpu0\
 66       ...                                          66       ...
 67                                                    67 
 68 If you manage guests with libvirt, add the fol     68 If you manage guests with libvirt, add the following tags to domain XML files.
 69 Then, libvirt passes the same command option t     69 Then, libvirt passes the same command option to qemu.
 70                                                    70 
 71         <channel type='pipe'>                      71         <channel type='pipe'>
 72            <source path='/tmp/virtio-trace/age     72            <source path='/tmp/virtio-trace/agent-ctl-path'/>
 73            <target type='virtio' name='agent-c     73            <target type='virtio' name='agent-ctl-path'/>
 74            <address type='virtio-serial' contr     74            <address type='virtio-serial' controller='0' bus='0' port='0'/>
 75         </channel>                                 75         </channel>
 76         <channel type='pipe'>                      76         <channel type='pipe'>
 77            <source path='/tmp/virtio-trace/tra     77            <source path='/tmp/virtio-trace/trace-path-cpu0'/>
 78            <target type='virtio' name='trace-p     78            <target type='virtio' name='trace-path-cpu0'/>
 79            <address type='virtio-serial' contr     79            <address type='virtio-serial' controller='0' bus='0' port='1'/>
 80         </channel>                                 80         </channel>
 81         ...                                        81         ...
 82 Here, chardev names are restricted to trace-pa     82 Here, chardev names are restricted to trace-path-cpuX and agent-ctl-path. For
 83 example, if a guest use three CPUs, chardev na     83 example, if a guest use three CPUs, chardev names should be trace-path-cpu0,
 84 trace-path-cpu1, trace-path-cpu2, and agent-ct     84 trace-path-cpu1, trace-path-cpu2, and agent-ctl-path.
 85                                                    85 
 86 3) Boot the guest                                  86 3) Boot the guest
 87  You can find some chardev in /dev/virtio-port     87  You can find some chardev in /dev/virtio-ports/ in the guest.
 88                                                    88 
 89                                                    89 
 90 Run                                                90 Run
 91 ===                                                91 ===
 92                                                    92 
 93 0) Build trace agent in a guest                    93 0) Build trace agent in a guest
 94         $ make                                     94         $ make
 95                                                    95 
 96 1) Enable ftrace in the guest                      96 1) Enable ftrace in the guest
 97  <Example>                                         97  <Example>
 98         # echo 1 > /sys/kernel/tracing/events/ !!  98         # echo 1 > /sys/kernel/debug/tracing/events/sched/enable
 99                                                    99 
100 2) Run trace agent in the guest                   100 2) Run trace agent in the guest
101  This agent must be operated as root.             101  This agent must be operated as root.
102         # ./trace-agent                           102         # ./trace-agent
103 read/write threads in the agent wait for start    103 read/write threads in the agent wait for start order from host. If you add -o
104 option, trace data are output via stdout in th    104 option, trace data are output via stdout in the guest.
105                                                   105 
106 3) Open FIFO in a host                            106 3) Open FIFO in a host
107         # cat /tmp/virtio-trace/trace-path-cpu    107         # cat /tmp/virtio-trace/trace-path-cpu0.out
108 If a host does not open these, trace data get     108 If a host does not open these, trace data get stuck in buffers of virtio. Then,
109 the guest will stop by specification of charde    109 the guest will stop by specification of chardev in QEMU. This blocking mode may
110 be solved in the future.                          110 be solved in the future.
111                                                   111 
112 4) Start to read trace data by ordering from a    112 4) Start to read trace data by ordering from a host
113  A host injects read start order to the guest     113  A host injects read start order to the guest via virtio-serial.
114         # echo 1 > /tmp/virtio-trace/agent-ctl    114         # echo 1 > /tmp/virtio-trace/agent-ctl-path.in
115                                                   115 
116 5) Stop to read trace data by ordering from a     116 5) Stop to read trace data by ordering from a host
117  A host injects read stop order to the guest v    117  A host injects read stop order to the guest via virtio-serial.
118         # echo 0 > /tmp/virtio-trace/agent-ctl    118         # echo 0 > /tmp/virtio-trace/agent-ctl-path.in
                                                      

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php