อุปกรณ์ฮาร์ดแวร์ใดที่เคยกิน RAM ขนาด 4GB ของฉันถึง 1.4GB และตอนนี้ทันทีหลังจากที่ไม่มีฮาร์ดแวร์เปลี่ยนแปลงกิน 2.2GB?


17

นี่คือความต่อเนื่องที่มากหรือน้อย

อุปกรณ์ฮาร์ดแวร์ใดที่กิน RAM 4GB ของฉันได้ถึง 1.4GB

ในขณะที่ฉันได้รับการยอมรับมากขึ้นหรือน้อยลงด้วยเหตุผลดังกล่าวด้วยเหตุผลบางอย่างหลังจาก BIOS อัปเกรดอะแดปเตอร์กราฟิกของฉันก็สงวนหน่วยความจำ 1.4GB (แทนการจองแบบไดนามิก) ตอนนี้ (2 สัปดาห์หลังจากการรับประกันโน้ตบุ๊คของฉันหมดอายุ) ไม่มีอะไรพิเศษยกเว้นการลองใช้ลินุกซ์ไลฟ์ซีดีบางตัว (บางอันวนลูปแบ็คบูตจากคีย์ USB) และเปลี่ยนตัวเลือกการบู๊ตจาก UEFI เป็น BIOS CSM และกลับมาอีกสองสามครั้ง

และเพื่อให้ชัดเจนนี่ไม่ใช่ปัญหาของ Windows - ทั้ง memtest และ Linux ยังเห็นจำนวนหน่วยความจำนั้น เฉพาะ Lenovo Diagnostics เท่านั้นที่เห็นหน่วยความจำ 4GB เต็ม (และทดสอบและไม่พบข้อผิดพลาด)

นี่คือภาพหน้าจอจากเครื่องมือวินิจฉัยไดรเวอร์กราฟิกและจากการตรวจสอบทรัพยากร:

สถานการณ์ใหม่

(สำหรับการอ้างอิงก่อน 1435MB ถูกสงวนไว้สำหรับฮาร์ดแวร์และหน่วยความจำกราฟิกสูงสุดคือ 1138 MB)

ซึ่งเห็นได้ชัดว่าทำให้ปัญหาเร่งด่วนมากขึ้นเนื่องจากตอนนี้ครึ่งหนึ่งของหน่วยความจำของฉันคือ

ผลลัพธ์ของmeminfo -rไม่เปลี่ยนแปลงมากนัก (ช่วงหน่วยความจำที่ 4 ลดลงเกือบ 800MB):

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

เนื่องจากฉันไม่ไว้วางใจ UEFI อีกต่อไปหลังจากเรื่องก่อนหน้านี้กับ Samsung และ Lenovo ฉันไปที่ EFI shell และทิ้งข้อมูลอีกไม่กี่อย่าง ฉันไม่รู้จริงๆว่าเรื่องนี้เกี่ยวกับอะไร แต่บางทีนี่อาจช่วยใครซักคน:

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 BS_data หมายถึงอะไร)

dh -d

http://pastebin.com/KH1rFehj

(dh -v วิ่งเข้าไปในวงไม่ จำกัด และไม่สามารถทิ้ง ... )

dmpstore (ฉันแก้ไขรหัสผลิตภัณฑ์ Windows 8 ของฉัน):

http://pastebin.com/iYPcbpEY

ความคิดหรือวิธีอื่นใดในการเรียกคืนหน่วยความจำนี้ (ไม่มีใครทราบว่ามีวิธีการรีเซ็ต UEFI NVRAM อย่างสมบูรณ์โดยไม่ทำให้เครื่องไม่สามารถบูตได้หรือไม่) มีความนิยมมาก ...

EDIT1

เมื่อบูต Linux ขึ้นในโหมด UEFI หน่วยความจำส่วนใหญ่จะใช้งานได้

/ proc / meminfo

/ proc / iomem

dmesg

แต่เมื่อทำการบูทในโหมด Compatibility BIOS (ผ่าน CSM) มันจะไม่:

/ proc / iomem

dmesg

อาจเป็นข้อผิดพลาดใน CSM หรือไม่ (แต่ก็ยังน่าแปลกใจที่มันเกิดขึ้นทันที ... )

เนื่องจากระบบปฏิบัติการหลักของฉันคือ Windows (7) ฉันคิดว่าฉันต้องอัปเกรดเป็น 8 (.1) และทำการติดตั้งแบบเต็มบนพาร์ติชัน GPT ใหม่เพื่อใช้ประโยชน์จาก UEFI และเมื่อพิจารณาถึงปัญหาที่ UEFI เป็นสาเหตุ (ยัง) เป็นประจำฉันไม่แน่ใจว่าฉันต้องการไปเส้นทางนั้น ...

EDIT2

