Hangi donanım cihazı 1,4GB'lık 4GB RAM'imi yiyordu ve şimdi aniden hiçbir donanım değişikliği 2.2GB'ı yedikten sonra mı?


17

Bu aşağı yukarı

4GB RAM'im 1.4GB'ı hangi donanım aygıtı yiyor?

Bu çözümü bir ya da daha az sayıda gizemli nedenden ötürü, bir BIOS yükseltmesinden sonra grafik bağdaştırıcım aniden (dinamik olarak ayırmak yerine) 1.4GB bellek ayırdı (şimdi dizüstü bilgisayarımın garantisinin süresi dolduktan 2 hafta sonra), yaptıktan sonra birkaç Linux canlı CD denemek dışında özel bir şey yok (bazıları bir USB anahtarından geri döngü önyükleme yapıyor) ve birkaç kez önyükleme seçeneklerini UEFI'den BIOS CSM'ye ve geri değiştirmek, aniden 800MB daha fazla saklıdır.

Ve sadece açıklığa kavuşturmak için, bu bir Windows sorunu değil - hem memtest hem de Linux da bu miktarda belleği görüyor. Sadece Lenovo Diagnostics tam 4GB belleği görüyor (ve test etti ve hata bulamadı)

Grafik sürücüsü tanılama aracından ve kaynak monitöründen ekran görüntüleri:

Yeni durum

