zearp / Nucintosh

Intel NUC Hackintosh Stuff
730 stars 87 forks source link

very slow boot #112

Closed fabriziopicconi closed 1 year ago

fabriziopicconi commented 1 year ago

First of all thank you for your great work that save me setup time on my nuc

zearp commented 1 year ago

It seems like it's doing a lot of trimming on boot which slows it down. Trim on macOS is a hit and miss thing. Most of the time it works with most of the disks.

There are a few things you can do and try. First disable the NVMeFix.kext as it doesn't always play nice with all chipsets.

You can also try to disable trim and hope the controller on the SSD will do the trimming properly. It is not essential to have trim enabled as most SSD chipsets also do it. Just badly on some.

To disable trim you need to edit the OpenCore config and set ThirdPartyDrives to false and also run the terminal command trimforce disable just to be 100% sure it's off.

You can try both and see what works best for you disk. The kext fixes many issues found with NVMe drives, including power management so I would recommend to leave that enabled unless you can verify power management is working fine without it. You'll have to check that in IORegistryExplorer. I've never had issues with that kext but its worth a mention.

As for the SetApfsTrimTimeout setting I would leave that at -1 ad try the above first before applying the timeout patch. Read the below section from the OpenCore docs and you ca decide what works best for you. I personally have had no issues with disabling trim on some builds and not experienced faster degradation or reduction in performance. This is likely due to the fact the disks chipset does it properly already.

Good luck and let me know how it works out!


SetApfsTrimTimeout
Type: plist integer
Failsafe: -1
Requirement: 10.14 (not required for older)
Description: Set trim timeout in microseconds for APFS filesystems on SSDs.

The APFS filesystem is designed in a way that the space controlled via the spaceman structure is either used or free. This may be different in other filesystems where the areas can be marked as used, free, and unmapped. All free space is trimmed (unmapped/deallocated) at macOS startup. The trimming procedure for NVMe drives happens in LBA ranges due to the nature of the DSM command with up to 256 ranges per command. The more fragmented the memory on the drive is, the more commands are necessary to trim all the free space.

Depending on the SSD controller and the level of drive fragmenation, the trim procedure may take a considerable amount of time, causing noticeable boot slowdown. The APFS driver explicitly ignores previously unmapped areas and repeatedly trims them on boot. To mitigate against such boot slowdowns, the macOS driver introduced a timeout (9.999999 seconds) that stops the trim operation when not finished in time.

On several controllers, such as Samsung, where the deallocation process is relatively slow, this timeout can be reached very quickly. Essentially, it means that the level of fragmentation is high, thus macOS will attempt to trim the same lower blocks that have previously been deallocated, but never have enough time to deallocate higher blocks. The outcome is that trimming on such SSDs will be non-functional soon after installation, resulting in additional wear on the flash.

One way to workaround the problem is to increase the timeout to an extremely high value, which at the cost of slow boot times (extra minutes) will ensure that all the blocks are trimmed. Setting this option to a high value, such as 4294967295 ensures that all blocks are trimmed. Alternatively, use over-provisioning, if supported, or create a dedicated unmapped partition where the reserve blocks can be found by the controller. Conversely, the trim operation can be mostly disabled by setting a very low timeout value, while 0 entirely disables it. Refer to this [article](https://interface31.ru/tech_it/2015/04/mozhno-li-effektivno-ispolzovat-ssd-bez-podderzhki-trim.html) for details.

Note: The failsafe value -1 indicates that this patch will not be applied, such that apfs.kext will remain untouched.

Note 2: On macOS 12.0 and above, it is no longer possible to specify trim timeout. However, trim can be disabled by setting 0.

Note 3: Trim operations are only affected at booting phase when the startup volume is mounted. Either specifying timeout, or completely disabling trim with 0, will not affect normal macOS running.```