ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/i-scream/projects/libstatgrab/docs/diskio.txt
(Generate patch)

Comparing projects/libstatgrab/docs/diskio.txt (file contents):
Revision 1.1 by pajs, Wed Jun 4 16:24:52 2003 UTC vs.
Revision 1.3 by tdb, Sun Aug 24 20:24:08 2003 UTC

# Line 1 | Line 1
1 < Diskio Statistics
1 > DiskIO Statistics
2 > =================
3  
4 < All diskio statistics return a diskio_stat_t structure.
4 > $Id$
5  
6 + Data Structure
7 + --------------
8 +
9 + All diskio statistics return a structure of type diskio_stat_t that
10 + looks like this:
11 +
12   typedef struct{
13          char *disk_name;
14          long long read_bytes;
# Line 9 | Line 16 | typedef struct{
16          time_t systime;
17   }diskio_stat_t;
18  
19 < disk_name is the name know to the OS. E.g. hda on linux.
20 < read_bytes is the number of bytes that disk has read.
21 < write_bytes is the number of bytes that disk has written.
22 < sysname is time_t covering the time the amount of data in rx/tx was
23 < generated.
19 > disk_name       is the name known to the operating system.
20 >                (eg. on linux it might be hda)
21 > read_bytes      is the number of bytes that disk has read.
22 > write_bytes     is the number of bytes that disk has written.
23 > sysname         is the time period over which read_bytes and
24 >                write_bytes were transferred.
25  
26 + Functions
27 + ---------
28 +
29   diskio_stat_t *get_diskio_stats(int *entries);
30  
31   diskio_stat_t *get_diskio_stats_diff(int *entries);
32  
33 < Both calls take a pointer to an int, "entries". This is filled with the number
34 < of disks the machine has. You need to know this to know how many diskio_stat_t
35 < have been returned.
33 > Both calls take a pointer to an int, "entries", which is filled with
34 > the number of disks the machine has. This is needed to know how many
35 > diskio_stat_t structures have been returned. A pointer is returned to
36 > the first diskio_stat_t.
37  
38 < get_diskio_stats returns the disk io stored in the kernel. E.g.
39 < since bootup as long as the way it is stored in the kernel can store a large
40 < enough number. Solaris 7 can not, it only stores it in a 32bit int, so it
41 < can only store upto 4gb before it will wrap around. Solaris 8 upwards stores
42 < it in a 64bit int and so is a very large number :)
38 > get_diskio_stats returns the disk IO stored in the kernel which holds
39 > the amount of data transferred since bootup. On some platforms, such as
40 > Solaris 7, this value is stored in a 32bit int, so wraps around when it
41 > reaches 4GB. Other platforms, such as Solaris 8, hold the value in a
42 > 64bit int, which wraps somewhere near 17 million terabytes.
43  
44   get_diskio_stats_diff is the same as get_diskio_stats except it will
45   return the difference since the last call. So, for instance a call to
46 < get_diskio_stats_diff is made, and called again 5 seconds later. Over that
47 < time, 2000 bytes of traffic was written and 10000 bytes read. write_bytes will
48 < store 2000 bytes, read_bytes will store 10000 and systime will store 5. This
49 < function copes with wrap arounds by the O/S so should be seemless to use.
46 > get_diskio_stats_diff is made, and called again 5 seconds later. Over
47 > that time, 2000 bytes of traffic were written and 10000 bytes read.
48 > write_bytes will store 2000 bytes, read_bytes will store 10000, and
49 > systime will store 5. This function copes with wrap arounds by the O/S
50 > so should be seemless to use.
51  
52 < Bugs:
53 < get_diskio_stats_diff on very first call will return the same as
41 < get_diskio_stats. After first call it will always return the difference.
42 < On machines that hold only 32bits of information, if the call is made 2x
43 < wrap around (eg sol7 9gb has been transferred, and it wraps at 4gb) it will
44 < return incorrect results (case above, it would say 5gb transferred).
52 > Bugs
53 > ----
54  
55 < Very basic example in examples/disk_traffic.c
55 > On the very first call get_diskio_stats_diff will return the same as
56 > get_diskio_stats. After the first call it will always return the
57 > difference.
58 >
59 > On operating systems that hold only 32bits of data there is a problem
60 > if the values wrap twice. For example, on Solaris 7 if 9GB is
61 > transferred and the operating system wraps at 4GB, the
62 > get_diskio_stats_diff function will return 5GB.
63 >
64 > Example
65 > -------
66 >
67 > A very basic example can be found in examples/disk_traffic.c

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines