]>
git.proxmox.com Git - pve-manager.git/blob - bin/pveperf
6 use Time
::HiRes
qw( usleep ualarm gettimeofday tv_interval );
7 use Net
::DNS
::Resolver
;
12 print STDERR
"usage: $0 [PATH]\n";
16 my $path = $ARGV[0] || '/';
19 # free pagecache,dentries,inode cache
20 if (-f
'/proc/sys/vm/drop_caches') {
21 system ("echo 3 > /proc/sys/vm/drop_caches");
28 open (TMP
, "/proc/cpuinfo");
30 while (my $line = <TMP
>) {
31 if ($line =~ m/^bogomips\s*:\s*(\d+\.\d+)\s*$/) {
38 printf "CPU BOGOMIPS: %.2f\n", $bogomips;
43 my $starttime = [gettimeofday
];
50 my $str = int(rand(1000000)) . time();
51 if ($str =~ m/(.+)123.?123/) {
53 $elapsed = tv_interval
($starttime);
58 printf "REGEX/SECOND: %d\n", $count;
66 my $dir = "$basedir/ptest.$$";
71 my $data = ('A' x
4000) . "\n";
73 my $starttime = [gettimeofday
];
78 for ($count=1;;$count++) {
81 my $filename = "$dir/tf_$m.dat";
83 open (TMP
, ">$filename") || die "open failed: $!\n";
87 PVE
::Tools
::fsync
(fileno(\
*TMP
));
91 $elapsed = tv_interval
($starttime);
95 my $sps = $count /$elapsed; # fsync per second
97 printf "FSYNCS/SECOND: %.2f\n", $sps;
102 system ("rm -rf $dir");
108 my ($rootdev, $hdsize) = @_;
112 open (ROOTHD
, "<$rootdev") || die "unable to open HD '$rootdev': $!\n";
114 my $starttime = [gettimeofday
];
119 for ($count=1;;$count++) {
121 my $pos = int (rand (int($hdsize/512))) * 512;
123 sysseek (ROOTHD
, $pos, 0);
125 (sysread (ROOTHD
, $readbuf, 512) == 512) || die "read failed: $!\n";
127 $elapsed = tv_interval
($starttime);
129 last if $elapsed > 3;
134 my $rps = $count /$elapsed; # blocks per second
135 my $ast = (1000/$rps);
136 printf "AVERAGE SEEK TIME: %.2f ms\n", $ast;
144 my $starttime = [gettimeofday
];
150 open (ROOTHD
, "<$rootdev") || die "unable to open HD '$rootdev': $!\n";
153 my $c = sysread (ROOTHD
, $readbuf, 2 * 1024 *1024);
154 die "read failed: $!\n" if $c < 0;
158 $elapsed = tv_interval
($starttime);
159 last if $elapsed > 3;
164 my $bps = $bytes /($elapsed * 1024 * 1024); # MB per second
165 printf "BUFFERED READS: %.2f MB/sec\n", $bps;
169 my ($resolv, $dns) = @_;
171 if (my $a = $resolv->send ($dns, 'A')) {
172 foreach my $rra ($a->answer) {
173 if ($rra->type eq 'A') {
174 return $rra->address;
194 #$dnsargs{nameservers} = [ qw (208.67.222.222) ];
195 #$dnsargs{nameservers} = [ qw (127.0.0.1) ];
197 my $resolv = Net
::DNS
::Resolver-
>new (%dnsargs);
199 my $starttime = [gettimeofday
];
204 my $uid = time() . int(rand(1000000));
205 my $domain = "nonexistent$uid.com";
207 for ($count=1;;$count++) {
209 my $hid = int(rand(1000000));
210 my $hname = "test${hid}.$domain";
211 get_address
($resolv, $hname);
212 $elapsed = tv_interval
($starttime);
214 last if ($count > 100) || ($elapsed > 3);
217 printf "DNS EXT: %0.2f ms\n", ($elapsed * 1000)/$count;
219 my $resolv_conf = `cat /etc/resolv.conf`;
220 ($domain) = $resolv_conf =~ m/^search\s+(\S+)\s*$/mg;
223 $starttime = [gettimeofday
];
226 for ($count=1;;$count++) {
228 my $hid = int(rand(1000000));
229 my $hname = "test${hid}.$domain";
230 get_address
($resolv, $hname);
231 $elapsed = tv_interval
($starttime);
233 last if ($count > 100) || ($elapsed > 3);
236 printf "DNS INT: %0.2f ms (%s)\n",
237 ($elapsed * 1000)/ $count, $domain;
244 my $hd = `df -P '$path'`;
246 my ($rootdev, $hdo_total, $hdo_used, $hdo_avail) = $hd =~
247 m/^(\S+)\s+(\d+)\s+(\d+)\s+(\d+)\s+\S+\s+.*$/mg;
250 my $hdsize = $hdo_total*1024;
251 printf "HD SIZE: %.2f GB ($rootdev)\n", ($hdsize / (1024*1024*1024));
253 if ($rootdev =~ m
|^/dev/|) {
254 test_read
($rootdev);
256 test_seektime
($rootdev, $hdsize);
261 test_fsync
($path) if $hdo_avail;