ฉันยังโพสต์กระทู้ในฟอรัม Lenovo เกี่ยวกับเรื่องนี้ แต่ยังไม่มีคำตอบ: http://forums.lenovo.com/t5/R-and-L-Series-ThinkPad-Laptops/L530-2481-3SG-First-1 -4-GB-RAM ของ-4-GB-ลิขสิทธิ์โดยฮาร์ดแวร์และ / TD-P / 1,539,272

ฉันยัง (เพียงเพื่อแยกสาเหตุนี้) นำแบตเตอรี่ CMOS ออก แต่ยกเว้นลายนิ้วมือสีเข้มบางอย่างที่ฉันพบที่ "ประตูด้านล่าง" (ฝาด้านหลังซึ่งมีการซ่อนฮาร์ดดิสก์และ RAM) มันไม่ได้ทำให้ฉันฉลาดขึ้น

edit3

มีข่าวไม่มากนักจาก Lenovo บางคนติดตามโพสต์ของฉันในฟอรัมและบอกว่าวิศวกรบางคนจะมองมัน หวังว่าจะดีที่สุด

EDIT4

อีก 21MB ได้กัดฝุ่นเวลานี้สำหรับการพยายามบูตดิสทริบิวเตอร์ผ่าน UEFI Secure Boot ... รายละเอียดเพิ่มเติมในหัวข้อที่กล่าวถึงข้างต้นในฟอรัม Lenovo

หน่วยความจำหายไป


คุณมี BIOS ตัวเลือกที่เกี่ยวข้องกับหน่วยความจำหรือไม่? โดยเฉพาะอย่างยิ่งตัวเลือกการแมปหน่วยความจำใด ๆ
David Schwartz

ไม่ยกเว้นการปิดใช้งานการป้องกันหน่วยความจำ (DEP) ไม่มีตัวเลือกดังกล่าว และโดยเฉพาะอย่างยิ่งฉันแน่ใจว่า 100% ฉันไม่ได้เปลี่ยนตัวเลือก BIOS ใด ๆ ยกเว้นลำดับความสำคัญในการบูตระหว่าง 1.4GB ถึง 2.2GB กิน
mihi

ฉันสับสนเล็กน้อยกับคำถามเนื่องจาก Win7 อาจใช้หน่วยความจำของคุณน้อยกว่า 3.5GB เท่านั้น คุณลองคำแนะนำในบทความนี้หรือไม่? support.microsoft.com/kb/978610
เดบร้า

2
@Debra มันเป็น 64-bit Win7 ซึ่ง (แน่นอน) สามารถใช้> 3.5GB (ที่ทำงานฉันมีเครื่องที่ใช้ 12GB ที่รัน Win7) และใช่ฉันทำ (4 เดือนที่ผ่านมาเมื่อฉันโพสต์คำถามสุดท้ายของฉัน)
mihi

คุณใช้เวอร์ชั่น BIOS รุ่นใดในปัจจุบันและรุ่นก่อนหน้านี้เป็นรุ่นใด คุณลองรีเซ็ต BIOS เป็นค่าเริ่มต้นแล้วหรือยัง จำนวนหน่วยความจำที่ติดตั้ง / ใช้งานได้ที่แสดงในกล่องโต้ตอบคุณสมบัติระบบคือเท่าใด
and31415

คำตอบ:


19

แก้ไขแล้ว :)

สาเหตุดูเหมือนจะเป็นคุณสมบัติที่แปลกในการใช้งาน UEFI ซึ่งสามารถเห็นได้ในการใช้งาน Open Source TianoCore:

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

ในที่สุดฉันก็พบว่าหลังจากการกระจายตัวแปร EFI ของฉันทิ้งหลังจาก "การสูญเสีย" 21MB ล่าสุดและการค้นหาตัวแปรที่น่าสนใจ:

ก่อนที่จะสูญเสียหน่วยความจำ 21MB สุดท้าย

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...........*

หลังจากแพ้ไปแล้ว

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...........*

ทำไมสิ่งนี้จึงน่าสนใจ: ตลอดเวลาที่ฉันทดสอบเนื้อหาอัพเกรดและดาวน์เกรด BIOS เปลี่ยนแปลงการตั้งค่า ฯลฯ ตัวแปรเหล่านี้ไม่เคยเปลี่ยนแปลง (และฉันคิดว่าพวกเขาเก็บข้อมูลบางอย่างเกี่ยวกับยี่ห้อ / รุ่นของ RAM ที่ติดตั้งหรือคล้ายกัน)

ตอนนี้หน่วยความจำของฉันลดลงค่าของ MemoryTypeInformation จึงถูกสำรองไว้เป็น MemoryTypeInformationBackup (เขียนทับการสำรองข้อมูลเก่า) และ DWORD หนึ่งรายการในการเปลี่ยนแปลงค่า - ที่ออฟเซ็ต 0x34: ค่าเก่าคือ 0x4000 ค่าใหม่คือ 0x5582 ความแตกต่างคือ 0x1582 หรือ 5506 เป็นทศนิยมซึ่งตรงกับจำนวนหน้า (บล็อก 4K) หน่วยความจำของฉันหดตัวครั้งสุดท้าย

