Skip to contentSkip to conversation

amd76x_pm on 2.6.0-test9 more cleanup and clock skew test

PATCH In review Tony Lindgren 2 participants 3 messages Nov 10, 2003 ACPI

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 amd76x_pm on 2.6.0-test9 more cleanup and clock skew test

Hi all,

I've done some more cleanup on the amd76x_pm module. Looks like Pasi and I both did pretty much the same changes last time independently, but Pasi chopped off even more unnecessary code. So I've continued the cleanup based on Pasi's code.

I've done some cleanup to remove my old comments and to get rid of all the ifdefs. This makes the code more readable and makes it easier to develop. I've also changed the functions around a bit to group them better, and changed variable naming to be more standard. I've only edited the amd76x_pm.c file, and did not do any functional changes. Just cleanup.

On the clock skew problem, it's still there, and to figure out how bad the problem is, I've done a little shell script based on the earlier thread on adjtimex on this mailing list. You can get the skewtest.sh from:

http://www.muru.com/linux/amd-smp-idle/skewtest.sh

On my S2460 system with a pair of Athlon 1400's I get the following results:

suggested tick

Without amd76x_pm module:   10002
With amd76x_pm module:      between 9952 - 9977

I guess some people see much worse skew on some systems? Can you please run the skewtest.sh and post some results, thanks.

Following is the current patch, you can also get it from:

http://www.muru.com/linux/amd-smp-idle/

I may not have access to my Athlon box for next few weeks, but hopefully Pasi keeps maintaining the module as needed.

Tony

diff -Nru linux-2.6.0-test9/drivers/acpi/Kconfig kt9/drivers/acpi/Kconfig

drivers/acpi/Kconfig +17 -1
diff -Nru linux-2.6.0-test9/drivers/acpi/Kconfig kt9/drivers/acpi/Kconfig
@@ -269,5 +269,21 @@
 	  particular, many Toshiba laptops require this for correct operation
 	  of the AC module.
 
-endmenu
+config AMD76X_PM
+        tristate "AMD76x Native Power Management support"
+	default n
+        depends on X86 && PCI
+        ---help---
+          This driver enables Power Management on AMD760MP & AMD760MPX chipsets.
+	  This is about same as ACPI C2, except that ACPI folks don't do SMP ATM.
+	  In /sys/devices/pci0/0000:00:00.0/ is a statistics C2_cnt
+	  (RO) and lazy_idle (RW) file.
+
+	  To compile this driver as a module ( = code which can be inserted in
+	  and removed from the running kernel whenever you want), say M here
+	  and read <file:Documentation/modules.txt>. The module will be called
+	  amd76x_pm.
 
+	  If unsure, say N.
+
+endmenu

diff -Nru linux-2.6.0-test9/drivers/acpi/Makefile kt9/drivers/acpi/Makefile

drivers/acpi/Makefile +5 -0
diff -Nru linux-2.6.0-test9/drivers/acpi/Makefile kt9/drivers/acpi/Makefile
@@ -48,3 +48,8 @@
 obj-$(CONFIG_ACPI_ASUS)		+= asus_acpi.o
 obj-$(CONFIG_ACPI_TOSHIBA)	+= toshiba_acpi.o
 obj-$(CONFIG_ACPI_BUS)		+= scan.o 
+
+#
+# not really ACPI thing, until they handle SMP.
+#
+obj-$(CONFIG_AMD76X_PM)		+= amd76x_pm.o
include/linux/amd76x_pm.h new file +59 -0

59 lines not on this page · raw message

drivers/acpi/amd76x_pm.c new file +672 -0

672 lines not on this page · raw message

/*
* Begin 765/766
*/
/* C2/C3/POS options in C3A50, page 63 in AMD-766 doc */
#define ZZ_CACHE_EN 1
#define DCSTOP_EN (1 << 1)
#define STPCLK_EN (1 << 2)
#define CPUSTP_EN (1 << 3)
#define PCISTP_EN (1 << 4)
#define CPUSLP_EN (1 << 5)
#define SUSPND_EN (1 << 6)
#define CPURST_EN (1 << 7)

#define C2_REGS 0
#define C3_REGS 8
#define POS_REGS 16
/*
* End 765/766
*/

/*
* Begin 768
*/
/* C2/C3 options in DevB:3x4F, page 100 in AMD-768 doc */
#define C2EN 1
#define C3EN (1 << 1)
#define ZZ_C3EN (1 << 2)
#define CSLP_C3EN (1 << 3)
#define CSTP_C3EN (1 << 4)

/* POS options in DevB:3x50, page 101 in AMD-768 doc */
#define POSEN 1
#define CSTP (1 << 2)
#define PSTP (1 << 3)
#define ASTP (1 << 4)
#define DCSTP (1 << 5)
#define CSLP (1 << 6)
#define SUSP (1 << 8)
#define MSRSM (1 << 14)
#define PITRSM (1 << 15)

