IOCREST M.2 HBA In-Depth Review

Testing IOCREST HBA against Dell PERC H310

IOCREST M.2 HBA In-Depth Review

Since the last write up, I reached out to IOCREST to request a review unit. They are kind enough to send me one for this in-depth review for free. I was also given the liberty to write exactly what I see, and they do not have any input in this article.

This is the follow-up review on the IOCREST M.2 PCIe HBA I bought couple of weeks ago. In this review, I will be testing this HBA for throughput and performance penalty when used in a RAID configuration, should there be any. Also, I will be comparing this HBA to chipset SATA controllers, as well as an enterprise grade HBA - Dell PERC H310.

Test Bench

CPU: Ryzen 9 3900X

Motherboard: Gigabyte X570 Aorus Master

RAM: G.Skill DDR4-3200 CL16 16 GB x 2

OS Drive: Kingston K3000 PCIe 4.0 1 TB

HBA Details:

This test was conducted on Windows 10 LTSC. Driver is needed for Windows platforms, you can download it here.

As mentioned in the previous blog post, this HBA uses JMB585 chipset to provide five SATA ports via PCIe 3.0x2, then one of these five ports is multiplied by the JMB575 chipset for additional four SATA ports, for a grand total of eight.

Although SATA interface is rated for 6Gbps, the real world performance is closer to 600 MB/s, instead of the face value which is 750 MB/s. This is the reason why many high-end SATA SSDs only goes up to 560 MB/s, such as the Samsung 870 EVO.

So, if this HBA can truly utilize the PCIe 3.0x2 bandwidth, which is 2 GB/s, then it is safe to assume that for all four drives that are connected to the JMB585 chipset, if accessed at the same time, they would each get one fifth of 2 GB/s of bandwidth, which is 400 MB/s, and for the rest four drives, they would get about one fourth of 400 MB/s, which equals 100 MB/s.

However, if they are not accessed at the same time, rather than one at a time, I’d expect the drive can get up to the full rated speed without any issues. Thus, if the first four ports that are not in use, the last four ports should give a combined performance similar to a normal SATA 6Gbps port.

In the following test, I will be referring to the four ports directly connected to the JMB585 as Channel 1, or Ch1, and the four ports multiplied by the JMB575 as Channel 2, or Ch2.

Please note that all SSDs used in this test are USED. They will not perform as good as new ones, but for this test I think they will be just fine.

Tests:

Methodology:

I will be using AS SSD Benchmark 2.0 for this review. Single disk tests are performed with 5GB dataset, while RAID tests are performed with 10GB dataset. Other settings are left with default configuration. Each test will be performed three times, transfer speed is recorded with the average of the three.

Validation:

In Windows, go to “Disk Management”, then right click on one of the drives, select “Properties”. In the new pop-up window, go to “Hardware” tab. You will find all the drives attached are shown here:

Pay attention to the “Location” line under “Device Properties” section. Since JMB585 provides 5 SATA ports, so there will be 5 SATA buses. Depending on your own configuration, the starting bus number could vary. In my example, the bus number starts from 0, ends with 4. Then, JMB575 will multiply bus 4 (the fifth SATA port), so there will be four “targets” under bus 4, starts from 0 and ends with 3, like the example below.

Configuration A (Single Disk):

This configuration is used to test if all the drives can run up to their rated speed individually. Performance baseline is recorded with on-board chipset SATA controller, then compared with the score ran by the IOCREST HBA.

  1. Crucial MX500 500 GB x2 at Ch1.P1 and Ch1.P2
  2. Crucial MX500 500 GB x4 at Ch2.P1-P4
Ch1.P1 Ch1.P2 Ch2.P1 Ch2.P2 Ch2.P3 Ch2.P4
IOCREST Read 529.88 528.70 513.64 493.58 513.6 513.71
IOCREST Write 485.69 484.77 428.23 427.24 427.96 428.21
- - - - - - -
Chipset Read 521.33
Chipset Write 456.54

From the test result, we can see that IOCREST HBA actually performs a bit better than the on-board chipset SATA controller. Although not significant for the write speed since it is only less than 2% higher, the read speed is 6% higher.

However, as suspected, the JMB575 multiplied SATA ports do have performance penalties. On average, the multiplied ports are 3% slower at reading, and 12% slower at writing, compared to the JMB585 native ports.

