Thiết bị phần cứng nào được sử dụng để ăn hết 1,4 GB RAM 4GB của tôi và bây giờ đột nhiên sau khi không có thay đổi phần cứng nào ăn hết 2,2 GB?


17

Điều này ít nhiều là sự tiếp nối của

Thiết bị phần cứng nào ngốn 1,4 GB RAM 4GB của tôi?

Mặc dù tôi đã ít nhiều chấp nhận giải pháp đó vì một lý do bí ẩn nào đó, sau khi nâng cấp BIOS, bộ điều hợp đồ họa của tôi đột nhiên dành 1,4 GB bộ nhớ (thay vì bảo lưu động), bây giờ (2 tuần sau khi bảo hành máy tính xách tay của tôi hết hạn), sau khi thực hiện không có gì đặc biệt ngoại trừ có thể dùng thử một vài đĩa CD trực tiếp Linux (một số trong số chúng được khởi động lại từ khóa USB) và một vài lần thay đổi tùy chọn khởi động từ UEFI sang BIOS CSM và ngược lại, đột nhiên có thêm 800 MB.

Và để làm rõ, đây không phải là vấn đề của Windows - cả memtest và Linux cũng thấy lượng bộ nhớ đó. Chỉ Lenovo Chẩn đoán vẫn thấy toàn bộ bộ nhớ 4GB (và đã kiểm tra nó và không tìm thấy lỗi nào)

Dưới đây là ảnh chụp màn hình từ công cụ chẩn đoán trình điều khiển đồ họa và từ trình giám sát tài nguyên:

Tình hình mới

(Để tham khảo, trước 1435 MB được dành riêng cho phần cứng và bộ nhớ đồ họa tối đa là 1138 MB).

Điều này rõ ràng làm cho vấn đề trở nên cấp bách hơn nhiều, vì bây giờ một nửa bộ nhớ của tôi là "dành riêng cho phần cứng".

Đầu ra của meminfo -rkhông thay đổi nhiều (phạm vi bộ nhớ thứ 4 bị thu hẹp gần 800 MB):

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

Vì tôi không còn tin tưởng UEFI nữa sau những câu chuyện trước đó với Samsung và Lenovo, tôi đã đi vào vỏ EFI - và bỏ thêm một vài thông tin. Tôi thực sự không biết điều này là gì, nhưng có lẽ điều này giúp được ai đó:

bản đồ

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

(với tư cách là một UEFI, BS_data có nghĩa là gì?)

dh -d

http://pastebin.com/KH1rFehj

(dh -v chạy vào một vòng lặp vô hạn và không thể kết xuất ...)

dmpstore (Tôi đã chỉnh sửa Khóa sản phẩm Windows 8 của mình):

http://pastebin.com/iYPcbpEY

Bất kỳ ý tưởng hoặc bất kỳ cách nào khác để lấy lại bộ nhớ này (có ai biết liệu có cách nào để thiết lập lại hoàn toàn UEFI NVRAM mà không làm cho máy không thể khởi động không?) Được đánh giá rất cao ...

EDIT1

Khi khởi động Linux lên ở chế độ UEFI, hầu hết bộ nhớ đều có thể sử dụng được.

/ Proc / meminfo

/ Proc / iomem

dmesg

Nhưng khi khởi động nó ở chế độ Tương thích BIOS (thông qua CSM) thì không phải:

/ Proc / iomem

dmesg

Vì vậy, có lẽ là một lỗi trong CSM? (Nhưng vẫn ngạc nhiên khi nó đột nhiên xuất hiện ...)

Vì hệ điều hành chính của tôi là Windows (7), tôi đoán tôi phải nâng cấp lên 8 (.1) và thực hiện cài đặt lại toàn bộ trên phân vùng GPT để sử dụng UEFI. Và xem xét các vấn đề mà UEFI (vẫn) gây ra thường xuyên, tôi không chắc mình có muốn đi theo con đường đó không ...

EDIT2

