Bu "olmamalı" AMD Fusion İŞLEMCİ bir hata, bir kaza mı? | Netgez.com
SORU
10 AĞUSTOS 2011, ÇARŞAMBA


Bu "olmamalı" AMD Fusion İŞLEMCİ bir hata, bir kaza mı?

Şirketim programımız sistemlerine erişim ihlali ile kilitleniyor çünkü müşteriler bir dizi konuşma yaparken başladı.

Kaza bizim uygulama bir parçası olarak SQLite gemi hangi 3.6.23.1, olur. (Özel bir uygulama olduğu gibi aynı VC kitaplıkları kullanmak için inşa, gemi, ama stok SQLite kod.)

Kaza pcache1Fetch ne olur yürütür WinDbg çağrı yığını tarafından gösterildiği gibi call 00000000,:

0b50e5c4 719f9fad 06fe35f0 00000000 000079ad 0x0
0b50e5d8 719f9216 058d1628 000079ad 00000001 SQLite_Interop!pcache1Fetch 0x2d [sqlite3.c @ 31530]
0b50e5f4 719fd581 000079ad 00000001 0b50e63c SQLite_Interop!sqlite3PcacheFetch 0x76 [sqlite3.c @ 30651]
0b50e61c 719fff0c 000079ad 0b50e63c 00000000 SQLite_Interop!sqlite3PagerAcquire 0x51 [sqlite3.c @ 36026]
0b50e644 71a029ba 0b50e65c 00000001 00000e00 SQLite_Interop!getAndInitPage 0x1c [sqlite3.c @ 40158]
0b50e65c 71a030f8 000079ad 0aecd680 071ce030 SQLite_Interop!moveToChild 0x2a [sqlite3.c @ 42555]
0b50e690 71a0c637 0aecd6f0 00000000 0001edbe SQLite_Interop!sqlite3BtreeMovetoUnpacked 0x378 [sqlite3.c @ 43016]
0b50e6b8 71a109ed 06fd53e0 00000000 071ce030 SQLite_Interop!sqlite3VdbeCursorMoveto 0x27 [sqlite3.c @ 50624]
0b50e824 71a0db76 071ce030 0b50e880 071ce030 SQLite_Interop!sqlite3VdbeExec 0x14fd [sqlite3.c @ 55409]
0b50e850 71a0dcb5 0b50e880 21f9b4c0 00402540 SQLite_Interop!sqlite3Step 0x116 [sqlite3.c @ 51744]
0b50e870 00629a30 071ce030 76897ff4 70f24970 SQLite_Interop!sqlite3_step 0x75 [sqlite3.c @ 51806]

C Kanunu'nun ilgili satırı:

if( createFlag==1 ) sqlite3BeginBenignMalloc();

Derleyici olarak tanımlanan sqlite3BeginBenignMalloc, inlines:

typedef struct BenignMallocHooks BenignMallocHooks;
static SQLITE_WSD struct BenignMallocHooks {
  void (*xBenignBegin)(void);
  void (*xBenignEnd)(void);
} sqlite3Hooks = { 0, 0 };

# define wsdHooksInit
# define wsdHooks sqlite3Hooks

SQLITE_PRIVATE void sqlite3BeginBenignMalloc(void){
  wsdHooksInit;
  if( wsdHooks.xBenignBegin ){
    wsdHooks.xBenignBegin();
  }
}

Ve bunun için Meclisi:

719f9f99    mov     esi,dword ptr [esp 1Ch]
719f9f9d    cmp     esi,1
719f9fa0    jne     SQLite_Interop!pcache1Fetch 0x2d (719f9fad)
719f9fa2    mov     eax,dword ptr [SQLite_Interop!sqlite3Hooks (71a7813c)]
719f9fa7    test    eax,eax
719f9fa9    je      SQLite_Interop!pcache1Fetch 0x2d (719f9fad)
719f9fab    call    eax ; *** CRASH HERE ***
719f9fad    mov     ebx,dword ptr [esp 14h]

Kaydeder

eax=00000000 ebx=00000001 ecx=000013f0 edx=fffffffe esi=00000001 edi=00000000
eip=00000000 esp=0b50e5c8 ebp=000079ad iopl=0         nv up ei pl nz na po nc
cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00010202

Eğer eax 0) ise, sıfır bayrak test eax, eax, ama sıfır değil tarafından ayarlanmalıdır. Sıfır bayrak je set değil çünkü atlamak yok, ve sonra app call eax (00000000) çalıştırmak için çalışırken çöküyor.

Güncelleme: eax sqlite3Hooks.xBenignBegin kod oluşturmak bizim ayarlanmamıştır 0 burada olmalı. Kodu #define sqlite3BeginBenignMalloc() çevirmezdi SQLITE_OMIT_BUILTIN_TEST tanımlanmış, SQLite ile yeniden ve bu kod yolu tamamen ihmal edebilirim. Ama "gerçek" düzeltme; stop başka bir kod yolu ne olurdu? gibi gelmiyor sorunu çözmek olabilir

Şimdiye kadar ortak nokta tüm müşteri çalışan "Windows 7 Home Premium 64-bit (6.1, Build 7601) Service Pack 1" ve aşağıdakilerden biri CPU (göre Sorunlar):

  • AMD A6-3400M APU with Radeon(tm) HD Graphics (4 CPU), 1.4 ~GHz
  • AMD A8-3500M APU with Radeon(tm) HD Graphics (4 CPU), 1.5 ~GHz
  • AMD A8-3850 APU with Radeon(tm) HD Graphics (4 CPU), 2.9 ~GHz

