Y700 NVMe SSD Performance 

After discovering less than expected performance from the 950 Pro in the Lenovo Y700, looking deeper as to what is going on at a platform level. With Skylake CPU's have DMI 3.0 x4 for communicating with the 100 Series PCH their should be no reason the full bandwidth should be available to be utilized when a PCIe 3.0 x4 SSD is installed in the laptop. In reality what is seen is the performance capped at PCIe 2.0 speeds of ~1600MB/s

 

Skylake CPU – PCH(-LP) Communication Link Characteristics
Aspect DMI 3.0
Applicable Systems Skylake-H/-S/-K
Link Width x4
Transfer Rate per Lane 8 GT/s
Max. Theoretical Bandwidth 3.94 GBps

 

For all practical purposes, DMI 3.0 and PCIe 3.0 are equivalent, and this is important when a PCIe 3.0 x4 SSD is connected to the a Skylake-H/-S/-K system using PCIe lanes from the PCH. Any other peripheral communicating with the CPU at the same time as the PCIe SSD would end up creating a bottleneck at the CPU-PCH link.

Samsung 950 Pro

The Samsung 950 Pro 256GB used in this test is capable of 2200MB/s is a PCIe 3.0 x 4 design.

Installed in the Lenovo Y700 M.2 slot we can see that electrically it is reported as connecting at x4 and 10Gbps to the PCH (Intel 100 Series), perfect this is what we want so why are we only able to get 1600MB/s read out of a device capable of 2200MB/s.

Skylake Platform

The CPU connects to the PCH via DMI 3.0 x 4 wide link, this link is a 40Gbps link and as above the M.2 Slot is also 40Gbps, It is obvious their is a bottleneck between the CPU and the PCH.

I suspect that the upstream DMI link is set to connect at only DMI 2.0 speeds or is set to only 2 lanes. Only Lenovo will know as the setting is not exposed in the BIOS or able to be queried by any software I have found.

Taking the block diagram for the platform the Skylake CPU communicates with the PCH via the DMI 3.0 link, This is where it looks like their is a bottleneck, similar to the OPI link in the Skylake Intel NUC's that were configured to half speed to save power. Intel later released a BIOS update to unlock the PCIe NVMe SSD performance.

Test Platform

Y700 ISK15

Samsung 950 Pro 256GB

Intel I7 6700HQ (DMI 3.0 x 4)

Intel 100 Series PCH (DMI 3.0 x 4)

How to fix this?

Unfortunately only Lenovo can provide a new BIOS that allows the DMI interface to run at full speed. I can understand why they have configured it to half speed as none of their shipping configurations require more than 1600MB/s throughput. Setting the DMI link to 2.0 speeds also would save them on power usage, extending battery life. My laptop spends most if its time plugged into the wall so i would rather have the link operate at full speed. I have asked Lenovo to comment and will update when I receive an answer.

 

Links

http://www.intel.com/content/www/us/en/processors/core/desktop-6th-gen-core-family-datasheet-vol-1.html

http://www.intel.com/content/www/us/en/chipsets/100-series-chipset-datasheet-vol-1.html

Update:

Response from Lenovo was initially encouraging that Engineering where going to look into it, however i received this reply that is less encouraging.

With regards to the issue reported, we have not received any updates from Engineering team and I checked with my supervisor on the issue and was advise we cant be certain when the new BIOS update will be available and what changes will be made as BIOS updates are rolled out based on need and specific to a customer's preference and since this is in regards to a 3rd party hardware, it is highly unlikely.

You can monitor our support website for when the next BIOS update will be available.

Should you have any further inquiries please contact us.

 

 

Update #2

This has been confirmed that the DMI link is set to Gen 2 speeds from de-compiling the BIOS, From the Hidden Advanced menu in the BIOS you can clearly see the DMI link speed settings.

0x782F5 Setting: DMI Max Link Speed, Variable: 0xC10 {05 91 69 0E 6A 0E 44 07 34 12 10 0C 10 10 00 03 00}
0x78306 Option: Auto, Value: 0x0 {09 07 C3 0B 00 00 00}
0x7830D Option: Gen1, Value: 0x1 {09 07 2F 03 00 00 01}
0x78314 Option: Gen2, Value: 0x2 {09 07 30 03 30 00 02}
0x7831B Option: Gen3, Value: 0x3 {09 07 31 03 00 00 03}
0x78322 End of Options {29 02}

I confirmed it is set to Gen2 0x2 by reading the Variable 0xC10 from an EFI Shell, unfortunately it appears to be a signed variable so without the right utility I couldn't change it.

DMI LInk Variable

Why Lenovo engineers simply wont change what is easily accessible via the Hidden Advanced Menu in the BIOS is reason enough to look elsewhere for a laptop.

Setup Utility Forms Extracted from the BIOS

 

UPDATE! SUCCESS!!

Unlocked DMI Link Speed

Steps to unlock to follow.

How to unlock the missing performance