jablonka.czprosek.czf

hotsanic

Subversion Repositories:
[/] [branches/] [HotSaNIC-0.5.0-pre6/] [modules/] [diskio/] [platform/] [linux.pm] - Blame information for rev 1

 

Line No. Rev Author Line
11simandlpackage HotSaNICmod::OSdep;
2 
3sub version {
4 ($VERSION = '$Revision: 1.14 $') =~ s/.*(\d+\.\d+).*/$1/;
5 return "$^O.pm $VERSION";
6 }
7 
8sub sample {
9 my %args=@_;
10 
11 my %DEVS;
12 foreach (@{$args{DEV}}) {
13 my ($device,$name)=split /,/;
14 $name =~ s/\//_/g;
15 $name =~ s/^_//g;
16 $DEVS{$device}=$name;
17 }
18 
19######################################################################
20#
21# KERNEL 2.2 CODE
22#
23 if ($args{KERNEL} eq "2.2") {
24 # disk 1494755 377215 221577 144318
25 # disk_rio 564538 286941 151189 77490
26 # disk_wio 930217 90274 70388 66828
27 # disk_rblk 1129538 573882 302378 154980
28 # disk_wblk 1860536 180548 140776 133656
29 open FILE,"/proc/stat";
30 while (<FILE>) {
31 (undef,@readacc)=split if /disk_rio/;
32 (undef,@writeacc)=split if /disk_wio/;
33 (undef,@readblk)=split if /disk_rblk/;
34 (undef,@writeblk)=split if /disk_wblk/;
35 }
36 close FILE;
37 $device=0;
38 while (@readacc) {
39 $racc=shift @readacc;
40 $wacc=shift @writeacc;
41 $rblk=shift @readblk;
42 $wblk=shift @writeblk;
43 
44 $blocksize=512;
45 HotSaNICmod::do_rrd($device,"U",time,$racc,$blocksize*$rblk,$wacc,$blocksize*$wblk);
46 
47 $device++;
48 }
49 }
50 
51######################################################################
52#
53# KERNEL 2.4 CODE
54#
55 elsif ($args{KERNEL} eq "2.4") {
56 if ( ($args{"SOURCE"} eq "partitions") or ($args{"SOURCE"} eq "diskstats") ) {
57 # major minor #blocks name rio rmerge rsect ruse wio wmerge wsect wuse running use aveq
58 # 8 16 8958120 sdb 285 6274 52274 17480 9 3 96 0 0 2750 17480
59 # 34 0 80043264 ide/host2/bus1/target0/lun0/disc 2368478 1209106 28620666 20372050 2689313 9234680 95391960 22393060 0 26560040 42765110
60 open FILE,"/proc/".$args{SOURCE};
61 $_=<FILE>; # strip header
62 while (<FILE>) {
63 chomp;
64 if ($_ ne "") {
65 ($major,$minor,undef,undef,$rio,undef,$rsect,undef,$wio,undef,$wsect,undef) = split;
66 
67 $device=$major."_".$minor;
68 if (defined $DEVS{$device}) {
69 my $sectsize=512;
70 HotSaNICmod::do_rrd($device,"U",time,$rio,$sectsize*$rsect,$wio,$sectsize*$wsect);
71 }
72 }
73 }
74 close FILE;
75 }
76 else {
77 # disk_io: (8,0):(985065,41330,436455,943735,13075448) (8,1):(12563,6363,333604,6200,167608) (8,2):(11194,11012,90140,182,3160)
78 open FILE,"/proc/stat";
79 while (<FILE>) { (undef,@stats)=split if /disk_io/; }
80 close FILE;
81 foreach my $entry (@stats) {
82 $entry=~ s/[()]//g;
83 $entry=~ s/:/,/g;
84 my ($num1,$num2,undef,$racc,$rblk,$wacc,$wblk)=split /,/,$entry;
85 
86 $device=$num1."_".$num2;
87 if (defined $DEVS{$device}) {
88 $blocksize=512;
89 HotSaNICmod::do_rrd($device,"U",time,$racc,$blocksize*$rblk,$wacc,$blocksize*$wblk);
90 }
91 }
92 }
93 }
94 
95######################################################################
96#
97# KERNEL 2.6 CODE
98#
99 elsif ($args{KERNEL} eq "2.6") {
100 # diskstats: major minor name rio rmerge rsect ruse wio wmerge wsect wuse running use aveq
101 # 3 64 hdb 524233 57272 91269016 6239457 233008 24726677 199678904 73630251 0 6331127 79891245
102 # 3 64 hdb 524298 57274 91284864 6239742 233012 24726679 199678952 73630252 0 6331403 79891531
103 open FILE,"/proc/diskstats";
104 while ($entry = <FILE>) {
105 $entry =~ s/^\s*//; # strip leading whitespaces
106 my ($major,$minor,undef,$racc,undef,$rsect,undef,$wacc,undef,$wsect)=split(/\s+/,$entry);
107 $device=$major."_".$minor;
108 if (defined $DEVS{$device}) {
109 my $sectsize=512;
110 HotSaNICmod::do_rrd($device,"U",time,$racc,$rsect*$sectsize,$wacc,$wsect*$sectsize);
111 }
112 }
113 close FILE;
114 }
115 
116 }
117 
1181;
119 

Powered by WebSVN 2.2.1