ไปอีกขั้นหนึ่ง: ค่าเก่าของ MemoryTypeInformation และ MemoryTypeInformationBackup ยังแตกต่างกันในหนึ่งค่า (ที่ออฟเซ็ตต่างกันแม้ว่า 0x44) เมื่อเปรียบเทียบค่าของพวกเขาอีกครั้ง 0x2F4C0 หรือ 193728 ในรูปของทศนิยมเป็นจำนวนหน้าของหน่วยความจำที่ฉันหดเวลาอีกครั้ง (เมื่อที่อยู่เริ่มเปลี่ยนจาก 871F2000 เป็น 57D32000)

เมื่อเปรียบเทียบกับโค้ด TianoCore ที่กล่าวมาข้างต้นนี่ทำให้รู้สึกสมบูรณ์แบบ:

รหัสนี้จะถูกทริกเกอร์เมื่อใดก็ตามที่ระบบกำลังจะบูตตัวเลือกการบูตและจะตรวจสอบว่าภูมิภาคหน่วยความจำ UEFI ที่แตกต่างกันมีหน้าที่จัดสรรน้อยกว่าที่เก็บไว้ใน MemoryTypeInformation ถ้าไม่แม็พหน่วยความจำไม่ถูกต้องและตัวแปรถูกอัพเดต (ด้วย 125% ของสิ่งที่ถูกจัดสรรในปัจจุบัน) และการรีบูตจะถูกทริกเกอร์เพื่อให้แมปหน่วยความจำสามารถสร้างใหม่ได้จากข้อมูลล่าสุด โปรดทราบว่าการใช้งานจะไม่ลดขนาดแคชใด ๆ สำหรับประเภทหน่วยความจำใด ๆ ดังนั้นการเปลี่ยนแปลงใด ๆ ที่นี่จะเป็นแบบถาวร

ปัญหาที่นี่คือว่าหากการบู๊ต UEFI ล้มเหลวมันจะนำคุณกลับสู่เมนูการเลือกการบู๊ต (หรือในกรณีที่เป็นอุปกรณ์ตามลำดับการบู๊ตเริ่มต้นระบบจะลองอุปกรณ์ถัดไป) เนื่องจากตัวโหลดการบูต UEFI ส่วนใหญ่จะไม่ล้างข้อมูลหลังจากตัวเองในกรณีที่บูตล้มเหลวทันทีที่เมนูถัดไปถูกบูตรหัสนี้จะตรวจสอบว่ามีการจัดสรรหน่วยความจำเพิ่มขึ้นและตัดสินใจว่าจะต้องปรับปรุงแผนที่หน่วยความจำ ระบบปฏิบัติการต่อไปนี้จะไม่เกิดปัญหา น่าเสียดายที่นี่ซ้ำสำหรับทุกความล้มเหลวในการบูตดังนั้นในที่สุดก็มี "ข้อ จำกัด ที่หนัก" ว่าคุณสามารถล้มเหลวในการบูตได้บ่อยเพียงใด :-(

รหัสใน TianoCore ยังมีตัวเลือกสำรองในกรณีที่ตัวแปรขาดหายไปหรือผิดรูปแบบ (ซึ่งถ้าฉันเข้าใจรหัสอย่างถูกต้องอาจทำให้คุณต้องรีบูตพิเศษถึงสองครั้ง) แต่เมื่อพิจารณาถึงความจริงที่ว่า Lenovo รวมตัวแปรสำรองไว้ด้วย ไม่มีอยู่ใน TianoCore) ฉันตัดสินใจที่จะไม่เชื่อถือทางเลือกนี้และเปลี่ยนกลับไปเป็นข้อมูลสำรองที่เก่าที่สุดที่ฉันมีลบด้วย 800 MB สำหรับประเภท LoaderData ซึ่งให้หน่วยความจำสำรองฮาร์ดแวร์ที่มีประสิทธิภาพ 667 MB (ดีพอสำหรับตอนนี้) และมันก็ใช้งานได้ :)

แผนที่หน่วยความจำที่แก้ไขแล้ว

บทเรียนที่ได้เรียนรู้

  • เมื่อการบู๊ต UEFI ล้มเหลวและคุณกลับไปที่เมนูบู๊ตอย่าพยายามบู๊ตสิ่งใดดีกว่ารีเซ็ตระบบ (ฉันหวังว่ามันจะไม่ทริกเกอร์รหัสจากนั้นถ้าเป็นเช่นนั้นฉันจะอัปเดตโพสต์)

  • EFI Shell มีตัวแก้ไข hex ที่ใช้งานได้ค่อนข้างมากสำหรับแก้ไขตัวแปร EFI และแก้ไขปัญหาเหล่านี้

  • แม้ว่าผู้ขายของคุณไม่สามารถหรือไม่ต้องการที่จะช่วยคุณ - อยู่ดื้อ; ในที่สุดคุณจะพบทางออก (แม้ว่าเดือนต่อมา)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.