Search
Close this search box.

Windows 10 IoT Enterprise ARM64 on i.MX93: Benchmarking

Share:

Windows 10 IoT Enterprise ARM64 on i.MX93: Unboxing & Benchmark Test

When it comes to choosing an OS for your embedded system, performance matters.

There are many variations of Windows IoT products. With similar-sounding names, it’s easy to think they are closely related.

However, some have fundamental differences in the way they function.

For instance, how does Windows 10 IoT Enterprise ARM64 on i.MX93 stack up against Linux in benchmarks?

This analysis puts Windows IoT Enterprise to the test against Linux on the same i.MX93 hardware to compare performance. 

The results reveal when Windows IoT makes sense and where Linux still shines.

Windows 10 IoT Enterprise Arm64 - blog banner

What is Windows 10 IoT Enterprise for ARM64?

Windows 10 IoT Enterprise is the replacement for Windows Embedded Compact 2013 or Windows CE, which became end of life in October 2023.

It was released in 2015 alongside Windows 10 IoT Core as a more complete version and remains the sole remaining Windows embedded solution with support from Microsoft, after Windows 10 IoT Core became end-of-line in Nov 2020.

The latest LTSC (Long Term Support Contract) release of Windows 10 IoT Enterprise has a stated support time of 2032!

How does Windows 10 IoT Enterprise ARM64 differ from other versions of Windows 10?

Windows 10 IoT Core is an ARM-based version of Windows 10 that is more akin to Windows Embedded Compact or Windows CE. 

However, Windows 10 IoT Enterprise ARM64 – built for ARM64 embedded systems, such as the NXP iMX8 and iMX9x series of embedded processors – is the full Windows 10 experience.

Running Windows 10 IoT Enterprise ARM64 is equivalent to running Windows on a desktop or laptop; all development / management tools used on a normal Windows setup can also be used for ARM64 on the i.MX93 or iMX8 systems.

 

This analysis focuses on the i.MX93 device. This is a low-cost, low-power yet high performance dual-core ARM CPU in the NXP portfolio. 

The System-on-Chip device offers a rich set of peripherals targeting automotive, industrial, and consumer IoT market segments, and can run in a fanless environment without the need for active cooling, unlike most x86 CPUs.

Using this fully-featured OS distribution can massively speed up the development time for your applications, as it can all be done from your normal Windows’ development machine.

Since 1996, when Microsoft released their first embedded solution (Windows Embedded CE 1.0), Microsoft has had a multitude of options for an embedded Windows solution, with Windows IoT Enterprise being the latest, and by far the most feature-rich.

What is the i.MX93?

The i.MX93 is the latest in a long line of NXP i.MX chips. It features 2 Cortex A55 and 1 Cortex M33 processors, a dedicated 2D graphics chip and 2 1GB Ethernets.

NXP i.MX93 System Structure

i.MX3 table

The BSP (Board Support Package, meaning the structure of the firmware file) for the Windows IoT Enterprise for ARM64 system is split into two parts:

  • the ARM64 specific firmware
  • and the generic Windows binary and drivers

The ARM64 firmware is compiled into a FIT image format comprised of a U-Boot SPL, U-Boot image, UEFI FIT image and any trusted/secure firmware blobs.

The boot structure is shown below:

UEFI Flowchart, Boot Structure
ARM64 firmware boot structure

For custom hardware, the modifications start in U-Boot. This is performed in the same way that you would customise U-Boot for a Linux solution, with DTS and configuration file changes.

U-Boot is mainly used to transition the bootloader over to UEFI, where most of the hardware drivers are stored, so it will be a very familiar workflow for Linux BSP engineers.

The UEFI used is a modified version of Project MU, a project from Microsoft to make UEFI development more collaborative and maintainable. NXP has added some silicon-specific code, and then configuration files for all of their supported hardware.

Customising the UEFI code

To customise the UEFI code, you will need to edit ACPI tables for each of the hardware components (UART, Ethernet, USB, etc.) as well as some configuration files. The UEFI is what boots into Windows 10 IoT Enterprise.

Since all board-specific customisation is done in the ARM64 bootloader, a combination of U-Boot and UEFI, any Windows development you do for your application can be transferred from the i.MX93 EVK straight to your custom hardware, with only the operating system and bootloader needing to be ported by device builders (something we here at ByteSnap have expertise in).

For more information on customising the UEFI code with Azure IoT Edge, please refer to the user guide at https://aka.ms/nxpiot.

Windows drivers

The Windows drivers are built using Visual Studio Code 2019 with the Windows development kit extensions. The drivers are then combined with the latest Windows 10 IoT Enterprise LTSC binary.
There is no board-specific configuration that needs to go along with this, apart from any Windows device drivers you may need to add for additional hardware support.

Windows 10 IoT Enterprise ARM64 on the i.MX93 - Compatibility

