patch: p4tcc and speedstep cpufreq drivers

Kevin Oberman oberman at es.net
Sun Jul 3 00:36:54 GMT 2005


> Date: Wed, 23 Feb 2005 11:25:52 -0800
> From: Nate Lawson <nate at root.org>
> 
> Kevin Oberman wrote:
> > 
> > Well, it all seems working, but the performance is not proportional to
> > the "frequency". I am attaching the results of testing. The fisrt column
> > is value of freq and the second is the transfer rate from dd to md5.
> > 
> > FWIW, when I did have TCC working I had 31 freq_levels, but if I set the
> > freq below about 200, my system freezes and requires a hard power
> > cycle. I am running ULE but no PREEMPTION. The exact point at which it
> > locks up is not consistent.
> 
> Please cvsup and test.  I imported a bugfixed version of p4tcc.  I've 
> run an R32 at 50 Mhz, no problems.

No joy. I set it to 262 and it was fine. The next step killed the system
again.

I'm also concerned that taking TCC out of automatic mode might not be a
great idea, at least until things like _PSV are supported. When I do a
buildkernel, buildworld or any big compile job, I need to slow down the
CPU to keep the CPU form frying. It quickly jumps to 185 F. or higher if
I don't. If I understand automatic TCC, it should throttle the CPU all
by itself to prevent this.

Between throttling and frequency adjustment I can get about 16
performance levels and I don' see a good reason for another 15. Also,
the change is frequency is so non-linear that small changes often don't
make sense. The first three step are fairly straight, but then things
get bumpy. It looks to me like all frequency settings are not created
equal. 

I should read the code, but what is the presidence between throttling
the CPU and TCC? The increase in performance when freq is dropped from
1378 to 1350, 984 to 900, 703 to 675, 506 to 450, and 337 to 300 is
clearly not what I would expect.

I am attaching a spreadsheet (Excel format, but generated by Gnumeric)
showing 4 runs made in single-user mode. If the graph is not showing
properly, I can send it in gnumeric format. I will also attach the
trivial Perl script I run to do generate the raw data.
-- 
R. Kevin Oberman, Network Engineer
Energy Sciences Network (ESnet)
Ernest O. Lawrence Berkeley National Laboratory (Berkeley Lab)
E-mail: oberman at es.net			Phone: +1 510 486-8634

-------------- next part --------------
#!/usr/bin/perl
$min_speed = 250;
($freq) = `sysctl dev.cpu.0.freq_levels`;
@freq = split ' ', $freq;
@freq = grep /\d+\/-?\d+/, @freq;
foreach (@freq) {s/^(\d+).+$/$1/;}
foreach (@freq) {
  if ($_ < $min_speed) {next;}
  `sysctl dev.cpu.0.freq=$_`;
  `dd if=/dev/zero bs=1m count=100 2>/tmp/testresult |  md5`;
  @result = `cat /tmp/testresult`;
  $result = $result[2];
  $result =~ /secs \((\d+) bytes\/sec/;
  printf "%4d %s\n", $_, $1;
}
# Now do it backwards (speed up)
for ($i=$#freq; $i>=0; $i--) {
  if ($freq[$i] < $min_speed) {next;}
  `sysctl dev.cpu.0.freq=$freq[$i]`;
  `dd if=/dev/zero bs=1m count=100 2>/tmp/testresult | md5`;
  @result = `cat /tmp/testresult`;
  $result = $result[2];
  $result =~ /secs \((\d+) bytes\/sec/;
  printf "%4d %s\n", $freq[$i], $1;
}
`sysctl dev.cpu.0.freq=1800`;
unlink "/tmp/testresult";
exit;
-------------- next part --------------
_______________________________________________
freebsd-current at freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "freebsd-current-unsubscribe at freebsd.org"


More information about the freebsd-acpi mailing list