Phison kicked off the transition to PCIe 4.0 for storage in 2019, and dominated the high-end SSD market for over a year with the only available PCIe 4.0 solution. There are now several competing PCIe 4.0 NVMe SSDs and controllers that handily outperform the Phison E16, but Phison has stayed competitive by bringing out a second-generation PCIe 4.0 controller, the E18. Today we're looking at one of many drives built around that controller: the Inland Performance Plus 2TB.

The Inland brand is owned by the parent company of American retailer Micro Center. Most or all Inland-branded SSDs are simply Phison reference designs with little or no customization beyond cosmetics. Inland SSDs are frequently great value options—especially for Micro Center's in-store only deals, but even their online prices tend to be very competitive. Part of the discount comes from their tendency toward shorter warranty periods: the Inland Performance Plus has only a three year warranty despite being a high-end flagship model. Fortunately, the total write endurance rating is the same as competing drives that carry five year warranties, and the SSD hardware itself is identical to other brands selling the same SSD reference design under different heatsinks and labels.

As part of the second wave of PCIe 4.0 SSD controllers, the Phison E18 aims to use substantially all of the performance available from the PCIe 4.0 x4 interface: sequential transfers up to around 7.4 GB/s and random IO up to about 1M IOPS. Hitting that level of performance while staying within M.2 power delivery and thermal dissipation limits required migrating to 12nm FinFET fabrication from the cheaper 28nm widely used by PCIe 3.0 SSD controllers and by the Phison E16. But even so, the Phison E18 can draw more power than the E16 controller because the increase in performance is so large. Competition for the Phison E18 includes in-house controllers used in the latest flagship consumer SSDs from Samsung and Western Digital, newcomer Innogrit's IG5236 Rainier controller, and Silicon Motion's upcoming SM2264 controller.

Phison High-End NVMe SSD Controller Comparsion
  E12 E16 E18
Manufacturing Process 28 nm 12 nm
CPU Cores 2x Cortex R5 3x Cortex R5
Error Correction 3rd Gen LDPC 4th Gen LDPC
DRAM DDR3/4 DDR4 DDR4, LPDDR4
Host Interface PCIe 3.0 x4 PCIe 4.0 x4
NVMe Version NVMe 1.3 NVMe 1.4
NAND Channels,
Interface Speed
8 ch,
667 MT/s
8 ch,
800 MT/s
8 ch,
1600 MT/s
Max Capacity 16 TB 16 TB 16 TB
Sequential Read 3.4 GB/s 5.0 GB/s 7.4 GB/s
Sequential Write 3.2 GB/s 4.4 GB/s 7.0 GB/s
4KB Random Read IOPS 700k 750k 1M IOPS
4KB Random Write IOPS 600k 750k 1M IOPS
Controller Power 2.1 W 2.6 W 3.0 W
Sampling Q2 2018 Q1 2019 Q1 2020
Retail SSD Availability Q4 2018 Q3 2019 Q4 2020

The Inland Performance Plus does not quite hit the theoretical limits of the Phison E18 controller. The 1TB model is clearly handicapped on some performance metrics compared to the 2TB model, but even the latter is only rated for 7GB/s sequential reads and 650-700k IOPS instead of 7.4GB/s and 1M IOPS. This mostly comes down to the Inland Performance Plus and other current E18 drives using 96L TLC NAND with 1200MT/s IO between the NAND and the controller, while the E18 can support up to 1600MT/s IO. A new round of E18-based products will start hitting the market soon using Micron 176L TLC that operates with the higher IO speed and should bring some other performance and efficiency improvements. We expect some of these new drives to be announced at Computex next month.

Inland Performance Plus
SSD Specifications
Capacity 1 TB 2 TB
Form Factor M.2 2280 PCIe 4.0 x4
Controller Phison E18
NAND Flash Micron 96L 3D TLC
Sequential Read (GB/s) 7.0 7.0
Sequential Write (GB/s) 5.5 6.85
Random Read IOPS (4kB) 350k 650k
Random Write IOPS (4kB) 700k 700k
Warranty 3 years
Write Endurance 700 TB
0.6 DWPD
1400 TB
0.6 DWPD
Retail Price (In Store Only) $189.99
(19¢/GB)
$379.99
(19¢/GB)