CPP Executables

To test how easy it is to write applications for Windows 10 IoT Enterprise ARM64 on the i.MX93, I loaded up Visual Studios 2019 and compiled one of the template applications for x86 on my Windows machine.

I downloaded the latest Visual Studio redistribution packages for x86 and installed them onto the i.MX93 running Windows 10 IoT Enterprise ARM64.

After this, I was able to run the x86 template application complied on my Windows machine on my ARM64 i.MX93 target, no other configuration was needed.

This is because x86 applications are run though the WOW64 x86 emulator, which allows 32-bit applications to be run painlessly on 64-bit systems.

Running x86 apps takes a slight performance hit, as the emulation layer has to covert the 32-bit code into 64-bit. Therefore, for the best performance, it would be ideal to compile your application for ARM64.

Bear in mind that many applications don’t need this extra performance; for developments where applications can’t be recompiled due to legacy issues, this step wouldn’t be required.

Windows 10 Enterprise
x84
Windows 10 IoT Enterprise
ARM64
Windows 11 IoT Enterprise
ARM64 (future release)
X86
X
X
X
ARM64
X
X
X64
X

One of the main benefits of using Windows 10 IoT Enterprise ARM64 for i.MX93 is the standard Windows experience.

You get all the benefits of Microsoft’s updates and security, which means you can manage your embedded system in the same way you manage the rest of your Windows 10 systems on your network.

Screen shots of the default experience when you boot up, with web browsing via Edge and multi-window capabilities

Obviously, this is not the main use case for an embedded system, so Windows 10 IoT Enterprise ARM64 has many features to help make your embedded system more specialised.

Kiosk mode will open one (or show a start menu with a range of options) application, and block access to all other functions.

By default, this mode will also turn on several security features. There is also a dedicated embedded mode, used for making sure background apps can be automatically restarted, and giving deeper lower-level access to the hardware such as GPIO, SPI and I2C.

"Soft Real-Time" feature

Windows 10 IoT Enterprise for ARM64 also has a `soft real-time` feature for applications where getting the timing of processes consistent and reliable is essential – for example, motors on a robotic arm.

Branding is also important for any embedded product, and Windows 10 IoT allows you to remove the Windows branding, and enable custom boot / login pages and notifications.

Benchmark Test

To test performance, I compiled the standard Dhrystone benchmark test in C, which has historically been used as a measure of integer processing performance.

I compiled for Windows 10 IoT Enterprise for both ARM64 and x86, as well as Linux ARM64, to compare how performance changes over these environments on the same hardware.

Both the Windows ARM64 and x86 were compiled using Visual Studios 2019, using the standard Visual Studios C compiler and had identical source code. The Linux version had small changes to the source code to account for the different system calls, but no logic was changed. It was compiled using GCC with optimisation level 3.

The results: as they have all been compiled on different compilers, with the Linux one not even having identical source code, take these scores as an indicative guideline as to the difference in performance.

No surprise then that the native Linux version performs the best, with Windows 10 IoT Enterprise ARM64 coming in second.

For a comparison, the development laptop using an 11th gen Intel i5 hitting 4.2Ghz clock speed scored a 48,134.

Results of Dhrystone Benchmark Test in C

Summary

Overall, Windows 10 IoT Enterprise for ARM64 on i.MX93 seems a great way to get your applications into the embedded space. We are getting closer and closer to a time where you can have a seamless Windows experience on a low power embedded device.

If you have an application already running on a Windows system, or want the benefit of having your product run in a Windows environment, Windows 10 IoT Enterprise ARM64 for i.MX93 is the perfect option.

However, if you are already in the Linux space, or need maximise the performance of your device, then a Yocto-based Linux BSP still seems like the way to go.

Get expert engineering support for your IoT product development

At ByteSnap, our engineers have the hands-on experience to help determine
if Windows IoT is the right choice for your embedded system project.
Book a discovery call to discuss your needs, and how we can support your team to get products to market faster.
Harrison Wood Embedded Software Engineer

Harrison Wood is an accomplished Embedded Software Engineer at ByteSnap, bringing a strong foundation in mathematics and physics to his work. He holds a Masters degree in Maths and Physics from the University of Warwick, where he honed his analytical skills and problem-solving abilities.

Since joining ByteSnap, Harrison has worked on a diverse range of projects, showcasing his versatility and expertise in embedded systems development. His portfolio includes work on medical devices, light controllers, and smart heating systems.

With a focus on embedded Linux and Windows systems, Harrison has developed a deep understanding of Yocto-based Linux BSPs and has successfully undertaken Windows-to-Linux porting projects. He has also developed QNX-based systems.

(Fun fact: Harrison was part of the University Ultimate Frisbee Club, reaching the nationals for both the indoor and outdoor competitions!)

Share:

Related Posts