/* NTH options DevB:3x40, pg 93 of 768 doc */
#define NTPER(x) (x << 3)
#define THMINEN(x) (x << 4)

/*
* End 768
*/

/* NTH activate. PM10, pg 110 of 768 doc, pg 70 of 766 doc */ #define NTH_RATIO(x) (x << 1)
#define NTH_EN (1 << 4)

/* Sleep state. PM04, pg 109 of 768 doc, pg 69 of 766 doc */ #define SLP_EN (1 << 13)
#define SLP_TYP(x) (x << 10)

#define LAZY_IDLE_DELAY 800 /* 0: Best savings, 3000: More responsive */

#1 lore raw

Quoting Tony Lindgren from Nov 9

Quoted 3 lines

On the clock skew problem, it's still there, and to figure out how bad the problem is, I've done a little shell script based on the earlier thread on adjtimex on this mailing list.

Here are my results from your script.

Tested two kernels, vanilla -test9 and test-9-love2, the latter is a
patchset based off -mm2, including the nick scheduler and
other stuff like reiser4 and bootsplash. More information about this
here: http://bssteph.irtonline.org/linux/patches/2.6/2.6.0-test9/2.6.0-test9-love2/2.6.0-test9-love2_notes.txt
(amd76x_pm-031027 patch backed out, new one put in )

I did three runs each, first run idle, two runs under load, i.e. two burnK7 processes and a make -j5 kernel compile just to make sure. loadavg goes up to ~6.5 during those.
ntpd was not running during the tests.

System is an A7M266-d w/ two AthlonXPs 1800+ (model 6 stepping 2), L5-modded(!) for the MP setup. (I know this is considered tainting, if you can tell me the timing issues are related to the modding I will shut up immediately, but so far nobody seems to have pinpointed it to this.)
The two CPUs show different bogomips (3014, 3063).

-------------------------------------------------
test9-love2:
-------------------------------------------------
idle:
-------------------------------------------------
Running test for kernel version 2.6.0-test9-love2
This test will take about 140 seconds to run

ACPI interrupts before the first test:
9: 0 0 IO-APIC-level acpi

Running test without amd76x_pm module

                                           --- current ---    -- suggested --
cmos time     system-cmos       2nd diff    tick      freq     tick      freq
1068439150       -0.014522      -0.014522   10000         0
1068439160       -0.015270      -0.000748   10000         0
1068439170       -0.016013      -0.000743   10000         0    10000   4869626
1068439180       -0.016753      -0.000740   10000         0    10000   4850095
1068439190       -0.017498      -0.000744   10000         0    10000   4876657
1068439200       -0.008564       0.008934   10000   4876657     9992  -1243667
1068439210       -0.008547       0.000017   10000   4876657    10000   4765814
1068439220       -0.008529       0.000018   10000   4876657    10000   4758783

ACPI interrupts after the first test:
9: 0 0 IO-APIC-level acpi

Running test with amd76x_pm module

                                           --- current ---    -- suggested --
cmos time     system-cmos       2nd diff    tick      freq     tick      freq
1068439230        0.009470       0.009470   10000         0
1068439240        0.008725      -0.000745   10000         0
1068439250        0.008987       0.000262   10000         0    10000  -1716312
1068439260        0.009249       0.000262   10000         0    10000  -1716311
1068439270        0.008507      -0.000742   10000         0    10000   4863376
1068439280        0.017441       0.008934   10000   4863375     9992  -1256949
1068439290        0.017461       0.000020   10000   4863375    10000   4732220
1068439300        0.017482       0.000021   10000   4863375    10000   4726751

ACPI interrupts after the second test:
9: 0 0 IO-APIC-level acpi

-------------------------------------------------
load - run 1
-------------------------------------------------

Running test for kernel version 2.6.0-test9-love2
This test will take about 140 seconds to run

ACPI interrupts before the first test:
9: 0 0 IO-APIC-level acpi

Running test without amd76x_pm module

                                           --- current ---    -- suggested --
cmos time     system-cmos       2nd diff    tick      freq     tick      freq
1068439375        0.035483       0.035483   10000         0
1068439385        0.034744      -0.000739   10000         0
1068439395        0.034002      -0.000742   10000         0    10000   4863376
1068439405        0.033272      -0.000730   10000         0    10000   4784470
1068439440        0.030695      -0.002577   10000         0    10003  -2773359
1068439450        0.041556       0.010861   10003  -2773359     9992  -1861789
1068439464        0.044119       0.002563   10003  -2773359    10000     92261
1068439475        0.046135       0.002016   10003  -2773359    10001  -2875039