Vikipedi'ye göre AMD Fusion article, Bu "" model Fusion çipleri K10 çekirdekli AMD ve haziran ayında yayımlanan ilk rapor almaya başladığı zaman 2011,. Llano tüm

En yaygın müşteri sistem ama biz de dv6 ve dv7 HP Pavilion ve Ağ Geçidi sistemleri kilitlenme raporları var L775D, Toshiba Uydu.

Bu kaza CPU hatası (Errata for AMD Family 12h Processors) neden olabilir, ya da gözden kaçırdığım başka bir olası açıklaması var mı? (Raymond göre, bu could be overclocking ama sadece bu özel CPU modeli çok etkiledi, bu garip.)

Dürüst olmak gerekirse, müşteriler diğer uygulamalarda bluescreens veya çöküyor almıyorum çünkü gerçekten İŞLEMCİ ya da işletim sistemi bir hata değil bu pek mümkün değil. Başka, daha büyük olasılıkla, bir açıklaması olmalı ama ne?

15 AÄŸustos Güncelleme:A6-3400M AMD iÅŸlemcili Toshiba L745D bir defter edindim ve program çalışırken kaza sürekli olarak yeniden üretebilir. Hep aynı talimat üzerine çökmesi; .time herhangi bir kaza öncesi kullanım süresi 7 için 1m30s raporları. Orijinal sonrası söz etmeyi ihmal ettigim (bu konuyla ilgili olabilir) aslında uygulama çok iÅŸ parçacıklı ve yüksek CPU vardır ve O kullanımı. Uygulama çöker kadar € varsayılan mesaj CPU kullanımı (bazı SQLite kod uyumu için G/Ç olarak engelleme var) tarafından dört işçi iÅŸ parçacığı olarak çoÄŸaltılır. Bu uygulama sadece iki iÅŸ parçacığı kullanmak için deÄŸiÅŸtirdim, ve hala olmaya uzun sürdü raÄŸmen) düştü. Åžimdi sadece tek bir iÅŸ parçacığı ile bir test yapıyorum ve henüz kaza olmadı.

Tamamen CPU yükü bir sorun görünmüyor; sistem hataları olmadan Prime95 koşabilirim ve ^ İŞLEMCİ sıcaklığı artıracağını unutmayın . Çalışırken başvurum zar zor 50°C'nin üstünde bir sıcaklık alır iken 70°C, C.

Güncelleme 16 Ağustos:Talimatları biraz sorun yapar Perturbing "git". Eaxmple için, bellek yükü (mov eax,dword ptr [SQLite_Interop!sqlite3Hooks (71a7813c)]) xor eax, eax ile değiştirilmesi çökmesi engeller. Değiştirme orijinal C kodu için bir eklenti ekstra kontrol if( createFlag==1 ) ifade değişiklikleri göreli uzaklıklar çeşitli atlar derlenmiş kod olarak konumun test eax, eax call eax tablolar) ve de gözüküyor sorunu önlemek için.

Şimdiye kadar bulduğum en tuhaf sonucu nop iki talimatları (kontrol. 719f9fa0 27 *değişen buher zamantest eax, eax talimat, createFlag/esi değeri ne olursa olsun düşer) program çökmesini olmadan çalışmasını sağlar.

CEVAP
4 EKİM 2011, Salı


Bu hata ile ilgili Microsoft Build konferansında AMD Mühendisi ile konuştum ve ona benim yeniden oluşturma gösterdi. Bu sabah bana e-mail attı:

İnceledik ve bu bilinen bir yazı hatası nedeniyle bulundu Llano APU ailesi. Bir BIOS güncelleştirmesi bağlı olarak) tamir edilebilir mümkünse OEM – lütfen müşterilerinize tavsiye ederim (hatta bir çözüm yolu var) ama.

Merak ediyorsanız, basılı Aile 12 saat içinde 665. Revizyon Rehber (bkz: sayfa 45): http://support.amd.com/TechDocs/44739_12h_Rev_Gd.pdf#page=45

İşte bu hata açıklaması:

665 Tamsayı Talimat Öngörülemeyen Davranışlara Neden Olabilir Bölün

Açıklama

Altında bir çok özel ve ayrıntılı set iç zamanlama koşulları, dört çekirdekli işlemci olabilir iptal spekülatif DİV veya İDİV tamsayı bölme talimat (nedeniyle spekülatif yürütme olmak yönlendirildi, örneğin nedeniyle bir mispredicted şube) ama askıda kalabilir ya da zamanından önce tamamlamak ilk öğretim olmayan spekülatif yolu.

Sistem üzerindeki potansiyel Etkisi

Öngörülemeyen sistem davranış, genellikle bir sistem sonuçta asmak.

Geçici Çözüm Önerdi

BIOS MSRC001_1029[31] ayarlamanız gerekir.

Bu geçici çözüm, sayı/İDİV talimat gecikme belirtilen değiştirirYazılım Optimizasyonu AMD Ailesi 10 ve 12 saat İşlemciler için Kılavuz,# 40546 sipariş. Bu geçici çözüm uygulandığında, AMD Ailesi 12 saat İşlemci DİV/İDİV gecikme AMD Ailesi 10 H İşlemci DİV/İDİV gecikme için benzer.

Düzeltme Planlandı

Hayır

Bunu PaylaÅŸ:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VÄ°DEO

Rastgele Yazarlar

  • EEVblog

    EEVblog

    4 NÄ°SAN 2009
  • Justin Davis

    Justin Davis

    14 Ocak 2008
  • Ryan Billy

    Ryan Billy

    30 EKÄ°M 2006