Like most drives using the Phison E18 controller, the Inland Performance Plus comes with a fairly substantial heatsink installed. The controller package is small enough to share space with a DRAM package and four NAND packages on the front of the PCB, which means there's a lot of heat concentrated in a small area. (The Inland Performance Plus also has DRAM and NAND on the back of the PCB.) PCIe 4.0 has barely started showing up in laptops and using the full performance of a drive like the Inland Performance Plus requires more power than most laptops are able to sink away from their M.2 slots, so it's reasonable to regard this drive as pretty much desktop-only.

 

The Competition

The most important competitors for the Inland Performance Plus are other Phison E18 drives and the current flagship PCIe 4.0 drives from Samsung and Western Digital. We have fresh results in this review for the Samsung 980 PRO, retested with the latest 3B2QGXA7 firmware. We've also included results from some older top of the line drives: the Intel Optane 905P and Samsung 970 PRO (their last consumer NVMe drive to use MLC NAND), and the Silicon Power US70 representing the first wave of PCIe 4.0 drives that used the Phison E16 controller.

WD Black SN850 PCIe 4.0 x4 WD Custom G1 96L TLC
Samsung 980 PRO PCIe 4.0 x4 Samsung Elpis 128L TLC
Silicon Power US70 PCIe 4.0 x4 Phison E16 96L TLC
Intel Optane SSD 905P PCIe 3.0 x4 Intel Custom 3D XPoint G1
Samsung 970 PRO PCIe 3.0 x4 Samsung Phoenix 64L MLC

The rest of the drives included in this review are more mainstream models, mostly PCIe 3.0 drives, some with four-channel controllers instead of the usual eight for the high-end, and even a few with QLC NAND. This includes the Inland Premium, which is based on the Phison E12S and TLC NAND.

Inland Premium PCIe 3.0 x4 Phison E12S 96L TLC
SK hynix Gold P31 PCIe 3.0 x4 SK hynix Custom (4ch) 128L TLC
Samsung 970 EVO Plus PCIe 3.0 x4 Samsung Phoenix 92L TLC
WD Black SN750 PCIe 3.0 x4 WD Custom G1 64L TLC
HP EX950 PCIe 3.0 x4 SM2262EN 64L TLC
Kingston KC2500 PCIe 3.0 x4 SM2262EN 96L TLC
Intel SSD 670p PCIe 3.0 x4 SM2265 (4ch) 144L QLC
ADATA Gammix S50 Lite PCIe 4.0 x4 SM2267 (4ch) 96L TLC
Corsair MP600 CORE PCIe 4.0 x4 Phison E16 96L QLC
Trace Tests: AnandTech Storage Bench and PCMark 10
POST A COMMENT

118 Comments

