Linux Is Already In Good Shape For The New Features Of Intel Gen11 Graphics & Icelake
Due to the very different driver model from Windows where the Linux drivers are (generally) open-source and merged into the monolithic kernel rather than being distributed by the vendor's website as a simple download, for seeing same-day/out-of-the-box Linux hardware support requires getting the support generally merged months prior to launch in order to fit into the Linux kernel release cadence, seeing the changes to the kernel and related components like the GCC compiler work their way into packaged Linux distributions, and similar challenges.
Intel's Open-Source Technology Center has been doing a stellar job at punctually merging new hardware support prior to launch and that everything jives with the release cadence of the Linux kernel and key Linux distribution releases. There's been a few gotchas recently with some of the Skylake/Kabylake refreshes with simply missing out on new PCI IDs, but generally speaking their rhythm has been spot-on going back the past decade or longer. With Icelake processors (Sunny Cove and Gen11 graphics), they are particularly in good standing already due to the repeated delays in getting the 10nm process up to scratch, which is allowing for the software side to get in quite good shape and widely available prior to launch.
In going back through the slides from yesterday's Intel event, here is a quick look at where the various features/improvements are currently at for Linux based upon my past monitoring. In fact, nearly all of the features presented yesterday were already covered individually on Phoronix in more primitive form after reviewing the patches as they materialized... Primarily around Gen11 graphics and Sunny Cove cores, but also some of their other mentioned next-gen wares around FPGAs and memory/storage.
- The first Intel Icelake open-source patches we picked up more than a year ago... In October of last year was when they posted GFNI / Galois Field NI support for the GNU Compiler Collection (GCC). The Galois support has long since merged into GCC for helping deep learning workloads. In 2017 were several compiler-related patches for Icelake, including the actual -march=icelake target.
- Prior to Icelake is the very soon Cascade Lake. The initial Cascade Lake bits came after the first Icelake Linux patches arrived. But queued already is the Cascade Lake target for LLVM/Clang and the GCC compiler for targeting the instruction set extensions offered by these upcoming Xeon processors.
- VNNI support that Cascade Lake is pulling in from Icelake is already there. It was a year ago Intel landed VNNI support in GCC and LLVM/Clang for the Vector Neural Network Instructions. So with the stable compiler releases of 2018, VNNI is there.
- On the matter of BFLOAT16 for Cooper Lake, we haven't seen patches yet but then again the ISA specification hasn't even been finalized yet.
- For the SHA Extensions and with Sunny Cove, that's been supported since 2016 by the compilers with originally those extensions destined for Cannonlake.
- Since November 2017 has been the kernel code for User Mode Instruction Prevention for preventing certain instructions from executing if the ring level is greater than zero.
- Since Linux 4.10 at the end of 2016 has been the kernel bits around AVX512 IFMA and VBMI. The compiler side bits were added early this year.
- For supporting larger memory capacities, Intel has been working on 5-level paging support to expand the address space. The 5-level paging kernel support merged last November.
- Multi-Key Total Memory Encryption (MK-TME) is also supported by Sunny Cove. That Linux kernel work has been out since earlier this year.
- For Software Guard Extensions (SGX) / security enclaves, the GCC code was merged while the kernel bits are still being revised and should be merging soon.
- In terms of the general Gen11 graphics support, Intel began publishing their open-source enablement work back in January and have continued since. It started with getting the display support in order for their DRM/KMS driver and has continued for bringing up the 3D engine and other blocks. With the latest Linux kernel and Mesa releases, the support appears to be in good order and working. Granted, we'll surely see more optimizations/improvements over the months ahead as the support matures still in plenty of time before the hardware's availability.
- Coarse pixel shading was brought up as a form of variable shading rate control for up to ~1.3x performance improvements for real-world game tests. The coarse pixel shading support will need to be exposed via a Vulkan variable shading rate control extension, which I believe the working group already has been working on. I haven't seen any Intel ANV Vulkan driver patches yet for it, but presumably will come in time. Though this feature will be contingent upon Vulkan Linux games making use of the extension.
- For compute support out of Gen11, that's via Intel's new-ish OpenCL NEO project.
- In order to tap the improved media capabilities with the Gen11 hardware, there is the Intel VA-API driver that continues to be developed. But there is some discussion by developers that when transitioning to the new Iris Gallium3D driver they may end up switching to the Gallium-based VDPAU and VA-API state trackers rather than their independent code-bases.
- Gen11 graphics do support HDR displays. Intel has posted various patches for High Dynamic Range support in their DRM driver. That work is still experimental as of now but various bits are getting into place so likely in the months ahead before Icelake shipping we'll see the support squared away. HDR support on Linux isn't an Intel-specific problem but the general desktop plumbing is still adapting and other user-space software changes needed. Long story short, Intel's working on it.
- For supporting higher resolution displays with Gen11, Intel has been working on Display Stream Compression support and related functionality like DisplayPort Forward Error Correction (DP FEC). This work has been happening fairly recent but appears to be shaping up well.
- Very exciting with Gen11 graphics is supporting VESA Adaptive-Sync! I haven't seen any Intel-specific driver work yet post for Adaptive-Sync, but presumably happening soon. Only with the upcoming Linux 4.21 kernel is there even the VRR/Adaptive-Sync DRM core properties set to be merged. This is what had been holding back AMD's FreeSync/Adaptive-Sync support for Linux is wanting to come up with the common/standardized properties that other driver vendors could agree to. So it's not much of a stretch for seeing Intel Adaptive-Sync support on Linux in time for the hardware shipping.
- On the Stratix 10 FPGA front, they've pushed various bits and with the upcoming Linux 4.21 kernel will be some new Stratix 10 drivers though I don't follow the FPGA space close enough to know the current support state with the mainline code.
- The upcoming "Tremont" Atom cores are also in good standing. Going back to April there were the Clang target added and over the summer new instructions around movdiri / movdir64b / user wait were added on the kernel side.
- On the Intel storage front with Optane DC persistent memory, the Linux support should be in good standing. There's been the "DAX" work going on for the kernel block code and the key Linux file-systems and related work happening for quite a while already and given Linux and Intel DC storage going hand-in-hand, the support should be all in great shape.
So long story short, the Linux support for Intel's next-gen hardware should be in good shape for their respective launches. With many of the kernel bits having been in place for months, those changes are hitting distributions and even for non-rolling-release distros they should be in shape for the early 2019 releases. Many of the new instructions on the compiler side are supported by GCC 8 / Clang 7 while the rest will be in GCC 9 / Clang 8.