Yes, this is the most logical explanation.The most probable explanation is that the payload for the updates forced the garbage collection to run.
Have you ever seen something similar happen?
Yes, this is the most logical explanation.The most probable explanation is that the payload for the updates forced the garbage collection to run.
This is exactly the expected/normal behavior.Yes, this is the most logical explanation.
Have you ever seen something similar happen?
OK, thank you @tsialex for those clarifications.This is exactly the expected/normal behavior.
What is wrong is when the garbage collection fails and you have a boot loop or a corrupt NVRAM volume, something that is becoming common since software updates NVRAM payload size increased significantly with Big Sur and even more with 12.3+.
Btw, it's becoming common, but there are threads here of MacPro5,1 bricking after software updates or OS installs since at least High Sierra and that's why you shouldn't have a too low available space. If after a deep NVRAM reset (you can also start with aOK, thank you @tsialex for those clarifications.
sudo nvram ResetNVRam=1
) you still around low 20's, you'll need a reconstruction service.Is there a CRC32 for the MLB?- Serialize an MLB to match the system SN
Is there a CRC32 for the MLB?
9:344 0:019 Running Child Image via Loader File:- 'boot.efi'
9:381 0:036 In Hardware NVRAM ... Not Found When Setting Variable:- 'EFI_IMAGE_SECURITY_DATABASE'
9:395 0:013 In Hardware NVRAM ... Not Found When Setting Variable:- 'EFI_IMAGE_SECURITY_DATABASE'
9:409 0:014 In Hardware NVRAM ... Not Found When Setting Variable:- 'EFI_IMAGE_SECURITY_DATABASE'
9:423 0:014 In Hardware NVRAM ... Success When Setting Variable:- 'EFI_IMAGE_SECURITY_DATABASE'
9:437 0:014 In Hardware NVRAM ... Success When Setting Variable:- 'EFI_IMAGE_SECURITY_DATABASE'
9:451 0:013 In Hardware NVRAM ... Success When Setting Variable:- 'EFI_IMAGE_SECURITY_DATABASE'
9:466 0:014 In Hardware NVRAM ... Success When Setting Variable:- 'EFI_IMAGE_SECURITY_DATABASE'
9:481 0:015 In Hardware NVRAM ... Success When Setting Variable:- 'EFI_IMAGE_SECURITY_DATABASE'
9:495 0:013 In Hardware NVRAM ... Success When Setting Variable:- 'EFI_IMAGE_SECURITY_DATABASE'
9:510 0:014 In Hardware NVRAM ... Success When Setting Variable:- 'EFI_IMAGE_SECURITY_DATABASE'
9:527 0:017 In Hardware NVRAM ... Success When Setting Variable:- 'EFI_IMAGE_SECURITY_DATABASE'
9:542 0:014 In Hardware NVRAM ... Success When Setting Variable:- 'EFI_IMAGE_SECURITY_DATABASE'
9:556 0:014 In Hardware NVRAM ... Success When Setting Variable:- 'EFI_IMAGE_SECURITY_DATABASE'
9:570 0:014 In Hardware NVRAM ... Success When Setting Variable:- 'EFI_IMAGE_SECURITY_DATABASE'
9:585 0:014 In Hardware NVRAM ... Success When Setting Variable:- 'EFI_IMAGE_SECURITY_DATABASE'
9:599 0:014 In Hardware NVRAM ... Success When Setting Variable:- 'EFI_IMAGE_SECURITY_DATABASE'
Are the MAC IDs present in the ROM?OpenCorePkg/Utilities/macserial/FORMAT.md at master · acidanthera/OpenCorePkg
OpenCore bootloader. Contribute to acidanthera/OpenCorePkg development by creating an account on GitHub.github.com
Are the MAC IDs present in the ROM?
What size are those EFI_IMAGE_SECURITY_DATABASE? The log should include that info. Also, what flags? If they're not "NV" then it doesn't matter.It appears that Monterey saves some form of UEFI SecureBoot Infrastructure to the NVRAM when booting.
RefindPlus Log Extract of Boot Time NVRAM Writes:
Code:9:344 0:019 Running Child Image via Loader File:- 'boot.efi' 9:381 0:036 In Hardware NVRAM ... Not Found When Setting Variable:- 'EFI_IMAGE_SECURITY_DATABASE' 9:395 0:013 In Hardware NVRAM ... Not Found When Setting Variable:- 'EFI_IMAGE_SECURITY_DATABASE' 9:409 0:014 In Hardware NVRAM ... Not Found When Setting Variable:- 'EFI_IMAGE_SECURITY_DATABASE' 9:423 0:014 In Hardware NVRAM ... Success When Setting Variable:- 'EFI_IMAGE_SECURITY_DATABASE' 9:437 0:014 In Hardware NVRAM ... Success When Setting Variable:- 'EFI_IMAGE_SECURITY_DATABASE' 9:451 0:013 In Hardware NVRAM ... Success When Setting Variable:- 'EFI_IMAGE_SECURITY_DATABASE' 9:466 0:014 In Hardware NVRAM ... Success When Setting Variable:- 'EFI_IMAGE_SECURITY_DATABASE' 9:481 0:015 In Hardware NVRAM ... Success When Setting Variable:- 'EFI_IMAGE_SECURITY_DATABASE' 9:495 0:013 In Hardware NVRAM ... Success When Setting Variable:- 'EFI_IMAGE_SECURITY_DATABASE' 9:510 0:014 In Hardware NVRAM ... Success When Setting Variable:- 'EFI_IMAGE_SECURITY_DATABASE' 9:527 0:017 In Hardware NVRAM ... Success When Setting Variable:- 'EFI_IMAGE_SECURITY_DATABASE' 9:542 0:014 In Hardware NVRAM ... Success When Setting Variable:- 'EFI_IMAGE_SECURITY_DATABASE' 9:556 0:014 In Hardware NVRAM ... Success When Setting Variable:- 'EFI_IMAGE_SECURITY_DATABASE' 9:570 0:014 In Hardware NVRAM ... Success When Setting Variable:- 'EFI_IMAGE_SECURITY_DATABASE' 9:585 0:014 In Hardware NVRAM ... Success When Setting Variable:- 'EFI_IMAGE_SECURITY_DATABASE' 9:599 0:014 In Hardware NVRAM ... Success When Setting Variable:- 'EFI_IMAGE_SECURITY_DATABASE'
Might be the same with Big Sur
Size and persistence information would indeed be enlightening. I have dismantled the boot time logging infrastruture as I decided to move on from that curiosity but I could roll it back in later to see what gives.What size are those EFI_IMAGE_SECURITY_DATABASE? The log should include that info. Also, what flags? If they're not "NV" then it doesn't matter.
Thinking out loud on the above, if it is indeed writing upwards of 10kb to the NVRAM with aI'll guess each packed entry appearance is 1024 bytes or 2048 bytes perhaps.
NonVolatile
flag, I wonder whether it would be possible/desirable to change the flag to Volatile
to pipe it to the RAM instead?Success
but nothing actually happens. Even with that however, GC will always happen faster because of that lump of data sitting there .... assuming it is NonVolatile
in the first place.Or use your own ram storage method. You don't always have to call the original NVRAM storage routine.Thinking out loud on the above, if it is indeed writing upwards of 10kb to the NVRAM with aNonVolatile
flag, I wonder whether it would be possible/desirable to change the flag toVolatile
to pipe it to the RAM instead?
Your NVRAM code could check the existing value and report if the new value is different.On the flip side, I suppose once it is written once, subsequent write attempts will returnSuccess
but nothing actually happens.
Well, such calls can always be filtered and handed as wanted in a SetVariable hook. Should be implemented in OpenCore as only relevant on unsupported units and a hook is already in place.Or use your own ram storage method. You don't always have to call the original NVRAM storage routine.
APPL,PanicInfo
stuff first. Can perhaps extend the changes to include this item later. Not Found When Setting Variable:- 'EFI_IMAGE_SECURITY_DATABASE **** Size: 0 bytes *** Persistent: FALSE'
Not Found When Setting Variable:- 'EFI_IMAGE_SECURITY_DATABASE **** Size: 0 bytes *** Persistent: FALSE'
Not Found When Setting Variable:- 'EFI_IMAGE_SECURITY_DATABASE **** Size: 0 bytes *** Persistent: FALSE'
Success When Setting Variable:- 'EFI_IMAGE_SECURITY_DATABASE **** Size: 8 bytes *** Persistent: FALSE'
Success When Setting Variable:- 'EFI_IMAGE_SECURITY_DATABASE **** Size: 4 bytes *** Persistent: FALSE'
Success When Setting Variable:- 'EFI_IMAGE_SECURITY_DATABASE **** Size: 4 bytes *** Persistent: FALSE'
Success When Setting Variable:- 'EFI_IMAGE_SECURITY_DATABASE **** Size: 4 bytes *** Persistent: FALSE'
Success When Setting Variable:- 'EFI_IMAGE_SECURITY_DATABASE **** Size: 1 bytes *** Persistent: FALSE'
Success When Setting Variable:- 'EFI_IMAGE_SECURITY_DATABASE **** Size: 1 bytes *** Persistent: FALSE'
Success When Setting Variable:- 'EFI_IMAGE_SECURITY_DATABASE **** Size: 1 bytes *** Persistent: FALSE'
Success When Setting Variable:- 'EFI_IMAGE_SECURITY_DATABASE **** Size: 1 bytes *** Persistent: FALSE'
Success When Setting Variable:- 'EFI_IMAGE_SECURITY_DATABASE **** Size: 1 bytes *** Persistent: FALSE'
Success When Setting Variable:- 'EFI_IMAGE_SECURITY_DATABASE **** Size: 1 bytes *** Persistent: FALSE'
Success When Setting Variable:- 'EFI_IMAGE_SECURITY_DATABASE **** Size: 16 bytes *** Persistent: FALSE'
Success When Setting Variable:- 'EFI_IMAGE_SECURITY_DATABASE **** Size: 16 bytes *** Persistent: FALSE'
Success When Setting Variable:- 'EFI_IMAGE_SECURITY_DATABASE **** Size: 1 bytes *** Persistent: FALSE'
EDK II appears to have a built in function to reclaim NVRAM space:I'll add a feature to (optionally) fill the VSS just past the GC threshold (so that the next reboot will force GC)
QueryVariableInfo
to get the NVRAM details, especially the RemainingVariableStorageSize
output. Also, we found a while ago that some other Mac model that did have UEFI 2.x, I think it was the 2018 Mac Mini, did not have QueryVariableInfo either. It's as if Apple took pains to remove it since it should be available in UEFI 2.x.ResetNVRam=1
and reboot.Testing this on an iMac 12,2 from 2011.My guess would be that a hack would not map the (virtual) BootROM the same way a real Mac does, meaning thatscanvss
is unlikely to ever work on a Hackintosh (sorry!). It may or may not work on non-Pro Macs; someone else would need to test that.
-- Parsing VSS from file 'iMac27Lab.rom' instead of local flash.
----------------
Signature: ffffffff (INVALID!)
Size: ffffffff (-1)
Format: ff (UNKNOWN!)
State: ff (UNKNOWN!)
Unk16[0]: ff (Garbage Collection In Progress)
Unk16[1]: ff
Unk32: ffffffff
----------------
(VSS1 variable area is empty!)
---
Free space appears to be correctly formatted and valid.
Total space in VSS1: -1 bytes
Total space used by variables (and VSS header): 16 bytes
Apparent free space in VSS1: 65448 bytes
Found 0 variables (0 valid, 0 deleted)
Reclaimable dead space (deleted variables): 0 bytes
----------------
Signature: ffffffff (INVALID!)
Size: ffffffff (-1)
Format: ff (UNKNOWN!)
State: ff (UNKNOWN!)
Unk16[0]: ff (Garbage Collection In Progress)
Unk16[1]: ff
Unk32: ffffffff
----------------
(VSS2 variable area is empty!)
---
Free space appears to be correctly formatted and valid.
Total space in VSS2: -1 bytes
Total space used by variables (and VSS header): 16 bytes
Apparent free space in VSS2: 65448 bytes
Found 0 variables (0 valid, 0 deleted)
Reclaimable dead space (deleted variables): 0 bytes
The mix and match of MP4,1 and MP5,1 components inside the BootROM image of a cross-flashed early-2009 is a disaster waiting to happen. Not one cross-flashed early-2009 BootROM image is really healthy, even if the VSS store is marked as healthy in the ZeroVector.Thanks so much for all this useful info. So I checked my early macpro 2009 (bought early march 2009) flashed to 5.1 and using 144.0.0.0 and Legacy Mojave. It is a single CPU W3690 with 3x16GB RDIMMS. My first VSS store shows 44537 free space after deep nvram reset.
@tsialex, do you confirm this means ROM is still healthy ?
thanks so much
Thanks for the quick answer. Can this be cleaned up and optimised with your services, or is it useless at this point ?The mix and match of MP4,1 and MP5,1 components inside the BootROM image of a cross-flashed early-2009 is a disaster waiting to happen. Not one cross-flashed early-2009 BootROM image is really healthy, even if the VSS store is marked as healthy in the ZeroVector.
Early made early-2009 also have very buggy hardware descriptors (base_16 to base_19, if you bought back in March should be base_16 or base_17).
Sure, I can upgrade everything inside the BootROM to the most recent components:Thanks for the quick answer. Can this be cleaned up and optimised with your services, or is it useless at this point ?
base_21
version,0x0d
version) sent with the mid-2012s made right before the end of production,AAPLEFI1.88Z.0005.I00.1904121247
.Just to report that I had my BootROM reconstructed and that on top the fact it is nice to have a perfect working and clean NVRAM and a never booted ROM to use in case of problems, I can see immediate changes :Sure, I can upgrade everything inside the BootROM to the most recent components:
- upgrade the MLB sector correctly,
- upgrade the NVRAM volume to same one from 144.0.0.0.0,
- upgrade the hardware descriptor to the
base_21
version,- upgrade the Fsys store to the same one (
0x0d
version) sent with the mid-2012s made right before the end of production,- upgrade the BootBlock to
AAPLEFI1.88Z.0005.I00.1904121247
.
Seems I'll have some threads to untangle Get everything that you have and I'll try my best to go back to the original hardwareIDs.I’m going to be needing your services @tsialex please if you can find some time. I have more work I need from you since I’ll get my Mac Pro 2009 and 2012 Rom done. I had to put my Mac Pro 2009 serial number on the 2012 when I blew up my backplane board, I couldn’t find the serial number of my 2012 Mac Pro to write with the Apple Service Disk back when it happened, the sticker on the tower is stripped off in half, I remembered later it’s on the Mac Pro product box. I don’t know if we could fix that when doing the rom?)
Thank you 😊
For anyone with a Mac Pro made before November 2010, with hardware descriptors base_16 to base_20, just the improvements of the upgrade to base_21 version already pay for the reconstruction.Just to report that I had my BootROM reconstructed and that on top the fact it is nice to have a perfect working and clean NVRAM and a never booted ROM to use in case of problems, I can see immediate changes :
- I can now hear at times some fans I almost never heard outside of heavy processing tasks or flight sim/gaming;
- my CPU runs about 8°C cooler;
- my Northbrige runs about 5°C cooler;
- startup sequence duration between power on and startup chime sound is a bit reduced by approx 2 seconds.