ACPI interrupts after the first test:
9: 0 0 IO-APIC-level acpi

Running test with amd76x_pm module

                                           --- current ---    -- suggested --
cmos time     system-cmos       2nd diff    tick      freq     tick      freq
1068439488        0.063667       0.063667   10000         0
1068439498        0.062917      -0.000750   10000         0
1068439509        0.062106      -0.000810   10000         0    10000   5310651
1068439519        0.061371      -0.000735   10000         0    10000   4818064
1068439533        0.060339      -0.001032   10000         0    10001    211376
1068439548        0.069771       0.009432   10001    211376     9992  -2622097
1068439560        0.070127       0.000356   10001    211376    10001  -2123667
1068439571        0.070456       0.000329   10001    211376    10001  -1942035

ACPI interrupts after the second test:
9: 0 0 IO-APIC-level acpi
-------------------------------------------------
load - run 2
-------------------------------------------------

Running test for kernel version 2.6.0-test9-love2
This test will take about 140 seconds to run

ACPI interrupts before the first test:
9: 0 0 IO-APIC-level acpi

Running test without amd76x_pm module

                                           --- current ---    -- suggested --
cmos time     system-cmos       2nd diff    tick      freq     tick      freq
1068439753        0.103258       0.103258   10000         0
1068439763        0.102513      -0.000745   10000         0
1068439777        0.101485      -0.001028   10000         0    10001    185595
1068439787        0.100754      -0.000731   10000         0    10000   4790720
1068439799        0.099872      -0.000882   10000         0    10000   5779020
1068439809        0.108959       0.009087   10000   5779019     9992  -1344430
1068439819        0.109129       0.000170   10000   5779019    10000   4665051
1068439829        0.109299       0.000170   10000   5779019    10000   4665833

ACPI interrupts after the first test:
9: 0 0 IO-APIC-level acpi

Running test with amd76x_pm module

                                           --- current ---    -- suggested --
cmos time     system-cmos       2nd diff    tick      freq     tick      freq
1068439843        0.127032       0.127032   10000         0
1068439854        0.126197      -0.000835   10000         0
1068439867        0.218674       0.092477   10000         0     9908  -3126099
1068439882        0.124147      -0.094527   10000         0    10095  -3102405
1068439898        0.122977      -0.001170   10000         0    10001   1113739
1068439909        0.132439       0.009462   10001   1113738     9992  -1911961
1068439924        0.133104       0.000665   10001   1113738    10001  -3246667
1068439935        0.133593       0.000489   10001   1113738    10001  -2088111

ACPI interrupts after the second test:
9: 0 0 IO-APIC-level acpi
-------------------------------------------------
vanilla
-------------------------------------------------
idle
-------------------------------------------------
Running test for kernel version 2.6.0-test9
This test will take about 140 seconds to run

ACPI interrupts before the first test:
9: 0 0 IO-APIC-level acpi

Running test without amd76x_pm module

                                           --- current ---    -- suggested --
cmos time     system-cmos       2nd diff    tick      freq     tick      freq
1068441482       -0.004717      -0.004717   10000         0
1068441492       -0.005453      -0.000736   10000         0
1068441502       -0.006187      -0.000734   10000         0    10000   4810251
1068441512       -0.006916      -0.000729   10000         0    10000   4778220
1068441522       -0.007656      -0.000740   10000         0    10000   4850095
1068441532       -0.007642       0.000014   10000   4850094    10000   4758782
1068441542       -0.007617       0.000025   10000   4850094    10000   4686907
1068441552       -0.007595       0.000022   10000   4850094    10000   4706439

ACPI interrupts after the first test:
9: 0 0 IO-APIC-level acpi

Running test with amd76x_pm module

                                           --- current ---    -- suggested --
cmos time     system-cmos       2nd diff    tick      freq     tick      freq
1068441562       -0.007592      -0.007592   10000         0
1068441572       -0.007321       0.000271   10000         0
1068441582       -0.008068      -0.000747   10000         0    10000   4895407
1068441592       -0.008798      -0.000730   10000         0    10000   4785251
1068441602       -0.009534      -0.000736   10000         0    10000   4823532
1068441612       -0.009595      -0.000061   10000   4823532    10000   5223627
1068441622       -0.008579       0.001016   10000   4823532    10000  -1834186
1068441632       -0.007561       0.001018   10000   4823532    10000  -1847467

ACPI interrupts after the second test:
9: 0 0 IO-APIC-level acpi
-------------------------------------------------
load - run 1
-------------------------------------------------
Running test for kernel version 2.6.0-test9
This test will take about 140 seconds to run

ACPI interrupts before the first test:
9: 0 0 IO-APIC-level acpi

