Stock Apple NVMeFamily.kext is a GO…

Yesterday I started looking into the NVMeFamily.kext limitations and today I’d like to present you this screenshot:
NVMeFamilyIsAGo
The above output was captured after I ran a AJA disk test (see below) and yeah the performance is still a bit of a question mark, but perhaps this is due to my remote login, Sierra Developer Preview, or my patches need a little more love. I don’t know. Yet. Still rough. Will keep you posted.

Let’s not forget people. Your data should be absolutely safe so please relax and wait. Let me do my thing first.

Update: The performance may be fine after all – other SSD drives are much slower in Sierra. I’ll try to patch the kext for El Capitan tonight. Need to go back to work now…

Edit: I need a couple of AJA disk tests of the 256GB and 512GB modules so feel free to drop me a line per e-mail and I’ll share my current version with you. Sierra users only!

Update-2: Made some changes and now the read performance went up with ~700 MB/Sec.

Update-3: The RacerRehabMan’s AJA test screenshot that I received per e-mail pretty much confirms it; both the read and write performance of the patched binary is fine – the write speed of the 128GB modules is just a tad bit less impressive (per factory specs).
RacerRehabMan_NVMeFamily_AJA
Much better – though he ran into a serious issue, the SSD got corrupted after running AJA tests on it. Something I had seen myself, but I have nine more updates waiting for test runs with AJA😉

NVMe boot argument

People with a NVMe SSD may want to try this boot argument:

nvme=0x3

Think debug output and skipping the ‘Apple SSD’ check, but this is it for today. Sorry. Had a long day here so I am going to my bed.

Edit: For people who think that there is no hope… like Carmine😉

Here is what I did:

1.) Fix Info.plist so that IONVMeFamily.kext will load.

<key>GenericNVMeSSD</key>
<dict>
	<key>CFBundleIdentifier</key>
	<string>com.apple.iokit.IONVMeFamily</string>
	<key>Chipset Name</key>
	<string>SSD Controller</string>
	<key>IOClass</key>
	<string>IONVMeController</string>
	<key>IONameMatch</key>
	<array>
		<string>pci144d,a802</string>
	</array>
	<key>IOPCIPauseCompatible</key>
	<true/>
	<key>IOPCITunnelCompatible</key>
	<true/>
	<key>IOProviderClass</key>
	<string>IOPCIDevice</string>
	<key>IOUnitName</key>
	<string>disk</string>
	<key>Physical Interconnect</key>
	<string>PCI-Express</string>
	<key>Physical Interconnect Location</key>
	<string>Internal</string>
	<key>Vendor Name</key>
	<string>Apple</string>
</dict>

You can use whatever value and method you like. The good news is that now the IONVMeFamily.kext will load, but errors out over a LBA_DATA_SIZE error so we are going to fix this also.

2.) Patch the LBA_DATA_SIZE aka the block size shift value in the binary – change 0xc to 0x9) so that it initialises the IONVMeBlockStorageDevice.
IONVMeFamily LBA patch
Thing is. Apple uses ‘Preferred Block Size’ of 4096 KB (1 << 0xc) but the Samsung firmware only gives it 512KB (1 << 0x9) so we also need to solve this issue. And we can.

3.) Patch the ‘Preferred Block Size’ and ‘Size’ Properties with help of this patch:
IONVMeFamily Preferred Block Size patch
This will fix the ‘Size’ and ‘Preferred Block Size’ errors, so that diskutil list reports the right size, but the minute you do this, then the kext will error out (see verbose log output). The next hurdle is to patch other values like changing 0x1000 to 0x200 and 0xfff to 0x1ff.

4.) Now someone else can have a go at it😉

Apple Serial Numbers Ending With H000-HZZZ


