+++ /dev/null
-
-*************************************************************
-AMD
-http://lkml.org/lkml/2005/11/4/173
-http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/26094.PDF
-http://developer.amd.com/article_print.jsp?id=92 (RH)
-
-[7] AMD's 7th generation processors return a CPUID base
- family value of '7'. These include AMD Athlon, AthlonXP,
- AthlonMP, and Duron.
-
-[8] AMD's 8th generation processors return an effective
- CPUID family of '0x0F'. These include AMD Opteron,
- Athlon64, and Turion.
-
-
-before 7th gen : ok
-7th gen:
- P-state (performance state) change
- UP : warn about time inaccuracy
- SMP
- sol : disable powernow
- Use monotonic pseudo-TSC
- STPCLK-Throttling (temperature) : only done on UP, ok
- UP : warn about time inaccuracy
-8th gen :
- P-state change
- UP : inaccuracy
- dual-core : locked-step ; inaccuracy
- SMP : may drift
- sol : disable powernow
- Use monotonic pseudo-TSC
- SMP, dual core : C1-clock ramping (halt) (power state : C-state)
- sol : idle=poll or disable C1-ramping
- Use monotonic pseudo-TSC
- STPCLK-Throttling (temperature) :
- single processor dual-core ok ; inaccuracy
- SMP : NOT ok (rare)
- Use monotonic pseudo-TSC
-
-
-Until TSC becomes invariant, AMD recommends that operating
-system developers avoid TSC as a fast timer source on
-affected systems. (AMD recommends that the operating system
-should favor these time sources in a prioritized manner:
-HPET first, then ACPI PM Timer, then PIT.) The following
-pseudo-code shows one way of determining when to use TSC:
-
- use_AMD_TSC() { // returns TRUE if ok to use TSC
- if (CPUID.base_family < 0xf) {
- // TSC drift doesn't exist on 7th Gen or less
- // However, OS still needs to consider effects
- // of P-state changes on TSC
- return TRUE;
- } else if (CPUID.AdvPowerMgmtInfo.TscInvariant) {
- // Invariant TSC on 8th Gen or newer, use it
- // (assume all cores have invariant TSC)
- return TRUE;
- } else if ((number_processors == 1)&&(number_cores == 1)){
- // OK to use TSC on uni-processor-uni-core
- // However, OS still needs to consider effects
- // of P-state changes on TSC
- return TRUE;
- } else if ( (number_processors == 1) &&
- (CPUID.effective_family == 0x0f) &&
- !C1_ramp_8gen ){
- // Use TSC on 8th Gen uni-proc with C1_ramp off
- // However, OS still needs to consider effects
- // of P-state changes on TSC
- return TRUE;
- } else {
- return FALSE;
- }
- }
- C1_ramp_8gen() {
- // Check if C1-Clock ramping enabled in PMM7.CpuLowPwrEnh
- // On 8th-Generation cores only. Assume BIOS has setup
- // all Northbridges equivalently.
- return (1 & read_pci_byte(bus=0,dev=0x18,fcn=3,offset=0x87));
- }
-
-
-When an operating system can not avoid using TSC in the
-short-term, the operating system will need to either
-re-synchronize the TSC of the halted core when exiting halt
-or disable C1-clock ramping. The pseudo-code for disabling
-C1-clock ramping follows:
-
- if ( !use_AMD_TSC() &&
- (CPUID.effective_family == 0x0f) &&
- C1_ramp_8gen() ){
- for (i=0; i < number_processors; ++i){
- // Do for all NorthBridges in platform
- tmp = read_pci_byte(bus=0,dev=0x18+i,fcn=3,offset=0x87);
- tmp &= 0xFC; // clears pmm7[1:0]
- write_pci_byte(bus=0,dev=0x18+i,fcn=3,offset=0x87,tmp)
- }
- }
-
-
-Future TSC Directions and Solutions
-===================================
-Future AMD processors will provide a TSC that is P-state and
-C-State invariant and unaffected by STPCLK-throttling. This
-will make the TSC immune to drift. Because using the TSC
-for fast timer APIs is a desirable feature that helps
-performance, AMD has defined a CPUID feature bit that
-software can test to determine if the TSC is
-invariant. Issuing a CPUID instruction with an %eax register
-value of 0x8000_0007, on a processor whose base family is
-0xF, returns "Advanced Power Management Information" in the
-%eax, %ebx, %ecx, and %edx registers. Bit 8 of the return
-%edx is the "TscInvariant" feature flag which is set when
-TSC is P-state, C-state, and STPCLK-throttling invariant; it
-is clear otherwise.
-
-The rate of the invariant TSC is implementation-dependent
-and will likely *not* be the frequency of the processor
-core; however, its period should be short enough such that
-it is not possible for two back-to-back rdtsc instructions
-to return the same value. Software which is trying to
-measure actual processor frequency or cycle-performance
-should use Performance Event 76h, CPU Clocks not Halted,
-rather than the TSC to count CPU cycles.
-
-
-
-*************************************************************
-Intel
-
-Pentium M
- family [06H], models [09H, 0DH]
- UP
- warn about time inaccuracy
- SMP
- SOL : disable speedstep
-Pentium 4 processors, Intel Xeon
- family [0FH], models [00H, 01H, or 02H]
- UP
- warn about time inaccuracy
- SMP
- SOL : disable speedstep
-
-Other : ok
-
-http://download.intel.com/design/Xeon/specupdt/30675712.pdf
-http://forum.rightmark.org/post.cgi?id=print:6:269&user=%20Dmitri%20Besedin&color=1
-http://bochs.sourceforge.net/techspec/24161821.pdf cpuid
-
-cpuz
-AFAIK this problem only concerns Prescott CPUs, but I bet future production will
-also use the same rule.
-
-Well, from what Intel states in one of their docs (Intel(R) Pentium(R) M
-Processor on 90 nm Process with 2-MB L2 Cache, Specification Update, Document
-No. 302209-010 (http://www.intel.com/design/mobile/specupdt/302209.htm) ), your
-supposition is true:
-
-
-Article V. For Pentium M processors (family [06H], models [09H, 0DH]); for
-Pentium 4 processors, Intel Xeon processors (family [0FH], models [00H, 01H, or
-02H]); and for P6 family processors: the timestamp counter increments with every
-internal processor clock cycle. The internal processor clock cycle is determined
-by the current core-clock to bus-clock ratio. Intel(R) SpeedStep(R) technology
-transitions may also impact the processor clock.
-
-Article VI. For Pentium 4 processors, Intel Xeon processors (family [0FH],
-models [03H and higher]): the time-stamp counter increments at a constant rate.
-That rate may be set by the maximum core-clock to bus-clock ratio of the
-processor or may be set by the frequency at which the processor is booted. The
-specific processor configuration determines the behavior. Constant TSC behavior
-ensures that the duration of each clock tick is uniform and supports the use of
-the TSC as a wall clock timer even if the processor core changes frequency. This
-is the architectural behavior moving forward.
-
-
-It's a pity they call this sucking TSC behavior an "architectural behavior
-moving forward"
-
-
-
-*************************************************************
-HPET
-
-http://www.intel.com/hardwaredesign/hpetspec_1.pdf
-
-
-
-