Vengineerの戯言

人生は短いけど、長いです。人生を楽しみましょう!

Apple M1 Pro/M1 Max機のSSDについて

はじめに

Apple Macbook Pro 14インチ/16インチに搭載されている M1 Pro/M1 Max の SSD(NAND)について、妄想しました。

Apple M1機のSSDについては、下記のように今年(2021年)2月23日のブログに書きました。

vengineer.hatenablog.com

M1機では、2個のSSD(NAND)が搭載されています。上記のブログでの結論は、M1とSSDの接続は PCIe Gen4 x1 (1 lane)になっているのかな?ということです。

M1 の die shot を振り返る

下記は、Apple が公開している M1 の die shot です。説明のために引用します。die の左下の部分(黄緑の点線で囲った部分)がSERDESがある部分です。

f:id:Vengineer:20211123084639p:plain

その部分を拡大し、180度回転後、コメントを追加したのが下図です。右側に Thunderbolt 4 が 3 ポート、その隣に、PCIe Gen4 が 3 ポート、その隣に、NVMe が 2 ポート (実際はPCIe Gen4 が 2ポート)

f:id:Vengineer:20211123085327p:plain

M1 Pro/M1 Max の die shot を振り返る

下記は、Apple が公開している M1 Pro の die shot です。説明のために引用します。die の 上の部分がどうやら SERDES があるのでこの部分に PCIe がありそうです。

f:id:Vengineer:20211123084857p:plain

その右上の部分を拡大し、何が載っているかをコメントしたのが下記の図です。

f:id:Vengineer:20211123083912p:plain

上記ののも右側には、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もそこまではいっていませんね。