H0HJ – iMac (21.5-inch, Late 2013)
H0KF – iMac (Retina 4K, 21.5-inch, Late 2015)
H0N6 – iMac (21.5-inch, Late 2015)
H0P6 – iMac (21.5-inch, Late 2015)
H0P7 – iMac (Retina 4K, 21.5-inch, Late 2015)
H0Q3 – iMac (Retina 5K, 27-inch, Late 2015)
H0Q4 – iMac (Retina 5K, 27-inch, Late 2015)
H0Q5 – iMac (Retina 5K, 27-inch, Late 2015)
H15R – iMac (Retina 4K, 21.5-inch, Late 2015)
H1DK – MacBook Pro (13-inch, Mid 2012)
H1DN – MacBook Pro (13-inch, Mid 2012)
H1DP – MacBook Pro (Retina, 13-inch, Early 2015)
H1DQ – MacBook Pro (Retina, 13-inch, Early 2015)
H1DV – Apple TV (4th generation)
H1DW – Apple TV (4th generation)
H1DX – iMac (21.5-inch, Late 2015)
H1DY – iMac (21.5-inch, Late 2015)
H1F1 – iMac (21.5-inch, Late 2015)
H1F2 – iMac (21.5-inch, Late 2015)
H1F3 – iMac (Retina 4K, 21.5-inch, Late 2015)
H1F5 – iMac (Retina 4K, 21.5-inch, Late 2015)
H1F7 – iMac (Retina 4K, 21.5-inch, Late 2015)
H1F8 – iMac (Retina 4K, 21.5-inch, Late 2015)
H1F9 – iMac (Retina 4K, 21.5-inch, Late 2015)
H1M9 – iPad Pro (9.7-inch)
H1MC – iPad Pro (9.7-inch)
H1MD – iPad Pro (9.7-inch)
H1MJ – iPad Pro (9.7-inch)
H1MK – iPad Pro (9.7-inch)
H1ML – iPad Pro (9.7-inch)
H1MM – iPad Pro (9.7-inch)
H1MN – iPad Pro (9.7-inch)
H1MP – iPad Pro (9.7-inch)
H1MR – iPad Pro (9.7-inch)
H1MV – iPad Pro (9.7-inch)
H1MW – iPad Pro (9.7-inch)
H1WK – MacBook Pro (Retina, 13-inch, Early 2015)
H1WR – iMac (21.5-inch, Late 2015)
H226 – iMac (21.5-inch, Late 2013)
H23F – iPad Pro (9.7-inch, Wi-Fi + Cellular)
H23X – iPad Pro (9.7-inch, Wi-Fi + Cellular)
H23Y – iPad Pro (9.7-inch, Wi-Fi + Cellular)
H240 – iPad Pro (9.7-inch, Wi-Fi + Cellular)
H245 – iPad Pro (9.7-inch, Wi-Fi + Cellular)
H246 – iPad Pro (9.7-inch, Wi-Fi + Cellular)
H247 – iPad Pro (9.7-inch, Wi-Fi + Cellular)
H248 – iPad Pro (9.7-inch, Wi-Fi + Cellular)
H249 – iPad Pro (9.7-inch, Wi-Fi + Cellular)
H24C – iPad Pro (9.7-inch, Wi-Fi + Cellular)
H24D – iPad Pro (9.7-inch, Wi-Fi + Cellular)
H24F – iPad Pro (9.7-inch, Wi-Fi + Cellular)
H256 – iPad Pro (9.7-inch, Wi-Fi + Cellular)
H258 – iPad Pro (9.7-inch, Wi-Fi + Cellular)
H259 – iPad Pro (9.7-inch, Wi-Fi + Cellular)
H25M – iMac (21.5-inch, Late 2015)
H25N – iMac (Retina 4K, 21.5-inch, Late 2015)
H28H – iMac (Retina 4K, 21.5-inch, Late 2015)
H2KW – iMac (21.5-inch, Late 2015)
H2XG – iPhone SE
H2XH – iPhone SE
H2XJ – iPhone SE
H2XK – iPhone SE
H2XL – iPhone SE
H2XM – iPhone SE
H2XN – iPhone SE
H2XP – iPhone SE
H2XQ – iPhone SE
H2XR – iPhone SE
H2XT – iPhone SE
H2XV – iPhone SE
H2XW – iPhone SE
H2XX – iPhone SE
H2Y7 – iPhone SE
H2Y8 – iPhone SE
H2YQ – iMac (Retina 5K, 27-inch, Late 2015)
H3GN – iMac (Retina 5K, 27-inch, Late 2015)
H3GP – iMac (Retina 5K, 27-inch, Late 2015)
H3GQ – iMac (Retina 5K, 27-inch, Late 2015)
H3GR – iMac (Retina 5K, 27-inch, Late 2015)
H3GT – iMac (Retina 5K, 27-inch, Late 2015)
H3GV – iMac (Retina 5K, 27-inch, Late 2015)
H3GW – iMac (Retina 5K, 27-inch, Late 2015)
H3GX – iMac (Retina 5K, 27-inch, Late 2015)
H3GY – iMac (Retina 5K, 27-inch, Late 2015)
H3H0 – iMac (Retina 5K, 27-inch, Late 2015)
H3H1 – iMac (Retina 5K, 27-inch, Late 2015)
H3H2 – iMac (Retina 5K, 27-inch, Late 2015)
H3H3 – iMac (Retina 5K, 27-inch, Late 2015)
H3H4 – iMac (Retina 5K, 27-inch, Late 2015)
H3H5 – iMac (Retina 5K, 27-inch, Late 2015)
H3H6 – iMac (Retina 5K, 27-inch, Late 2015)
H3H7 – iMac (Retina 5K, 27-inch, Late 2015)
H3H8 – iMac (Retina 5K, 27-inch, Late 2015)
H3H9 – iMac (Retina 5K, 27-inch, Late 2015)
H3HC – iMac (Retina 5K, 27-inch, Late 2015)
H3HD – iMac (Retina 5K, 27-inch, Late 2015)
H3HF – iMac (Retina 5K, 27-inch, Late 2015)
H3HG – iMac (Retina 5K, 27-inch, Late 2015)
H3HH – iMac (Retina 5K, 27-inch, Late 2015)
H3HJ – iMac (Retina 5K, 27-inch, Late 2015)
H3QD – MacBook Air (13-inch, Early 2015)
H3QF – MacBook Air (13-inch, Early 2015)
H3QJ – MacBook Air (13-inch, Early 2015)
H3QK – MacBook Air (13-inch, Early 2015)
H3QW – MacBook (Retina, 12-inch, Early 2016)
H3QX – MacBook (Retina, 12-inch, Early 2016)
H3QY – MacBook (Retina, 12-inch, Early 2016)
H3R5 – MacBook (Retina, 12-inch, Early 2016)
H3R6 – MacBook (Retina, 12-inch, Early 2016)
H3R7 – MacBook (Retina, 12-inch, Early 2016)
H3RJ – iMac (Retina 4K, 21.5-inch, Late 2015)
H4JM – iMac (Retina 5K, 27-inch, Late 2015)
H4M7 – Solo2 Wireless
H4M8 – Solo2 Wireless
H4M9 – Solo2 Wireless
H4MD – Solo2 Wireless
H4MF – Solo2 Wireless
H4MG – Solo2 Wireless
H4MH – Solo2 Wireless
H4MJ – Solo2 Wireless
H4ML – Solo2 Wireless
H4MM – Solo2 Wireless
H4MN – Solo2 Wireless
H4MR – Solo2 Wireless
H569 – MacBook Air (13-inch, Early 2015)
H5DN – iMac (Retina 5K, 27-inch, Late 2014)
H682 – iMac (Retina 5K, 27-inch, Late 2014)
H6Q8
H84M – Mac mini (Late 2014)
H8KX – iMac (21.5-inch, Late 2015)
H8KY – iMac (Retina 4K, 21.5-inch, Late 2015)
H8L0 – iMac (Retina 4K, 21.5-inch, Late 2015)
H8L1 – iMac (Retina 4K, 21.5-inch, Late 2015)
H8L2 – iMac (Retina 4K, 21.5-inch, Late 2015)
H8L3 – iMac (Retina 4K, 21.5-inch, Late 2015)
H8L5 – iMac (Retina 5K, 27-inch, Late 2015)
H8L6 – iMac (Retina 5K, 27-inch, Late 2015)
HC5R – Powerbeats2 Wireless
HC84
HD8M – MacBook (Retina, 12-inch, Early 2016)
HDNK – MacBook (Retina, 12-inch, Early 2016)
HFG7 – MacBook Pro (Retina, 15-inch, Mid 2015)