(Referans olarak, 1435MB'den önce donanım için ayrılmıştı ve maksimum grafik belleği 1138 MB idi).

Belli ki sorunu çok daha acil hale getiriyor, çünkü hafızamın yarısı "donanım tarafından saklı".

Çıktısı meminfo -rçok fazla değişmedi (4. bellek aralığı neredeyse 800MB küçüldü):

MemInfo v2.10 - Show PFN database information
Copyright (C) 2007-2009 Alex Ionescu
www.alex-ionescu.com

Physical Memory Range: 0000000000001000 to 000000000009D000 (156 pages, 624 KB)
Physical Memory Range: 0000000000100000 to 0000000020000000 (130816 pages, 523264 KB)
Physical Memory Range: 0000000020200000 to 0000000040004000 (130564 pages, 522256 KB)
Physical Memory Range: 0000000040005000 to 0000000057D32000 (97581 pages, 390324 KB)
Physical Memory Range: 0000000100000000 to 000000011F600000 (128512 pages, 514048 KB)
MmHighestPhysicalPage: 1177088

Samsung ve Lenovo ile önceki hikayelerden sonra artık UEFI'ye güvenmediğim için EFI kabuğuna girdim ve birkaç bilgi daha döktüm. Bunun ne hakkında olduğunu gerçekten bilmiyorum, ama belki bu birine yardımcı olur:

memmap

Type       Start            End               # Pages          Attributes
BS_code    0000000000000000-0000000000000FFF  0000000000000001 000000000000000F
available  0000000000001000-000000000005AFFF  000000000000005A 000000000000000F
BS_data    000000000005B000-000000000005BFFF  0000000000000001 000000000000000F
BS_code    000000000005C000-0000000000086FFF  000000000000002B 000000000000000F
BS_data    0000000000087000-0000000000087FFF  0000000000000001 000000000000000F
BS_code    0000000000088000-000000000008FFFF  0000000000000008 000000000000000F
reserved   0000000000090000-000000000009FFFF  0000000000000010 000000000000000F
BS_code    0000000000100000-000000000010FFFF  0000000000000010 000000000000000F
available  0000000000110000-000000001FFFFFFF  000000000001FEF0 000000000000000F
reserved   0000000020000000-00000000201FFFFF  0000000000000200 000000000000000F
available  0000000020200000-0000000040003FFF  000000000001FE04 000000000000000F
reserved   0000000040004000-0000000040004FFF  0000000000000001 000000000000000F
available  0000000040005000-0000000057D31FFF  0000000000017D2D 000000000000000F
BS_data    0000000057D32000-0000000057D51FFF  0000000000000020 000000000000000F
available  0000000057D52000-000000005A34AFFF  00000000000025F9 000000000000000F
BS_data    000000005A34B000-000000005A360FFF  0000000000000016 000000000000000F
reserved   000000005A361000-000000005A562FFF  0000000000000202 000000000000000F
BS_data    000000005A563000-000000005AD21FFF  00000000000007BF 000000000000000F
available  000000005AD22000-0000000096B02FFF  000000000003BDE1 000000000000000F
LoaderData 0000000096B03000-0000000096B04FFF  0000000000000002 000000000000000F
available  0000000096B05000-0000000096B06FFF  0000000000000002 000000000000000F
LoaderData 0000000096B07000-0000000096B14FFF  000000000000000E 000000000000000F
LoaderCode 0000000096B15000-0000000096BD1FFF  00000000000000BD 000000000000000F
LoaderData 0000000096BD2000-00000000C9468FFF  0000000000032897 000000000000000F
available  00000000C9469000-00000000C9474FFF  000000000000000C 000000000000000F
LoaderCode 00000000C9475000-00000000C9668FFF  00000000000001F4 000000000000000F
available  00000000C9669000-00000000CA828FFF  00000000000011C0 000000000000000F
BS_data    00000000CA829000-00000000CAE22FFF  00000000000005FA 000000000000000F
available  00000000CAE23000-00000000CAE31FFF  000000000000000F 000000000000000F
BS_data    00000000CAE32000-00000000CD668FFF  0000000000002837 000000000000000F
available  00000000CD669000-00000000CDCD5FFF  000000000000066D 000000000000000F
BS_code    00000000CDCD6000-00000000D6268FFF  0000000000008593 000000000000000F
RT_code    00000000D6269000-00000000D6344FFF  00000000000000DC 800000000000000F
RT_code    00000000D6345000-00000000D6468FFF  0000000000000124 800000000000000F
RT_data    00000000D6469000-00000000D6FEDFFF  0000000000000B85 800000000000000F
RT_data    00000000D6FEE000-00000000D9E9EFFF  0000000000002EB1 800000000000000F
reserved   00000000D9E9F000-00000000DAC13FFF  0000000000000D75 000000000000000F
reserved   00000000DAC14000-00000000DAE9EFFF  000000000000028B 000000000000000F
ACPI_NVS   00000000DAE9F000-00000000DAF04FFF  0000000000000066 000000000000000F
ACPI_NVS   00000000DAF05000-00000000DAF9EFFF  000000000000009A 000000000000000F
ACPI_recl  00000000DAF9F000-00000000DAFD9FFF  000000000000003B 000000000000000F
ACPI_recl  00000000DAFDA000-00000000DAFFEFFF  0000000000000025 000000000000000F
BS_data    00000000DAFFF000-00000000DAFFFFFF  0000000000000001 000000000000000F
available  0000000100000000-000000011F5FFFFF  000000000001F600 000000000000000F
reserved   00000000000A0000-00000000000BFFFF  0000000000000020 0000000000000000
reserved   00000000DB000000-00000000DF9FFFFF  0000000000004A00 0000000000000000
MemMapIO   00000000F80F8000-00000000F80F8FFF  0000000000000001 8000000000000001
MemMapIO   00000000FED1C000-00000000FED1FFFF  0000000000000004 8000000000000001

  reserved  :  24,115 Pages (98,775,040)
  LoaderCode:     689 Pages (2,822,144)
  LoaderData: 207,015 Pages (847,933,440)
  BS_code   :  34,263 Pages (140,341,248)
  BS_data   :  13,865 Pages (56,791,040)
  RT_code   :     512 Pages (2,097,152)
  RT_data   :  14,902 Pages (61,038,592)
  available : 748,703 Pages (3,066,687,488)
  ACPI_recl :      96 Pages (393,216)
  ACPI_NVS  :     256 Pages (1,048,576)
  MemMapIO  :       5 Pages (20,480)
Total Memory: 3,985 MB (4,179,152,896) Bytes

(UEFI noob olarak BS_data ne anlama geliyor?)

dh -d

http://pastebin.com/KH1rFehj

(dh -v sonsuz döngüye girer ve boşaltılamaz ...)

dmpstore (Windows 8 Ürün Anahtarımı düzenledim):

http://pastebin.com/iYPcbpEY

Bu hafızayı geri almak için herhangi bir fikir veya başka bir yol (herkes makineyi önyükleme yapmadan UEFI NVRAM'ı tamamen sıfırlamanın bir çalışma yolu olup olmadığını biliyor mu?) Çok takdir ediliyor ...

Edit1

Linux'u UEFI modunda önyüklerken, belleğin çoğu kullanılabilir.

/ Proc / meminfo

/ Proc / iomem

dmesg

Ancak Uyumluluk BIOS modunda (CSM aracılığıyla) önyükleme yaparken:

/ Proc / iomem

dmesg

Muhtemelen CSM'de bir hata? (Ama yine de aniden ortaya çıkması şaşırtıcı ...)

Birincil işletim sistemim Windows (7) olduğundan, sanırım 8 (.1) sürümüne yükseltmem ve UEFI'yi kullanmak için GPT bölümünde tam bir yeniden yükleme yapmam gerekiyordu. Ve UEFI'nin (hala) düzenli olarak neden olduğu sorunları göz önünde bulundurarak, bu rotaya gitmek isteyip istemediğimden emin değilim ...

EDIT2

Ayrıca Lenovo Forumları'nda bu konuda bir ileti yayınladım, ancak şu ana kadar yanıt yok: http://forums.lenovo.com/t5/R-and-L-Series-ThinkPad-Laptops/L530-2481-3SG-First-1 -4-TR-RAM-of-4-TR-yedek-ile-donanım-ve / td-p / 1.539.272

Ayrıca (sadece bu sebebi hariç tutmak için) CMOS pilini çıkardım, ancak "alt kapı" (sabit diskin ve RAM'in gizlendiği kapak) üzerinde bulunan bazı karanlık parmak izleri hariç, beni daha akıllı hale getirmedi.

EDIT3

Pek fazla haber yok, Lenovo'dan bir adam forumdaki yazımı takip etti ve bazı mühendislerin buna bir göz atacağını söyledi. En iyisini umalım.

EDIT4

Başka bir 21MB, tozları ısırdı, bu sefer UEFI Güvenli Önyükleme yoluyla bir Linux dağıtımını önyüklemeye çalışmak için ... Lenovo forumlarında yukarıda belirtilen konu başlığında daha fazla ayrıntı.

daha fazla hafıza kaybı


Bellekle ilgili isteğe bağlı bir BIOS'unuz var mı? Özellikle bellek yeniden eşleme seçenekleri var mı?
David Schwartz

Hayır, bellek korumasını (DEP) devre dışı bırakmak dışında böyle bir seçenek yoktur. Özellikle% 100 eminim ve 1.4GB ile 2.2GB arasında önyükleme önceliği dışında hiçbir BIOS seçeneğini değiştirmedim.
mihi

Win7'nin hafızanızın yalnızca 3.5GB veya daha azını kullanabileceği göz önüne alındığında, bu sorudan biraz şaşkınım. Bu makaledeki önerileri denediniz mi? support.microsoft.com/kb/978610
Debra

2
@Debra (kesinlikle) 3.5GB'ı kullanabilen 64 bit Win7 (işte 12GB Win7 çalıştıran bir makinem var). Ve evet, yaptım (4 ay önce son sorumu gönderdiğimde)
mihi

Şu anda hangi BIOS sürümünü kullanıyorsunuz ve hangisi öncekiydi? BIOS'u zaten varsayılan ayarlarına sıfırlamayı denediniz mi? Sistem özellikleri iletişim kutusunda görüntülenen yüklü / kullanılabilir bellek miktarı nedir?
and31415

Yanıtlar:


19

Çözüldü :)

Nedeni, UEFI uygulamasında Açık Kaynak TianoCore uygulamasında da görülebilen garip bir özellik gibi görünüyor:

https://github.com/tianocore/edk2/blob/master/IntelFrameworkModulePkg/Library/GenericBdsLib/BdsMisc.c#L1425

Sonunda EFI değişken dökümlerimi son 21MB "kaybından" sonra ve ilginç değişkenler bulduktan sonra buldum:

Son 21 MB belleği kaybetmeden önce

Variable NV+RT+BS '4C19049F-4137-4DD3-9C10-8B97A83FFDFA:MemoryTypeInformationBackup' DataSize = 50
00000000: 09 00 00 00 60 00 00 00-0A 00 00 00 00 01 00 00 *....`...........*
00000010: 00 00 00 00 00 10 00 00-06 00 00 00 36 3A 00 00 *............6:..*
00000020: 05 00 00 00 00 02 00 00-03 00 00 00 00 8C 00 00 *................*
00000030: 04 00 00 00 00 40 00 00-01 00 00 00 00 02 00 00 *.....@..........*
00000040: 02 00 00 00 78 F2 03 00-0E 00 00 00 00 00 00 00 *....x...........*
Variable NV+RT+BS '4C19049F-4137-4DD3-9C10-8B97A83FFDFA:MemoryTypeInformation' DataSize = 50
00000000: 09 00 00 00 60 00 00 00-0A 00 00 00 00 01 00 00 *....`...........*
00000010: 00 00 00 00 00 10 00 00-06 00 00 00 36 3A 00 00 *............6:..*
00000020: 05 00 00 00 00 02 00 00-03 00 00 00 00 8C 00 00 *................*
00000030: 04 00 00 00 00 40 00 00-01 00 00 00 00 02 00 00 *.....@..........*
00000040: 02 00 00 00 38 E7 06 00-0E 00 00 00 00 00 00 00 *....8...........*

Onları kaybettikten sonra

Variable NV+RT+BS '4C19049F-4137-4DD3-9C10-8B97A83FFDFA:MemoryTypeInformationBackup' DataSize = 50
00000000: 09 00 00 00 60 00 00 00-0A 00 00 00 00 01 00 00 *....`...........*
00000010: 00 00 00 00 00 10 00 00-06 00 00 00 36 3A 00 00 *............6:..*
00000020: 05 00 00 00 00 02 00 00-03 00 00 00 00 8C 00 00 *................*
00000030: 04 00 00 00 00 40 00 00-01 00 00 00 00 02 00 00 *.....@..........*
00000040: 02 00 00 00 38 E7 06 00-0E 00 00 00 00 00 00 00 *....8...........*
Variable NV+RT+BS '4C19049F-4137-4DD3-9C10-8B97A83FFDFA:MemoryTypeInformation' DataSize = 50
00000000: 09 00 00 00 60 00 00 00-0A 00 00 00 00 01 00 00 *....`...........*
00000010: 00 00 00 00 00 10 00 00-06 00 00 00 36 3A 00 00 *............6:..*
00000020: 05 00 00 00 00 02 00 00-03 00 00 00 00 8C 00 00 *................*
00000030: 04 00 00 00 82 55 00 00-01 00 00 00 00 02 00 00 *.....U..........*
00000040: 02 00 00 00 38 E7 06 00-0E 00 00 00 00 00 00 00 *....8...........*

Bu neden ilginç: Her zaman bir şeyler test ettim, BIOS'u yükselttim ve düşürdüm, ayarları değiştirdiler, vb.

Hafızam azaldı, artık MemoryTypeInformation değeri MemoryTypeInformationBackup (eski yedeklemenin üzerine yazılır) ve değer değişikliklerinde tam olarak bir DWORD olarak yedeklendi - 0x34: Eski değer 0x4000, yeni değer 0x5582. Fark ondalık olarak 0x1582 veya 5506'dır, bu da belleğimin son kez küçüldüğü sayfa sayısıyla (4K blok) tam olarak eşleşir.

Bir adım daha ileri giderseniz: MemoryTypeInformation ve MemoryTypeInformationBackup'ın eski değeri de tam olarak bir değerden farklıdır (yine de farklı bir ofsette, 0x44). Değerlerini tekrar karşılaştırırken, ondalık olarak 0x2F4C0 veya 193728, tam olarak tekrar hafızamın önceki zamana kadar küçüldüğü sayfa sayısıdır (başlangıç ​​adresi 871F2000'den 57D32000'e değiştiğinde).

Bunu yukarıda belirtilen TianoCore koduyla karşılaştırdığımızda, bu aniden mükemmel bir anlam ifade eder:

Bu kod, sistem bir önyükleme seçeneğini önyüklemek üzereyken tetiklenir ve farklı UEFI bellek bölgelerinin MemoryTypeInformation'da depolanandan daha az tahsis edilmiş sayfalara sahip olduğunu doğrular. Değilse, bellek haritası yanlıştır ve değişken güncellenir (şu anda tahsis edilenin% 125'i ile) ve bir yeniden başlatma tetiklenir, böylece bellek haritası en son verilerden yeniden oluşturulabilir. Uygulamanın herhangi bir bellek türü için hiçbir zaman önbellek boyutunu azaltmayacağını unutmayın, bu nedenle buradaki değişiklikler kalıcı olacaktır.

Buradaki sorun, UEFI önyüklemesi başarısız olursa, sizi önyükleme seçim menüsüne geri getirecektir (veya varsayılan önyükleme sırasında bir cihaz olması durumunda, bir sonraki cihaz denenir). Çoğu UEFI önyükleme yükleyicisi, önyükleme hatası durumunda kendilerinden sonra temizlenmediğinden, bir sonraki menü başlatılır başlatılmaz, bu kod daha fazla belleğin ayrıldığını algılar ve böylece bellek haritasını güncellemesi gerektiğine karar verir. Aşağıdaki işletim sistemi sorun yaşamayacak. Ne yazık ki bu, her önyükleme hatası için tekrarlanır, böylece sonunda önyükleme yapmanın ne sıklıkta başarısız olabileceğinin bir "zor sınırı" vardır :-(

TianoCore'daki kod, değişkenin eksik veya hatalı olması durumunda geri dönüş seçeneklerine de sahiptir (bu, kodu doğru bir şekilde anlarsam, size en fazla iki yeniden başlatmaya mal olabilir), ancak Lenovo'nun bir Yedekleme değişkeni ( TianoCore'da mevcut değil), bu geri dönüşe güvenmemeye karar verdim ve sahip olduğum en eski yedeklemeye geri döndüm, yükleyici verisi türü için 800 MB eksi, bu da bana etkili bir 667 MB donanım ayrılmış bellek (şimdilik yeterince iyi) veriyor. Ve çalışıyor :)

çözülmüş hafıza haritası

Dersler öğrenildi

  • Bir UEFI önyükleme başarısız olduğunda ve önyükleme menüsüne geri döndüğünüzde, asla başka bir şey önyükleme yapmaya çalışmayın, sistemi daha iyi sıfırlayın (umarım bu kodu tetiklemeyecektir; eğer olursa, postayı güncelleyeceğim)

  • EFI Shell, EFI değişkenlerini düzenlemek ve bu sorunları gidermek için oldukça kullanışlı bir hex editörüne sahiptir

  • Satıcınız size yardım edemiyorsa veya yardım etmek istemese bile - inatçı kalın; sonunda bir çözüm bulacaksınız (aylar sonra bile)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.