はじめに
Apple Macbook Pro 14インチ/16インチに搭載されている M1 Pro/M1 Max の SSD(NAND)について、妄想しました。
Apple M1機のSSDについては、下記のように今年(2021年)2月23日のブログに書きました。
M1機では、2個のSSD(NAND)が搭載されています。上記のブログでの結論は、M1とSSDの接続は PCIe Gen4 x1 (1 lane)になっているのかな?ということです。
M1 の die shot を振り返る
下記は、Apple が公開している M1 の die shot です。説明のために引用します。die の左下の部分(黄緑の点線で囲った部分)がSERDESがある部分です。
その部分を拡大し、180度回転後、コメントを追加したのが下図です。右側に Thunderbolt 4 が 3 ポート、その隣に、PCIe Gen4 が 3 ポート、その隣に、NVMe が 2 ポート (実際はPCIe Gen4 が 2ポート)
M1 Pro/M1 Max の die shot を振り返る
下記は、Apple が公開している M1 Pro の die shot です。説明のために引用します。die の 上の部分がどうやら SERDES があるのでこの部分に PCIe がありそうです。
その右上の部分を拡大し、何が載っているかをコメントしたのが下記の図です。
上記ののも右側には、4つの Thunderbolt 4 (USB 3.x) があります。Macbook Pro 14インチ/16インチには、3つのThunderbolt 4のポートがあります。また、HDMIポートも付いていて、このHDMIポートは Thunderbolt 4.0のDisplayport から HDMIに変換しているっぽいです。
真ん中には、USB 3.x が 1ポートあるます。右側の Thunderbolt 4.0 と非常に否定ますが、下の部分がちょっと違います。その左に、PCIe Gen4 が 4ポート、そして、その左に NVMe 用に 8 ポート (実際はPCIe Gen4 が 8ポート)
Asahi Linux の dts を確認する
M1/M1 Pro/M1 Max搭載のマシンでLinuxを動かすという Asahi Linux の ソースコード(github)のdtsから各デバイスの構成を確認してみました。
master branch ではなく、t6000/bringup-work branch にあります。
M1
M1機は、t8103.dtsi の中に NVMe のエントリがあります。デバイス名としては、NVMe ではなく、ans2 です。compatible は、"apple,t8103-asc-xxx"です。
ans: mbox@277408000 { compatible = "apple,t8103-asc-mailbox"; reg = <0x2 0x77408000 0x0 0x4000>; interrupt-parent = <&aic>; interrupts = <AIC_IRQ 583 IRQ_TYPE_LEVEL_HIGH>, <AIC_IRQ 584 IRQ_TYPE_LEVEL_HIGH>, <AIC_IRQ 585 IRQ_TYPE_LEVEL_HIGH>, <AIC_IRQ 586 IRQ_TYPE_LEVEL_HIGH>; interrupt-names = "send-empty", "send-not-empty", "recv-empty", "recv-not-empty"; power-domains = <&ps_ans2>; #mbox-cells = <0>; }; sart: sart@27bc50000 { compatible = "apple,t8103-sart"; reg = <0x2 0x7bc50000 0x0 0x10000>; power-domains = <&ps_ans2>; }; ans2: nvme@27bcc0000 { compatible = "apple,t8103-ans-nvme"; reg = <0x2 0x7bcc0000 0x0 0x40000>, <0x2 0x77400000 0x0 0x4000>; reg-names = "nvme", "coproc"; interrupt-parent = <&aic>; interrupts = <AIC_IRQ 590 IRQ_TYPE_LEVEL_HIGH>; mboxes = <&ans>; apple,sart = <&sart>; power-domains = <&ps_ans2>; };
M1 Pro/M1 Max
t6001.dtsi にあります。t6001.dtsi は、M1 Maxです。t6000.dtsi が M1 Pro です。t6000.dtsi は中で t6001.dtsi を include しているだけです。こちらも、ans2、compatible は apple,t8103-asc-xxx" で M1 と同じです。
ans2_mbox: mbox@38f408000 { compatible = "apple,t8103-asc-mailbox"; reg = <0x3 0x8f408000 0x0 0x4000>; interrupt-parent = <&aic>; interrupts = <AIC_IRQ 0 1069 IRQ_TYPE_LEVEL_HIGH>, <AIC_IRQ 0 1070 IRQ_TYPE_LEVEL_HIGH>, <AIC_IRQ 0 1071 IRQ_TYPE_LEVEL_HIGH>, <AIC_IRQ 0 1072 IRQ_TYPE_LEVEL_HIGH>; interrupt-names = "send-empty", "send-not-empty", "recv-empty", "recv-not-empty"; power-domains = <&ps_ans2>; #mbox-cells = <0>; }; sart: sart@393c50000 { compatible = "apple,t6000-sart"; reg = <0x3 0x93c50000 0x0 0x10000>; power-domains = <&ps_ans2>; }; ans2: nvme@393cc0000 { compatible = "apple,t8103-ans-nvme"; reg = <0x3 0x93cc0000 0x0 0x40000>, <0x3 0x8f400000 0x0 0x4000>; reg-names = "nvme", "coproc"; interrupt-parent = <&aic>; interrupts = <AIC_IRQ 0 1613 IRQ_TYPE_LEVEL_HIGH>; mboxes = <&ans2_mbox>; apple,sart = <&sart>; power-domains = <&ps_ans2>; };
実機で確認する
IFIXITの 2021 MacBook Pro Teardown: A Glimpse at a Better Timeline にて、14インチと16インチのMacbook Proが分解されています。
14インチに関しては分解されていて、メインの基板の両面の写真も載っています。その写真によりと、片面にSSDは2個載っていて、両面で4個載っています。また、片面には未実装部分が2か所あります。つまり、8個のSSDが搭載できるようになっています。SSDが載っているのは同じ側で4個がひと塊になっているようです。この写真のSSDは128GBのもので4個で512GBになります。
一方、16インチに関してはメインの基板までの分解されていません。しかしながら、片面にSSDが4個搭載されています。反対側には未実装部分が4か所、合計で8個のSSDが搭載できるようです。これは、14インチと同じになっていると思います。
参考:MegaChips MCDP2920 DisplayPort-to-HDMI Converter が載っています。これは、M1 Pro/M1 Max の Thunderbolt 4のDisplayport => HDMI (コネクタ)に使われています。
まとめ
前回、M1機では、2個のSSDが PCIe Gen4 x1 相当でそれぞれ繋がっていると妄想しました。
今回、M1 Pro/M1 Max機では、8個のSSDが PCIe Gen4 x1 相当でそれぞれ繋がっているのだろうと、妄想できました。
Asahi Linuxのソースコードから M1 と M1 Pro/M1 Max の NVMe 部分は同じで、接続するSSDの数の内部(ハードウェア)で隠蔽しているでは?と思っています。
M1のSSDの性能がWrite(2190.1 MB/s), Read(2676.4 MB/s)に対して、MBP 2021 - SSD Speed Comparison - Please Contribute! によると、Write(4300-7398MB.s), Read(5100-5855 MB/s) になっています。Readの値はそれほどばらつきはありませんが、Writeの値のばらつきは大きいです。512GB < 1TB < 2TB < 4TB < 8TB とサイズが大きくなるほど性能が向上しています。これって、SSD側にあるバッファが大きくなっているからでしょうかね。
ちなみに、PCIe Gen4 x1 の論理最大転送レートは 16Gbps (2GB/s) であるので、8ポートだと、16GB/s まではいきそうです。ReadもWriteもそこまではいっていませんね。