The performance gap is much smaller when compared to the chipset SATA controller. The multiplied ports are only less than 2% slower at reading, and about 6.5% slower at writing.

Configuration B (RAID with Ch2):

This configuration is used to test if the HBA controller can dynamically allocate bandwidth to satisfy the 2nd channel (Ch2) that’s multiplied by JMB575.

  1. Crucial MX500 500 GB x4 at Ch2.P1-P4, Windows Striped Array

What I am expecting from this test, based on the information IOCREST provided, is one SATA 6Gbps port’s bandwidth shared by all four disks.

Single (avg. of four ports) 4x RAID 0 (Striped)
Ch2 Read 508.63 525.84
Ch2 Write 427.91 432.05

As we can see, these numbers are very similar as they are less than 1% in difference, that’s well within margin of error. Nonetheless, it is indicative that the four ports multiplied by JMB575 can only use one SATA 6Gbps bandwidth.

Configuration C (RAID with Ch1):

This configuration is used to test if the HBA controller will run at its full speed by only using native ports (Ch1) from the JMB585 chipset.

  1. Crucial MX500 500 GB x4 at Ch1.P1-P4, Windows Striped Array
Single (avg.) 4x RAID 0 (Striped)
Ch1 Read 529.29 1450.17
Ch1 Write 485.23 1458.89

In a perfect world, RAID 0 should scale linearly with amount of disks in the array. However, based on the test result, we can see that the JMB585 did not scale that way. With four disks in RAID 0, it only provided 2.74x of read performance, and 3x of write performance.

Since the read and write performances are near identical, it is also indicative that this is limited by the interface bandwidth, since the HBA itself is only capable of PCIe 3.0 x2 speed, which comes out to about to 2 GB/s. If we subtract the Configuration B results from 2 GB/s, we’d get about 1500 MB/s left. Taking data overheads into account, the result is as good as this HBA is going to get.

Configuration D (PERC HBA vs IOCREST HBA):

In this test, we will be putting the IOCREST results up against a real HBA, which is the Dell PERC H310. This HBA is based on LSI 2008 chipset, running in PCIe 2.0 x8 interface which provides 4GB/s of bandwidth. This particular PERC HBA has been flashed to IT mode.

  1. Crucial MX500 500 GB x2 at Ch1.P1-P2, single
  2. Crucial MX500 500 GB x4 at Ch2.P1-P4, single
Avg. Read (all ports) Avg. Write (all ports)
IOCREST HBA 515.51 447.02
Chipset 521.33 456.54
PERC H310 534.88 482.12

With proper enterprise grade HBA chipset and interface bandwidth budget, we can see that the Dell PERC H310 outperforms both onboard chipset and the IOCREST JMB585 chipset.

4x RAID 0 Read 4x RAID 0 Write
IOCREST HBA 1450.17 1458.89
PERC H310 1858.60 1669.62

When configured to four-disk RAID 0, the PERC H310 gets very close to linear scaling, providing about 3.5x of both read and write performance uplift.

Conclusion

Based on all the test data, I would say that the IOCREST HBA isn’t a real replacement for demanding workloads, as it shouldn’t be. For that, a real HBA like the Dell PERC H310 I tested above can provide much better performance. But, these results are tested with arguably one of the best consumer SATA SSDs, if you are just running HDDs, I doubt there’s any difference to be seen.

Furthermore, if you are building a home NAS, the motherboard PCIe slots will often be the constraint, rather than the HBA performance itself. The PERC uses PCIe 2.0 x8, meaning, unless your motherboard has two PCIe slots connected to the CPU, and supports x16 slot bifurcation to 2x8, you will have to use the x16 slot to get the full bandwidth the PERC provides. Also, the PERC gets hot in normal PC cases, so one has to consider putting a fan right next to it to guarantee stable operation.

If you are also running a GPU for something like Plex transcoding, there goes another PCIe slot. How about another 10G NIC? In this situation, I think the IOCREST HBA is a reasonable performant substitution for a PCIe based HBA just to save a PCIe slot for some other devices, even if it will not perform as good. What else do you need those extra M.2 slots that motherboard manufacturers have gone crazy for?

In all, I am satisfied with the performance trade-off to save a PCIe slot. I think this is a brilliant product, and I hope the next iteration of this product line will bring true HBA-like performance, without the use of a multiplier chip.

You can purchase this IOCREST HBA here on AliExpress.