Well in some ways X300/B300 (or X400/B400) is higher performance in that it allows two PCIe 3.0 x4 NVMe SSDs while allowing PCIe 3.0 x 16. (X300 (X400?) can also allow three PCIe 3.0 x4 NVMe SSDs if the PCIe 3.0 x 16 is split into two PCIe 3.0 x 8 with one used by a PCIe 3.0 x 4 NVMe SSD)
In contrast, X370 can only allow two PCIe 3.0 x 4 NVMe SSDs if PCIe 3.0 x 16 is split up into two PCIe 3.0 x 8 (with one of the PCIe 3.0 x 8 used by the PCIe 3.0 x 4 NVMe SSD).
I'm a little confused.
My understanding was Ryzen has 24 cpu pci-e 3.0 lanes.
On x370/x470 16x goes to one more more GPU slots, 4x goes to a 3.0 M.2 slot and the remaining 4x feed the chipset which typically shows up as some additional 3.1 USB ports, 1x PCI-e slots, SATA controller and often a M.2 PCI-e 2.0 slot.
But Ryzen is also a SoC design, having at least one onboard USB controller and SATA controller which are directly attached to the CPU, possibly some other things I'm forgetting.
The only board with two 3.0 m.2 slots I'm aware of is the crosshair 7, which gets the second slot by taking bandwidth from one of the gpu slots. So its 8x GPU, 4x GPU and 4x for second M.2 slot.
The SFF chipsets don't have any extra bandwidth, but I guess you're just saying that since they have no chipset the chipset lanes can now be used as an exclusive M.2 slot.
I saw today there's cards out though that combined with bifrucation support can slice up the 16x slot into 4 m.2 ports. There's also ones that use a bridge chip that don't require bifrucation.
-----------------
Anyway, the main reason I haven't updated to Ryzen yet is the chipset doesn't do IOMMU group separation. I was hoping they would fix it with the 400 series but it looks like all they really did was die shrink the 300 series and the issue remains.
I'm sort of interesting in this topic because if they threw the chipset away and just hooked 1x pci-e slots directly through the DMI (or whatever AMD calls them) interface the groups would work fine.