See also: Apple Serial Numbers Ending With F000-FZZZ
and: Apple Serial Numbers Ending With G000-GZZZ.

Apple carOS…

Didn’t Tim Cook say that it will be a late christmas for everyone?

No. I personally don’t care about Apple’s plan to rename OS X to macOS and I also don’t care about iOS 10 and its GUI changes, or OS X 10.12 either. Sorry Tim, but that to me is all minor stuff. And I don’t expect any innovation from Apple in this area. Ok. Siri may be a great new feature for OS X 10.12 (and a long-overdue one) but I personally won’t use it.

New hardware? Well. If Apple really want to keep the hardware interesting for its user base, then that is definitely something that they will need to do. And pronto.

About that touch strip to replace the function keys. Nice, but that is not a major change. The hardware will still be assembled in China, with a high(er) price tag (than competitors), and everything will still be soldered, even more so, so you cannot update anything without voiding your warranty or bricking the darn thing. The current MacPro with outdated processors and graphics cards is one example of Apple hardware that needs to be updated.

About expanding ApplePay to more countries? That is going to happen, soon, but that is nothing more than an absolute necessity. Not that I need a credit card for anything, because we only use debit cards here.

Backups to iCloud? That would be cool, but it’s not an absolute necessity.

Solving the problems in AppStore? Another absolute necessity, but don’t expect any innovation there.

