On Fri, 2005-06-03 at 16:57, Matthew Dillon wrote:
>     I've been tracking down a crash one of our users gets occassionally.
>     He has a quad Intel(R) XEON(TM) CPU 2.00GHz (1996.61-MHz 686-class CPU)
>     system.
> 
>     After getting a few of these crashes he pulled three of the four cpus
>     out.   But with just one physical cpu, with HTT turned on (so two
>     logical cpus), he is still getting these crashes.
> 
>     This is the sequence that causes the bad data:
> 
>     cpu #0    write A
>               write B
> 
>     (HT)cpu #1        read B
>               if (B) 
>                   read A      <----  gets OLD data in A, not new data
> 
>     Now I was depending on the presumed write ordering, so if a foreign
>     cpu sees that B is updated it can assume that A has also been updated.
> 
>     But I'm beginning to think that it isn't working as advertised.  I've
>     read the manuals over and over again and they seem to only guarentee
>     write ordering between physical cpus, not between logical HT cpus, and
>     even then it appears that a cpu can do a speculative read and
>     thus get an old value for A even after getting a new value for B.
> 
>     I looked at the various SFENCE/LFENCE/MFENCE instructions and they
>     do not seem to guarentee ordering for speculative accesses at all.
>     They all say that they do not protect against speculative reads.
>     Bus-locked instructions don't seem to avoid speculative reads either.
> 
>     I'm even more confused because this bug is occuring between two logical
>     cpus on the same physical die.  Is write ordering not guarenteed with
>     respect to the other logical cpu?  Can one logical cpu prefetch data
>     early then then becomes obsolete by the time the instruction is actually
>     run?  Or perhaps its a pipeline bug... I just don't know.  But it's
>     damn annoying.
> 
>     The only solution I see is to use an actual serializing instruction
>     like cpuid.  I really do not want to have to use cpuid :-(.
> 
>     So, has anyone seen anything similar?

This is normal behaviour.
Take a look at IA-32 Intel Developers ... Vol 3,  
Section: 7.2.2 for details + solutions.

Stephan


_______________________________________________
freebsd-hackers@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to