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
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
"sertifika süresi dolmuş hata Ayı...
Ä°le " uÄŸraÅŸan;java.lang.OutOfMemor...
"Dalvik format Dönüştürme harici ...
Neden C ön işlemci word "linux&qu...
Hata mesajı "ihracat kısıtlaması ...