Running test without amd76x_pm module

                                           --- current ---    -- suggested --
cmos time     system-cmos       2nd diff    tick      freq     tick      freq
1068441806       -0.023066      -0.023066   10000         0
1068441817       -0.023886      -0.000820   10000         0
1068441827       -0.024622      -0.000736   10000         0    10000   4824313
1068441838       -0.025433      -0.000810   10000         0    10000   5310651
1068441856       -0.026762      -0.001330   10000         0    10001   2159852
1068441868       -0.026087       0.000675   10001   2159851    10001  -2265817
1068441881       -0.025307       0.000780   10001   2159851    10001  -2952136
1068441892       -0.024650       0.000657   10001   2159851    10001  -2142779

ACPI interrupts after the first test:
9: 0 0 IO-APIC-level acpi

Running test with amd76x_pm module

                                           --- current ---    -- suggested --
cmos time     system-cmos       2nd diff    tick      freq     tick      freq
1068441902       -0.024727      -0.024727   10000         0
1068441913       -0.025560      -0.000832   10000         0
1068441927       -0.026594      -0.001034   10000         0    10001    224658
1068441940       -0.027553      -0.000959   10000         0    10000   6284889
1068441950       -0.028289      -0.000736   10000         0    10000   4824313
1068441960       -0.028363      -0.000074   10000   4824313    10000   5309564
1068441971       -0.028348       0.000016   10000   4824313    10000   4722464
1068441982       -0.028328       0.000020   10000   4824313    10000   4695902

ACPI interrupts after the second test:
9: 0 0 IO-APIC-level acpi
-------------------------------------------------
load - run 2
-------------------------------------------------
Running test for kernel version 2.6.0-test9
This test will take about 140 seconds to run

ACPI interrupts before the first test:
9: 0 0 IO-APIC-level acpi

Running test without amd76x_pm module

                                           --- current ---    -- suggested --
cmos time     system-cmos       2nd diff    tick      freq     tick      freq
1068442024       -0.028550      -0.028550   10000         0
1068442034       -0.029312      -0.000762   10000         0
1068442044       -0.030048      -0.000736   10000         0    10000   4823532
1068442060       -0.031229      -0.001181   10000         0    10001   1185614
1068442075       -0.032338      -0.001109   10000         0    10001    711776
1068442085       -0.031986       0.000352   10001    711776    10001  -1594379
1068442095       -0.031610       0.000376   10001    711776    10001  -1751411
1068442112       -0.030975       0.000635   10001    711776    10001  -3448610

ACPI interrupts after the first test:
9: 0 0 IO-APIC-level acpi

Running test with amd76x_pm module

                                           --- current ---    -- suggested --
cmos time     system-cmos       2nd diff    tick      freq     tick      freq
1068442127       -0.031614      -0.031614   10000         0
1068442141       -0.032668      -0.001054   10000         0
1068442159       -0.033992      -0.001324   10000         0    10001   2126258
1068442169       -0.034728      -0.000735   10000         0    10000   4818063
1068442181       -0.035613      -0.000886   10000         0    10000   5804020
1068442191       -0.035545       0.000068   10000   5804019    10000   5358801
1068442203       -0.035345       0.000200   10000   5804019    10000   4491633
1068442217       -0.035103       0.000242   10000   5804019    10000   4219777

ACPI interrupts after the second test:
9: 0 0 IO-APIC-level acpi
-------------------------------------------------

Hope this helps a bit, and thanks for cc-ing me
Peter G.

Signature · 3 lines
I object to intellect without discipline;  I object to power without
constructive purpose.
                -- Spock, "The Squire of Gothos", stardate 2124.5
#2 lore raw
Quoted 7 lines · Peter Gantner

Quoting Tony Lindgren from Nov 9

Quoted 3 lines

On the clock skew problem, it's still there, and to figure out how bad the problem is, I've done a little shell script based on the earlier thread on adjtimex on this mailing list.

Here are my results from your script.

Thanks!

Quoted 4 lines

I did three runs each, first run idle, two runs under load, i.e. two burnK7 processes and a make -j5 kernel compile just to make sure. loadavg goes up to ~6.5 during those.
ntpd was not running during the tests.

Great, I was only expecting results from idle mode, but seeing what happens under load is interesting to see too.

Quoted 5 lines

System is an A7M266-d w/ two AthlonXPs 1800+ (model 6 stepping 2), L5-modded(!) for the MP setup. (I know this is considered tainting, if you can tell me the timing issues are related to the modding I will shut up immediately, but so far nobody seems to have pinpointed it to this.)

That should not make a difference. I think I'm getting pretty much similar results with missed ticks. I'll try to take a look at it in early December when I have access to my Athlon box again.

Tony