One of the few things that my next smartphone would have to have was some kind of accelerated filesystem encryption, either hardware or software-based. The reason behind this is to have both the security advantages of full disk encryption [1] and I/O performance along with power efficiency we've come to expect from the latest handsets/tablets.

It was not clear to me whether the new OnePlus 2 would be able to meet these requirements, as I could only find some non-conclusive discussions around encryption ([2] and [3]), even though it seemed to be lacking hardware-based encryption as in [4]. What I knew, however, was that the new Snapdragon 808 and 810 SoCs have extended ARMv8 instructions that improve on-the-fly AES encryption/decryption performance ([5] and [6]), so I took the risk and went for the OnePlus 2.

Last month, when I got it, I immediately made some benchmarking before and after encryption. I am finally sharing with you the results of these benchmarks so you can have peace of mind. The tests/results being made/measured are the following:

  • AnTuTu 64 relevant scores;
  • Androbench I/O performance data;
  • Boot time.

The actual phone used was the OnePlus 2 A2003 64GB, with stock OxygenOS 2.1.1 unrooted and untouched, and a total of 17 installed apps (plus 140 system apps). Battery was always between 70% and 85% as I would recharge it to keep it in range. Environment temperature was between 15 and 17 degrees Celcius. I have waited between 30 to 60 minutes between each test, making sure the device had time to reach a stable temperature and prevent premature CPU/GPU throttling for each next test. Moreover, each test was made after a fresh boot to reduce RAM fragmentation, app caching, etc., providing a clean and similar environment across all test instances. Finally, airplane mode was kept enabled.


AnTuTu 64 relevant scores

The AnTuTu (64-bit) app version used was 5.7.1 and the tests were carried with horizontal orientation. In the screenshots presented at the bottom of the page, the "non-verified score" warning can be safely ignored as it was a consequence of having airplane mode enabled, preventing AnTuTu from checking the phone's model authenticity.

Unencrypted Encrypted Difference
Global 61419 62363 +1.5%
Storage I/O 2559 2555 -0.1%
Database I/O 630 620 -1.6%

Androbench I/O performance data

Unencrypted Encrypted Difference
Sequential Read 231.32 MB/s 232.11 MB/s +0.3%
Sequential Write 124.66 MB/s 122.4 MB/s -1.8%
Random Read 5369.62 IOPS 5208.13 IOPS -3.0%
Random Write 3631.0 IOPS 3268.39 IOPS -10.0%
SQLite Insert 616.86 TPS 510.21 TPS -18.0%
SQLite Update 285.55 TPS 276.15 TPS -3.3%
SQLite Delete 299.5 TPS 269.97 TPS -9.9%
Macro Browser 125.0 ms 186.75 ms +49.4%
Macro Market 140.5 ms 133.25 ms -5.2%
Macro Camera 87.0 ms 103.0 ms +18.4%
Macro Camcorder 166.0 ms 202.5 ms +22.0%

Boot time

The boot time was measured as the time elapsed from the moment the finger pressed the power button until the moment the boot screen faded into the launcher. For the encrypted scenario, the boot time is the sum of the time elapsed from the moment the finger pressed the power button until the phone asked for the encryption PIN, plus the time since confirming the PIN until the moment the boot screen faded into the launcher. I also provide the duration of each of the 2 boot phases in the encrypted scenario. The margin of (human) error for the boot time is probably around half a second.

Unencrypted Encrypted Difference
Boot time 33.5 sec 63.5 sec +89.6%

For the encrypted scenario, the phone took 29.0 seconds to reach the PIN dialog and another 34.5 seconds to reach the launcher, after confirming the PIN.


Conclusions

The OnePlus 2 does not have hardware-based encryption as in [4] but rather software-based encryption as in [5]. There is no noticeable performance drop observed visually. Considering the results, the performance drop is there but is relatively low, insignificant or inexistent depending on the use case, unlike with Android 5.0 in the Nexus 6 [7]. The most impacted use cases were database (SQLite) insert operations at 18.0% performance drop, the browser macro test taking 49.4% longer to finish, and the camera/camcorder macro tests taking 18.4%/22% longer to finish, respectively. All other tests had a performance penalty below 10%, with some really unchanged. It should be noted that I didn't not iterate the tests more than once, meaning that some results might have been affected negatively, which also justifies why sequential read is faster when encrypted. Boot time clearly takes long and requires us to input the PIN in the middle of the process, every time. Finally, let me note that these results should be more or less equivalent in other Snapdragon 810 based devices, like the Nexus 6P, and should also be similar in other ARMv8 devices, assuming they are running Android 5.1 as well. Because you like seeing actual screenshots, here they go:

References