Mixed IO Performance

For details on our mixed IO tests, please see the overview of our 2021 Consumer SSD Benchmark Suite.

Mixed IO Performance
Mixed Random IO Throughput Power Efficiency
Mixed Sequential IO Throughput Power Efficiency

The Inland Performance Plus with the Phison E18 controller sets a new record for performance on our mixed sequential IO test, and it provides pretty good power efficiency on that test. It has somewhat disappointing performance on the mixed random IO test, with a few Gen3 TLC drives delivering better performance, and most of the 8-channel TLC drives delivering better efficiency.

Mixed Random IO
Mixed Sequential IO

On the sequential IO test, the Inland Performance Plus is a bit slow to start when the workload is very read-heavy, but quickly ramps up to about 6GB/s. Like many drives, performance is low to begin with as these drives aren't exactly optimized for juggling several parallel streams of sequential reads. Once the workload has shifted to include a significant amount of writes, caching makes things easier for the drives to manage and performance tends to improve. The E18 controller makes that transition early and with as big a performance gain as any drive, and things hold relatively steady around 6GB/s through the rest of the test.

On the random IO test, the Performance Plus is less consistent. After the typical initial performance drop that comes from adding the first bit of writes to the mix, the Performance Plus generally keeps slowing down but there's quite a bit of variability. The higher power consumption during phases where performance is lower indicates that there's background work to clean up the SLC cache interfering with benchmark performance. Things settle down during the last third of the test.

 

Power Management Features

Real-world client storage workloads leave SSDs idle most of the time, so the active power measurements presented earlier in this review only account for a small part of what determines a drive's suitability for battery-powered use. Especially under light use, the power efficiency of a SSD is determined mostly be how well it can save power when idle.

For many NVMe SSDs, the closely related matter of thermal management can also be important. M.2 SSDs can concentrate a lot of power in a very small space. They may also be used in locations with high ambient temperatures and poor cooling, such as tucked under a GPU on a desktop motherboard, or in a poorly-ventilated notebook.

Inland Performance Plus 2TB
NVMe Power and Thermal Management Features
Controller Phison E18
Firmware EIFM21.1
NVMe
Version
Feature Status
1.0 Number of operational (active) power states 3
1.1 Number of non-operational (idle) power states 2
Autonomous Power State Transition (APST) Supported
1.2 Warning Temperature 70 °C
Critical Temperature 110 °C
1.3 Host Controlled Thermal Management Supported
 Non-Operational Power State Permissive Mode Supported

The Phison E18 as used in the Inland Performance Plus supports the full range of NVMe power and thermal management features, but with the somewhat implausible 110 °C critical temperature threshold. The deepest idle power state also claims only a 30% reduction in power at the cost of much higher entry and exit latencies. Fortunately, as shown below the lowest idle power state saves a lot more power than indicated by this firmware information.

Inland Performance Plus 2TB
NVMe Power States
Controller Phison E18
Firmware EIFM21.1
Power
State
Maximum
Power
Active/Idle Entry
Latency
Exit
Latency
PS 0 8.8 W Active - -
PS 1 7.1 W Active - -
PS 2 5.2 W Active - -
PS 3 62 mW Idle 2 ms 2 ms
PS 4 44 mW Idle 25 ms 25 ms

Note that the above tables reflect only the information provided by the drive to the OS. The power and latency numbers are often very conservative estimates, but they are what the OS uses to determine which idle states to use and how long to wait before dropping to a deeper idle state.

Idle Power Measurement

SATA SSDs are tested with SATA link power management disabled to measure their active idle power draw, and with it enabled for the deeper idle power consumption score and the idle wake-up latency test. Our testbed, like any ordinary desktop system, cannot trigger the deepest DevSleep idle state.

Idle power management for NVMe SSDs is far more complicated than for SATA SSDs. NVMe SSDs can support several different idle power states, and through the Autonomous Power State Transition (APST) feature the operating system can set a drive's policy for when to drop down to a lower power state. There is typically a tradeoff in that lower-power states take longer to enter and wake up from, so the choice about what power states to use may differ for desktop and notebooks, and depending on which NVMe driver is in use. Additionally, there are multiple degrees of PCIe link power savings possible through Active State Power Management (APSM).

We report three idle power measurements. Active idle is representative of a typical desktop, where none of the advanced PCIe link or NVMe power saving features are enabled and the drive is immediately ready to process new commands. Our Desktop Idle number represents what can usually be expected from a desktop system that is configured to enable SATA link power management, PCIe ASPM and NVMe APST, but where the lowest PCIe L1.2 link power states are not available. The Laptop Idle number represents the maximum power savings possible with all the NVMe and PCIe power management features in use—usually the default for a battery-powered system but rarely achievable on a desktop even after changing BIOS and OS settings. Since we don't have a way to enable SATA DevSleep on any of our testbeds, SATA drives are omitted from the Laptop Idle charts.

Idle Power Consumption - No PMIdle Power Consumption - DesktopIdle Power Consumption - Laptop

The active idle power from the E18 drive is well under 1W, a clear improvement over other Gen4 drives and many of the top-performing Gen3 drives (note: all Gen4 drives are operating at Gen3 speeds during this test, because we can't get idle power management working properly on our Gen4 testbeds; on a Gen4 system we expect active idle power to be a bit higher). The desktop idle almost exactly matches what the drive claims, and lowest laptop idle power is great at just 3mW.

Unfortunately, wake-up times are a bit slow: wake-up from the desktop idle state is already 44ms and wake-up from the laptop idle state is a whopping 371ms, which is enough to cause noticeable delays if this power state is used frequently by the OS.

Idle Wake-Up Latency

Advanced Synthetic Tests: Block Sizes and Cache Size Effects Conclusion
Comments Locked

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.
  • 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.
  • 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.
  • 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.
  • 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.
  • 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.
  • 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.
  • 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?
  • 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.
  • 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.)

Log in

Don't have an account? Sign up now