Apple Silicon SSD SMART telemetry and Percentage Used interpretation
Parent: Mac local LLMs: Memory and wired limits · Published reference · snapshot 2026-10-05
↓ Facts as markdownall context files
Percentage Used is a vendor-specific estimate of NVM life used, from actual usage and the manufacturer's life prediction. Apple publishes no prediction, so the percentage cannot be converted to terabytes written except by fitting observed pairs.
These notes link each claim to its source. A source may be a research report hosted on this site rather than the primary document. A published reference means the content is available; it does not certify independent review or accuracy.Read the editorial policy and follow the sources before relying on a claim.
Facts
- Percentage Used is a vendor-specific estimate of NVM life used, from actual usage and the manufacturer's life prediction. Apple publishes no prediction, so the percentage cannot be converted to terabytes written except by fitting observed pairs. [source]
- The controller updates Percentage Used once per power-on hour, so it lags writes by up to an hour of powered time. Data Units Written moves with every write. [source]
- Data Units counters are in thousands of 512-byte units, rounded up. One count is 512,000 bytes, so a before/after delta of Data Units Written resolves a session to about half a megabyte. [source]
- smartctl reads the Apple drive through the IOKit class IONVMeSMARTInterface (kIONVMeSMARTUserClientTypeID), which smartmontools added for Darwin in release 6.6 (2017) as "initial NVMe support based on undocumented API". [source]
- On Apple silicon the SSD controller function is split between the NAND modules and cores inside the SoC, so wear leveling and the wear estimate come from SoC firmware, not from a standalone drive controller. [source]
- macOS swap files live on a hidden VM volume in the boot volume group and cannot be moved to another disk on a current APFS boot volume group. [source]
- smartmontools 6.6 (2017-11-05): Darwin initial NVMe support. 7.2 (2020-12-30): Darwin NVMe log support. 7.4 (2023-08-01): CI and release builds for x86_64 and arm64 macOS. 7.5 (2025-04-30): JSON value endurance_used and smartd checks of Percentage Used. [source]
- Percentage Used may exceed 100 and a value of 100 does not mean the drive has failed. Values above 254 are reported as 255. [source]
- A Data Units value of 0 means the drive does not report that counter, not that zero data moved. [source]
- Critical Warning is a bit field: spare below threshold, temperature out of range, reliability degraded, media read-only. The smartctl overall-health PASSED result reflects only that field. [source]
- Counters survive across sessions but include factory and setup writes (see existing dossier). [source]
- The existing dossier cites HN and MacRumors posters who doubt Apple-silicon smartctl totals (DriveDX 6.1 TB versus smartmontools 6.7 TB for one block count). The unit definition in libnvme, 1000 x 512 bytes, means one tool printing decimal terabytes and another printing binary tebibytes show totals about 10% apart for the same raw count (1 TB is 0.909 TiB), and 6.7 divided by 6.1 is 1.098, which fits that gap. [source]
- No measured Data Units Written delta for a session of local inference exists in any source found. [source]
- Whether Apple's firmware applies a write-amplification factor inside the Percentage Used estimate is not documented. [source]
- Whether Percentage Used saturates at 100 on Apple silicon or continues, no Apple source says. [source]
- The NVMe Percentage Used field is a vendor-specific estimate of NVM subsystem life used; 100 indicates the estimated endurance is consumed but may not indicate failure; the value is allowed to exceed 100; percentages above 254 are reported as 255; it is updated once per power-on hour. [source]
- Data Units Read and Written count 512-byte units in thousands, rounded up, exclude metadata, and a value of 0 means the count is not reported. [source]
- Available Spare is a normalized percentage of remaining spare capacity, and the Available Spare Threshold field uses 0% to 100% with 101 to 255 reserved. [source]
- smartctl prints Data Units Read and Written by multiplying the raw count by 1000*512. [source]
- smartctl prints the NVMe health result PASSED or FAILED from Critical Warning and names four failing bits: available spare below threshold, temperature above or below threshold, reliability degraded, media in read-only mode. [source]
- smartmontools' Darwin backend opens the NVMe SMART plug-in through kIONVMeSMARTUserClientTypeID and kIONVMeSMARTInterfaceID. [source]
- smartmontools 6.6 (2017-11-05) added "Darwin: Initial NVMe support based on undocumented API". [source]
- smartmontools 7.2 (2020-12-30) added "Darwin: NVMe log support". [source]
- smartmontools 7.4 (2023-08-01) generates macOS release builds for the x86_64 and arm64 targets. [source]
- smartmontools 7.5 (2025-04-30) adds the JSON value endurance_used for smartctl -j -A and lets smartd check NVMe Percentage Used and Media and Data Integrity Errors. [source]
- On T2 and Apple silicon Macs the SSD controller functions are divided between the NAND flash modules and cores in the SoC fabric, and the Mac Studio and Mac Pro have replaceable internal storage that needs a DFU restore after replacement. [source]
- macOS swap space is a hidden volume named VM in the boot volume group, is used only when memory management must free physical memory, and cannot be placed on another disk with a current APFS boot volume group. [source]
- A Data Units Written delta taken before and after a session gives about 512 kB resolution, while one Percentage Used point equals roughly 30 TB on a 1 TB Apple SSD, so the percentage cannot show the wear of a single session. [source]
- Because Percentage Used refreshes hourly, a before/after read minutes apart can show an unchanged percentage even after large writes; use Data Units Written for session accounting. [source]
- The two-tool 6.1 versus 6.7 mismatch in the existing MacRumors report matches the 1.0995 ratio between decimal terabytes and binary tebibytes, so it may be a unit label difference and not a counting error. [source]
- To measure an inference session: run smartctl -a on the internal NVMe device, record Data Units Written, run the workload, read it again and multiply the difference by 512,000 bytes. [source]
Children
- No children recorded.