View All Comments

  • GeoffreyA - Thursday, May 20, 2021 - link

    "templates can do some crazy stuff. Looking up SFINAE will quickly take you down the rabbit
    hole"

    I gave it a try and, Great Scott, it's already looking like Mad Hatter territory. Will take a while to decipher all that. Even "using" and "auto" are starting to look puzzling.

    "I always used a few typedef"

    typedefs were a must to combat all those colons and endless right angle brackets.
    Reply
  • mode_13h - Thursday, May 20, 2021 - link

    > > move-constructors"

    > I suppose those are the counterparts of copy constructors
    > for an object that's about to sink into oblivion.

    This touches on something very interesting about C++, which is that certain operations on objects have well-specified semantics and the compiler is allowed to make substitutions, on that basis. This is very un- C-like, where the compiler only calls the functions you tell it to. Sure, it can optimize *out* some functions, but there's never a case where it just decides to call something different (but semantically equivalent) to what you coded.

    A move constructor (or move assignment) is allowed to assume that the only subsequent operation on the original object is destruction. So, if an existing object owns some heap-allocated memory, it can be transferred to the new object. However, it's not required to do so -- copying the data is also valid. In any case, the original object must be left in some state that still allows its destructor to successfully execute.
    Reply
  • GeoffreyA - Thursday, May 20, 2021 - link

    "the original object must be left in some state that still allows its destructor to successfully execute"

    I think I'd copy the pointers or handles over and set them to null in the original object. That ought to do it. Let's hope they don't use move constructors when they start "copying" people or things. Might be painful.
    Reply
  • mode_13h - Friday, May 21, 2021 - link

    > I think I'd copy the pointers or handles over and set them to null in the original object.

    Exactly. Transfer ownership to the new object and set the original to it empty state. That's the typical approach. And, for any data members that have their own move constructors, you invoke those.

    > Let's hope they don't use move constructors when they start "copying" people or things. Might be painful.

    Kind of like the Star Trek "transporter", though. Getting back into the familiar realm of metaphysics, I'd never send myself through one. I believe you'd die and simply create a copy who thinks they're you.
    Reply
  • GeoffreyA - Sunday, May 23, 2021 - link

    I think so too and don't like the idea of copy + destroy == teleport. The "clone think it's me" motif brings up moral questions. If I were cloned, who is the real me? Certainly, the original; but from the clone's point of view, he's the main fellow and is out to prove it. I suspect cloning hints at a breaking down of our everyday notion of self as unique instance. Three Eiffel Towers aren't a problem but would be a strange sight.

    I feel this whole thing hints at something deeper in reality. Conceivably, "move" might be impossible to implement at some primitive level. Perhaps all moves, in the universe, were implemented as copy + delete (or reassigning pointers). Even the flow of time could have been done this way, constantly copying, with changes, and throwing away the old. Taken further, I reckon that "move" could be a high-level concept; and at some pre-spacetime level, there's no location/locality.
    Reply
  • mode_13h - Sunday, May 23, 2021 - link

    > I feel this whole thing hints at something deeper in reality

    I'm not qualified to comment on that, but it reminds me of the FSA theory of spacetime.

    Also, reminds me of the recent discovery that quantum leaps aren't instantaneous, as previously thought. I'm pretty sure I didn't even know they were supposed to be instantaneous.
    Reply
  • GeoffreyA - Sunday, May 23, 2021 - link

    I remember reading about that, not too long ago, and being pleasantly surprised that there was some touch of determinism to it as well. That was a revelation.

    "instantaneous, as previously thought"

    Not too sure about quantum leaps but think that comes from collapse of the wave function, which is supposedly an instantaneous, non-local process. Some interpretations reject collapse though.
    Reply
  • GeoffreyA - Monday, May 17, 2021 - link

    I am pre-C++11 and out of touch with programming in general, sadly. And this may seem madness but I'm still using VC++ 6.0, during those rare times I touch a bit of code.

    I see C++ as a beautiful, potent language (along with the STL), despite its messiness. Its data abstraction and hiding mechanisms offer real advances over C. But a tincture of the latter's philosophy will add much to any C++ program. And I reckon that templates are where its real power lies. I mean, the idea of some function or iterator knowing nothing about some object, yet being able to operate on it. Some QuickSort could be sorting something it hasn't got a clue about, yet works because the objects defined the comparison operators. I've felt there's something strangely haunting about some of these mechanisms in C++, especially templates and virtual functions, as if they bore some elusive analogy to the mechanisms underlying reality. Who knows?
    Reply
  • mode_13h - Tuesday, May 18, 2021 - link

    > I'm still using VC++ 6.0

    OMG. Do yourself a favor and check out MS Visual Studio Community Edition.

    https://visualstudio.microsoft.com/vs/community/

    I don't have any experience with it, as I use GCC (and now Clang) directly, but I'm betting you'll never go back to VC++ 6.0, after you try it.

    > I am pre-C++11

    https://en.cppreference.com/w/

    It actually has references for both C and C++. MSDN now has all their C & C++ language + standard library references online, too.

    However, when I want to write something simple, I usually reach for Python. It's not the simple language you could learn in an afternoon, like it was 2 decades ago, but you can quickly pick up enough to be off and running in very little time, indeed.
    Reply
  • GeoffreyA - Wednesday, May 19, 2021 - link

    Much obliged!

    I actually tried VC++ 2010 some years ago, the Express version. Heard of the Community Edition too, and thought it was just another Express; but looking at it now, I see that's not the case. Who knew MS had got so generous? Well, I'm excited and will certainly give it a try when I can. Hopefully, import or recreate my 6.0 projects. And thanks for that language reference as well. I had always overlooked it and relied on the MSDN docs. It looks good. (Funny enough, I see that C++11 added an array<T, n> class. I remember I wrote my own long ago and the interface turns out to be roughly the same as that one.)
    Reply

Log in

Don't have an account? Sign up now