Tôi cũng đã đăng một chủ đề trên Diễn đàn Lenovo về vấn đề này, nhưng cho đến nay vẫn chưa có phản hồi: http://forums.lenovo.com/t5/R-and-L-Series-ThinkPad-Laleighs/L530-2481-3SG-First-1 -4-GB-RAM-of-4-GB-dành riêng bởi phần cứng và / td-p / 1539272

Tôi cũng (chỉ để loại trừ nguyên nhân này) đã tháo pin CMOS, nhưng ngoại trừ một số dấu vân tay tối mà tôi tìm thấy ở "cửa dưới" (nắp phía sau mà đĩa cứng và RAM bị ẩn), nó không làm tôi khôn ngoan hơn.

EDIT3

Không có nhiều tin tức, một số người từ Lenovo đã theo dõi bài đăng của tôi trên diễn đàn và nói rằng một số kỹ sư sẽ có một cái nhìn về nó. Chúng ta hãy hi vọng cho điều tốt nhất.

EDIT4

21 MB khác đã cắn bụi, lần này là để thử khởi động một bản phân phối Linux thông qua UEFI Secure Boot ... Chi tiết khác trong chủ đề được đề cập ở trên trong các diễn đàn của Lenovo.

mất thêm bộ nhớ


Bạn có bất kỳ BIOS tùy chọn liên quan đến bộ nhớ? Đặc biệt có tùy chọn ánh xạ lại bộ nhớ?
David Schwartz

Không, ngoại trừ vô hiệu hóa bảo vệ bộ nhớ (DEP) không có tùy chọn như vậy. Và đặc biệt tôi chắc chắn 100% rằng tôi đã không thay đổi bất kỳ tùy chọn BIOS nào ngoại trừ ưu tiên khởi động giữa 1,4 GB và 2,2 GB đã ăn.
mihi

Tôi hơi bối rối trước câu hỏi, vì Win7 chỉ có thể sử dụng 3,5 GB hoặc ít hơn bộ nhớ của bạn. Bạn đã thử những gợi ý trong bài viết này? support.microsoft.com/kb/978610
Debra

2
@Debra Đó là Win7 64 bit, (chắc chắn) có thể sử dụng> 3,5 GB (tại nơi làm việc, tôi có một máy có 12 GB chạy Win7). Và vâng, tôi đã làm (4 tháng trước khi tôi đăng câu hỏi cuối cùng của mình)
mihi

Phiên bản BIOS nào bạn đang sử dụng và phiên bản trước là gì? Bạn đã thử đặt lại BIOS về cài đặt mặc định chưa? Lượng bộ nhớ đã cài đặt / có thể sử dụng được hiển thị trong hộp thoại thuộc tính hệ thống là bao nhiêu?
and31415

Câu trả lời:


19

Đã giải quyết :)

Nguyên nhân dường như là một tính năng lạ trong triển khai UEFI, cũng có thể thấy trong triển khai TianoCore mã nguồn mở:

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

Cuối cùng tôi đã tìm thấy nó sau khi phân biệt biến EFI của mình sau lần "mất" 21 MB cuối cùng và tìm thấy các biến thú vị:

Trước khi mất 21 MB bộ nhớ cuối cùng

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

Sau khi mất chúng

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

Tại sao điều này thú vị: Tất cả thời gian tôi đã thử nghiệm công cụ, nâng cấp và hạ cấp BIOS, thay đổi cài đặt, v.v., các biến này không bao giờ thay đổi (và tôi cho rằng chúng lưu trữ một số thông tin về cấu tạo / mô hình của RAM đã cài đặt của tôi hoặc tương tự).

Bây giờ bộ nhớ của tôi đã giảm, giá trị của MemoryTypeInform đã được sao lưu là MemoryTypeInformBackup (ghi đè lên bản sao lưu cũ) và chính xác một DWORD trong giá trị thay đổi - ở offset 0x34: Giá trị cũ là 0x4000, giá trị mới là 0x5582. Sự khác biệt là 0x1582 hoặc 5506 ở dạng thập phân, khớp chính xác với số lượng trang (khối 4K) bộ nhớ của tôi bị thu hẹp lần trước.

