aboutsummaryrefslogtreecommitdiff
path: root/cddl/contrib/dtracetoolkit/Examples/fsrw_example.txt
diff options
context:
space:
mode:
Diffstat (limited to 'cddl/contrib/dtracetoolkit/Examples/fsrw_example.txt')
-rw-r--r--cddl/contrib/dtracetoolkit/Examples/fsrw_example.txt129
1 files changed, 129 insertions, 0 deletions
diff --git a/cddl/contrib/dtracetoolkit/Examples/fsrw_example.txt b/cddl/contrib/dtracetoolkit/Examples/fsrw_example.txt
new file mode 100644
index 000000000000..b153303738ee
--- /dev/null
+++ b/cddl/contrib/dtracetoolkit/Examples/fsrw_example.txt
@@ -0,0 +1,129 @@
+The following are demonstrations of the fsrw.d script.
+
+
+Here the fsrw.d script was running while a 50 Kbyte file was read,
+
+ # ./fsrw.d
+ Event Device RW Size Offset Path
+ sc-read . R 8192 0 /extra1/50k
+ fop_read . R 8192 0 /extra1/50k
+ disk_io cmdk0 R 8192 0 /extra1/50k
+ disk_ra cmdk0 R 8192 8 /extra1/50k
+ sc-read . R 8192 8 /extra1/50k
+ fop_read . R 8192 8 /extra1/50k
+ disk_ra cmdk0 R 34816 16 /extra1/50k
+ sc-read . R 8192 16 /extra1/50k
+ fop_read . R 8192 16 /extra1/50k
+ sc-read . R 8192 24 /extra1/50k
+ fop_read . R 8192 24 /extra1/50k
+ sc-read . R 8192 32 /extra1/50k
+ fop_read . R 8192 32 /extra1/50k
+ sc-read . R 8192 40 /extra1/50k
+ fop_read . R 8192 40 /extra1/50k
+ sc-read . R 8192 48 /extra1/50k
+ fop_read . R 8192 48 /extra1/50k
+ sc-read . R 8192 50 /extra1/50k
+ fop_read . R 8192 50 /extra1/50k
+ ^C
+
+By looking closely at the Offset (Kbytes) and Size of each transaction, we
+can see how the read() system calls (sc-read) were satisfied by the file
+system. There were 8 read() system calls, and 3 disk events - 2 of which were
+UFS read-ahead (disk_ra). The final read-ahead was for 34 Kbytes and began
+with an offset of 16 Kbytes, which read the remaining file data (34 + 16 = 50
+Kbytes). The subsequent read() system calls and corresponding fop_read() calls
+returned from the page cache.
+
+
+
+The following demonstrates how a logical I/O is broken up into multiple
+physical I/O events. Here a dd command was used to read 1 Mbytes from the
+/var/sadm/install/contents file while fsrw.d was tracing.
+
+ # ./fsrw.d
+ Event Device RW Size Offset Path
+ sc-read . R 1048576 0 /var/sadm/install/contents
+ fop_read . R 1048576 0 /var/sadm/install/contents
+ disk_ra cmdk0 R 4096 72 /var/sadm/install/contents
+ disk_ra cmdk0 R 8192 96 <none>
+ disk_ra cmdk0 R 57344 96 /var/sadm/install/contents
+ disk_ra cmdk0 R 57344 152 /var/sadm/install/contents
+ disk_ra cmdk0 R 57344 208 /var/sadm/install/contents
+ disk_ra cmdk0 R 49152 264 /var/sadm/install/contents
+ disk_ra cmdk0 R 57344 312 /var/sadm/install/contents
+ disk_ra cmdk0 R 57344 368 /var/sadm/install/contents
+ disk_ra cmdk0 R 57344 424 /var/sadm/install/contents
+ disk_ra cmdk0 R 57344 480 /var/sadm/install/contents
+ disk_ra cmdk0 R 57344 536 /var/sadm/install/contents
+ disk_ra cmdk0 R 57344 592 /var/sadm/install/contents
+ disk_ra cmdk0 R 57344 648 /var/sadm/install/contents
+ disk_ra cmdk0 R 57344 704 /var/sadm/install/contents
+ disk_ra cmdk0 R 57344 760 /var/sadm/install/contents
+ disk_ra cmdk0 R 57344 816 /var/sadm/install/contents
+ disk_ra cmdk0 R 57344 872 /var/sadm/install/contents
+ disk_ra cmdk0 R 57344 928 /var/sadm/install/contents
+ disk_ra cmdk0 R 57344 984 /var/sadm/install/contents
+ disk_ra cmdk0 R 57344 1040 /var/sadm/install/contents
+ ^C
+
+Both the read() syscall (sc-read) and the fop_read() call asked the file system
+for 1048576 bytes, which was then broken into numerous disk I/O events of up to
+56 Kbytes in size. The 8192 byte read with a path of "<none>" is likely to be
+the file system reading the indirect block pointers for the
+/var/sadm/install/contents file (something DTrace could confirm in detail).
+
+
+
+
+The following traces activity as a cp command copies a 50 Kbyte file.
+
+ # ./fsrw.d
+ Event Device RW Size Offset Path
+ disk_io dad1 R 1024 0 /extra1
+ disk_io dad1 R 8192 0 <none>
+ disk_io dad1 R 8192 0 <none>
+ disk_io dad1 R 2048 0 <none>
+ disk_io dad1 R 2048 0 <none>
+ sc-write . W 51200 0 /extra1/outfile
+ fop_write . W 51200 0 /extra1/outfile
+ disk_io dad1 R 8192 0 /extra1/50k
+ disk_ra dad1 R 8192 8 /extra1/50k
+ disk_ra dad1 R 34816 16 /extra1/50k
+ disk_io dad1 R 2048 0 <none>
+ disk_io dad1 W 49152 0 /extra1/outfile
+ ^C
+
+Reads including UFS read-ahead can be seen as the file is read.
+The output finishes with disk writes as the new file is flushed to disk.
+The syscall write() and fop_write() can be seen to the /extra1/outfile,
+however there is no syscall read() or fop_read() to /extra1/50k - which
+we may have expected to occur before the writes. This is due to the way
+the cp command now works, it uses mmap() to map files in for reading.
+This activity can be seen if we also trace fop_getpage() and fop_putpage(),
+as the fspaging.d dtrace script does.
+
+ # ./fspaging.d
+ Event Device RW Size Offset Path
+ disk_io dad1 R 1024 0 /extra1
+ disk_io dad1 R 8192 0 <none>
+ disk_io dad1 R 2048 0 <none>
+ sc-write . W 51200 0 /extra1/outfile
+ fop_write . W 51200 0 /extra1/outfile
+ fop_getpage . R 8192 0 /extra1/50k
+ disk_io dad1 R 8192 0 /extra1/50k
+ disk_ra dad1 R 8192 8 /extra1/50k
+ fop_getpage . R 8192 8 /extra1/50k
+ disk_ra dad1 R 34816 16 /extra1/50k
+ fop_getpage . R 8192 16 /extra1/50k
+ fop_getpage . R 8192 24 /extra1/50k
+ fop_getpage . R 8192 32 /extra1/50k
+ fop_getpage . R 8192 40 /extra1/50k
+ fop_getpage . R 8192 48 /extra1/50k
+ fop_putpage . W 8192 0 /extra1/outfile
+ fop_putpage . W 8192 8 /extra1/outfile
+ fop_putpage . W 8192 16 /extra1/outfile
+ fop_putpage . W 8192 24 /extra1/outfile
+ fop_putpage . W 8192 32 /extra1/outfile
+ fop_putpage . W 8192 40 /extra1/outfile
+ disk_io dad1 W 51200 0 /extra1/outfile
+