AppleTV and tvOS? Please. Give me a break. You can’t be serious. That is still a hobby project.

But if that is the ‘late christmas for everyone‘ that Tim Cook was talking about, then we need a new Santa Claus (LOL) because I won’t be happy with my christmas present(s).

So what would make me happy? Hmm. Another “one more thing…” moment perhaps. The day that people can start ripping that stupid white Apple logo from the back of their cars… and get one with Apple carOS may change my mind. It will be expensive (wink wink) like anything else that Apple sells, and that won’t change in the near future (or AAPL will need to fail) but an Apple (electric) car would definitely be something to look forward to. Let’s see if Apple can still be innovative and crush Tesla. However. This of course won’t happen until Apple buys Tesla! I mean. Who else?

Tip of the day: Get a new SSD or have one ready for OS X 10.12 (get ready and install OS X 10.11.6 on it).

CatalogURL for OS X 10.12

I blogged about CatalogURL’s last year already, but today I’d like to share the new ones for OS X 10.12 (data to be updated in the near future):

Developer Program Members

https://swscan.apple.com/content/catalogs/others/index-10.12seed-10.12-10.11-10.10-10.9-mountainlion-lion-snowleopard-leopard.merged-1.sucatalog.gz

Beta Program Members

https://swscan.apple.com/content/catalogs/others/index-10.12beta-10.12-10.11-10.10-10.9-mountainlion-lion-snowleopard-leopard.merged-1.sucatalog.gz

Regular Software Updates

https://swscan.apple.com/content/catalogs/others/index-10.12-10.11-10.10-10.9-mountainlion-lion-snowleopard-leopard.merged-1.sucatalog.gz

You can check the CatalogURL with help of this terminal command:

sudo defaults read /Library/Preferences/com.apple.SoftwareUpdate CatalogURL

You can change the CatalogURL with: sudo /usr/sbin/softwareupdate --set-catalog [URL]

Note: The CatalogURL’s will only work for secondary updates, after you have installed macOS 10.12. This cannot be used to install the first developer preview!

Intel® Turbo Boost Max Technology 3.0

The latest i7-68xx and i7-69xx Broadwell E processors come with a new feature called Intel® Turbo Boost Max Technology 3.0 which, in short, adds an extra punch to the maximum supported turbo frequency. And I don’t know why, but data and reviews (at that time) over at sites like wccftech.com, tomshardware.com and anandtech.com do show the wrong data, because this is what is should have been:

i7-6950X (10 Cores / 20 Threads)
Base Frequency 3000 MHz, Max Turbo Frequency 3500 MHz / 4000 MHz.

i7-6900K (8 Cores / 16 Threads)
Base Frequency 3200 MHz, Max Turbo Frequency 3700 MHz / 4000 MHz.

i7-6850K (6 Cores / 12 Threads)
Base Frequency 3600 MHz, Max Turbo Frequency 3800 MHz / 4000 MHz.

i7-6800K (6 Cores / 12 Threads)
Base Frequency 3400 MHz, Max Turbo Frequency 3600 MHz / 3800 MHz.

This (updated) data comes straight from Intel, but it wasn’t so helpful with other people – like anandtech – when they asked about this new feature. See also: ‘Intel refuses to state the effect of TBM3, saying that each CPU is different and could boost by different amounts‘. But now you know (a pretty good review by all means otherwise).

In other words. With Intel® Turbo Boost Max Technology 3.0 enabled in the BIOS both the i7-68n0K processors get two extra Turbo bins (200 MHz), the i7-6900K three (300 MHz) and the i7-6950X (extreme edition) five (500 MHz). See values in red (the ‘suggested’ 4000 MHz in the MSI BIOS is correct). The blue values are the frequencies for Turbo Boost Technology v2.0.

So now we have two different Turbo frequencies, and benchmarks and applications will run faster if only one core is active. Making it much more responsive and boot faster on OS X. Like increasing the single-core multiplier in the BIOS with the previous generation of HEDT processors, but this can potentially become a great feature… when all BIOS versions and drivers (for Linux and OS X) do what they are supposed to do. That however is unfortunately not yet the case (see anandtech.com review about the default settings in the BIOS).

And as you might have guessed… the ssdtPRGen.sh Broadwell Data.cfg already supports it. And for any other OC you can to use:

./ssdtPRGen.sh -turbo [max turbo frequency]