Đi thêm một bước nữa: giá trị cũ của MemoryTypeIn information và MemoryTypeInformBackup cũng khác nhau ở chính xác một giá trị (mặc dù ở một mức bù khác nhau, 0x44). Khi so sánh giá trị của chúng một lần nữa, 0x2F4C0 hoặc 193728 theo số thập phân, chính xác một lần nữa số trang mà bộ nhớ của tôi đã thu hẹp thời gian trước đó (khi địa chỉ bắt đầu thay đổi từ 871F2000 thành 57D32000).

So sánh điều này với mã TianoCore đã nói ở trên, điều này đột nhiên có ý nghĩa hoàn hảo:

Mã này được kích hoạt bất cứ khi nào hệ thống chuẩn bị khởi động tùy chọn khởi động và nó xác minh rằng các vùng bộ nhớ UEFI khác nhau có ít trang được phân bổ hơn so với được lưu trữ trong MemoryTypeInform. Nếu không, bản đồ bộ nhớ không chính xác và biến được cập nhật (với 125% giá trị hiện được phân bổ) và khởi động lại được kích hoạt, để bản đồ bộ nhớ có thể được xây dựng lại từ dữ liệu mới nhất. Lưu ý rằng việc triển khai sẽ không bao giờ giảm bất kỳ kích thước bộ nhớ cache nào cho bất kỳ loại bộ nhớ nào, vì vậy mọi thay đổi ở đây sẽ là vĩnh viễn.

Vấn đề ở đây là nếu UEFI boot bị lỗi, nó sẽ đưa bạn trở lại menu chọn boot (hoặc trong trường hợp đó là một thiết bị theo thứ tự khởi động mặc định, thiết bị tiếp theo sẽ được thử). Vì hầu hết các bộ tải khởi động UEFI không tự dọn sạch trong trường hợp lỗi khởi động, ngay khi menu tiếp theo được khởi động, mã này sẽ phát hiện thêm một số bộ nhớ đã được cấp phát và do đó quyết định phải cập nhật bản đồ bộ nhớ để hệ điều hành sau sẽ không gặp rắc rối. Thật không may, điều này lặp lại cho mỗi lần khởi động thất bại để cuối cùng có một "giới hạn cứng" về mức độ thường xuyên bạn có thể không khởi động được :-(

Mã trong TianoCore cũng có các tùy chọn dự phòng trong trường hợp biến bị thiếu hoặc không đúng định dạng (nếu tôi hiểu mã chính xác có thể khiến bạn phải trả thêm hai lần khởi động lại), nhưng xem xét thực tế rằng Lenovo thậm chí còn bao gồm một biến Sao lưu (mà không tồn tại trong TianoCore), tôi đã quyết định không tin tưởng vào dự phòng này và trở lại bản sao lưu cũ nhất mà tôi có, trừ 800 MB cho loại LoaderData, mang lại cho tôi bộ nhớ dự trữ phần cứng 667 MB hiệu quả (hiện tại đủ tốt). Và nó hoạt động :)

giải quyết bản đồ bộ nhớ

Bài học kinh nghiệm

  • Khi khởi động UEFI không thành công và bạn quay lại menu khởi động, không bao giờ thử khởi động bất cứ thứ gì khác, tốt hơn là thiết lập lại hệ thống (tôi hy vọng điều đó sẽ không kích hoạt mã sau đó; nếu có, tôi sẽ cập nhật bài đăng)

  • EFI Shell có trình soạn thảo hex khá hữu dụng để chỉnh sửa các biến EFI và khắc phục các sự cố này

  • Ngay cả khi nhà cung cấp của bạn không thể hoặc không muốn giúp bạn - hãy ngoan cố; cuối cùng bạn sẽ tìm thấy một giải pháp (ngay cả khi vài tháng sau)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.