mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 11:11:45 -04:00
st: implement tape statistics
This patch implements tape statistics in the st module via sysfs. Current no statistics are available for tape I/O and there is no easy way to reuse the block layer statistics for tape as tape is a character device and does not have perform I/O in sector sized chunks (the size of the data written to tape can change). For tapes we also need extra stats related to things like tape movement (via other I/O). There have been multiple end users requesting statistics including AT&T (and some HP customers who have not given permission to be named). It is impossible for them to investigate any issues related to tape performance in a non-invasive way. [jejb: eliminate PRId64] Signed-off-by: Shane Seymour <[email protected]> Tested-by: Shane Seymour <[email protected]> Reviewed-by: Christoph Hellwig <[email protected]> Signed-off-by: James Bottomley <[email protected]>
This commit is contained in:
parent
ba92999252
commit
05545c92db
4 changed files with 461 additions and 1 deletions
|
|
@ -151,6 +151,65 @@ A link named 'tape' is made from the SCSI device directory to the class
|
|||
directory corresponding to the mode 0 auto-rewind device (e.g., st0).
|
||||
|
||||
|
||||
SYSFS AND STATISTICS FOR TAPE DEVICES
|
||||
|
||||
The st driver maintains statistics for tape drives inside the sysfs filesystem.
|
||||
The following method can be used to locate the statistics that are
|
||||
available (assuming that sysfs is mounted at /sys):
|
||||
|
||||
1. Use opendir(3) on the directory /sys/class/scsi_tape
|
||||
2. Use readdir(3) to read the directory contents
|
||||
3. Use regcomp(3)/regexec(3) to match directory entries to the extended
|
||||
regular expression "^st[0-9]+$"
|
||||
4. Access the statistics from the /sys/class/scsi_tape/<match>/stats
|
||||
directory (where <match> is a directory entry from /sys/class/scsi_tape
|
||||
that matched the extended regular expression)
|
||||
|
||||
The reason for using this approach is that all the character devices
|
||||
pointing to the same tape drive use the same statistics. That means
|
||||
that st0 would have the same statistics as nst0.
|
||||
|
||||
The directory contains the following statistics files:
|
||||
|
||||
1. in_flight - The number of I/Os currently outstanding to this device.
|
||||
2. io_ns - The amount of time spent waiting (in nanoseconds) for all I/O
|
||||
to complete (including read and write). This includes tape movement
|
||||
commands such as seeking between file or set marks and implicit tape
|
||||
movement such as when rewind on close tape devices are used.
|
||||
3. other_cnt - The number of I/Os issued to the tape drive other than read or
|
||||
write commands. The time taken to complete these commands uses the
|
||||
following calculation io_ms-read_ms-write_ms.
|
||||
4. read_byte_cnt - The number of bytes read from the tape drive.
|
||||
5. read_cnt - The number of read requests issued to the tape drive.
|
||||
6. read_ns - The amount of time (in nanoseconds) spent waiting for read
|
||||
requests to complete.
|
||||
7. write_byte_cnt - The number of bytes written to the tape drive.
|
||||
8. write_cnt - The number of write requests issued to the tape drive.
|
||||
9. write_ns - The amount of time (in nanoseconds) spent waiting for write
|
||||
requests to complete.
|
||||
10. resid_cnt - The number of times during a read or write we found
|
||||
the residual amount to be non-zero. This should mean that a program
|
||||
is issuing a read larger thean the block size on tape. For write
|
||||
not all data made it to tape.
|
||||
|
||||
Note: The in_flight value is incremented when an I/O starts the I/O
|
||||
itself is not added to the statistics until it completes.
|
||||
|
||||
The total of read_cnt, write_cnt, and other_cnt may not total to the same
|
||||
value as iodone_cnt at the device level. The tape statistics only count
|
||||
I/O issued via the st module.
|
||||
|
||||
When read the statistics may not be temporally consistent while I/O is in
|
||||
progress. The individual values are read and written to atomically however
|
||||
when reading them back via sysfs they may be in the process of being
|
||||
updated when starting an I/O or when it is completed.
|
||||
|
||||
The value shown in in_flight is incremented before any statstics are
|
||||
updated and decremented when an I/O completes after updating statistics.
|
||||
The value of in_flight is 0 when there are no I/Os outstanding that are
|
||||
issued by the st driver. Tape statistics do not take into account any
|
||||
I/O performed via the sg device.
|
||||
|
||||
BSD AND SYS V SEMANTICS
|
||||
|
||||
The user can choose between these two behaviours of the tape driver by
|
||||
|
|
|
|||
Loading…
Reference in a new issue