From 4ee1f7985fa0619f00b31def1f82884ed842891c Mon Sep 17 00:00:00 2001 From: Joe <4088382+JoeStech@users.noreply.github.com> Date: Wed, 4 Jun 2025 17:04:13 -0600 Subject: [PATCH 1/8] full lp --- .../1-create-orchardcore-app.md | 68 ++++++++++ .../2-add-shared-c-library.md | 121 ++++++++++++++++++ .../dotnet-migration/3-native-aot.md | 40 ++++++ .../dotnet-migration/4-tiered-pgo.md | 45 +++++++ .../dotnet-migration/5-dotnet-versions.md | 62 +++++++++ .../dotnet-migration/_index.md | 53 ++++++++ .../dotnet-migration/_next-steps.md | 8 ++ 7 files changed, 397 insertions(+) create mode 100644 content/learning-paths/servers-and-cloud-computing/dotnet-migration/1-create-orchardcore-app.md create mode 100644 content/learning-paths/servers-and-cloud-computing/dotnet-migration/2-add-shared-c-library.md create mode 100644 content/learning-paths/servers-and-cloud-computing/dotnet-migration/3-native-aot.md create mode 100644 content/learning-paths/servers-and-cloud-computing/dotnet-migration/4-tiered-pgo.md create mode 100644 content/learning-paths/servers-and-cloud-computing/dotnet-migration/5-dotnet-versions.md create mode 100644 content/learning-paths/servers-and-cloud-computing/dotnet-migration/_index.md create mode 100644 content/learning-paths/servers-and-cloud-computing/dotnet-migration/_next-steps.md diff --git a/content/learning-paths/servers-and-cloud-computing/dotnet-migration/1-create-orchardcore-app.md b/content/learning-paths/servers-and-cloud-computing/dotnet-migration/1-create-orchardcore-app.md new file mode 100644 index 0000000000..c79a1a74a1 --- /dev/null +++ b/content/learning-paths/servers-and-cloud-computing/dotnet-migration/1-create-orchardcore-app.md @@ -0,0 +1,68 @@ +--- +title: Create a basic OrchardCore application +weight: 2 + +### FIXED, DO NOT MODIFY +layout: learningpathall +--- + +# Create a basic OrchardCore application + +In this section, you will learn how to create and compile a basic OrchardCore CMS application. OrchardCore is a modular and multi-tenant application framework built with ASP.NET Core, which can be used to create content-driven websites. + +## Step 1: Set up your development environment + +1. **Install .NET SDK**: Follow the instructions on the [.NET download page](https://dotnet.microsoft.com/download) to install the SDK for your operating system. + +2. **Verify installations**: Open a terminal and run the following commands to verify the installations: + + ```bash + dotnet --version + node --version + ``` + +## Step 2: Install the OrchardCore Templates + +To start building an OrchardCore application, you need to install the OrchardCore templates. Open your terminal and run the following command: + +```bash +dotnet new -i OrchardCore.ProjectTemplates::1.0.0-rc2-13450 +``` + +This command installs the OrchardCore project templates, which you will use to create a new application. + +## Step 3: Create a new OrchardCore application + +1. **Create a new project**: Use the `dotnet` CLI to create a new OrchardCore application. + + ```bash + dotnet new occms -n MyOrchardCoreApp + ``` + + This command creates a new OrchardCore CMS application in a directory named `MyOrchardCoreApp`. + +2. **Navigate to the project directory**: + + ```bash + cd MyOrchardCoreApp + ``` + +## Step 4: Run the OrchardCore application + +1. **Build the application**: Compile the application using the following command: + + ```bash + dotnet build + ``` + +2. **Run the application**: Start the application with: + + ```bash + dotnet run --urls http://0.0.0.0:8080 + ``` + +3. **Access the application**: Open a web browser and navigate to `http://[instance IP]:8080` to see your OrchardCore application in action, where `[instance IP]` is the public IP of your Azure Cobalt instance. + +4. **Configure the application as a blog** In the resulting configuration page, + +You have successfully created and run a basic OrchardCore CMS application. In the next sections, you will learn how to integrate a C shared library into your .NET application and explore performance optimizations for Arm architecture. \ No newline at end of file diff --git a/content/learning-paths/servers-and-cloud-computing/dotnet-migration/2-add-shared-c-library.md b/content/learning-paths/servers-and-cloud-computing/dotnet-migration/2-add-shared-c-library.md new file mode 100644 index 0000000000..70bcfbbbc1 --- /dev/null +++ b/content/learning-paths/servers-and-cloud-computing/dotnet-migration/2-add-shared-c-library.md @@ -0,0 +1,121 @@ +--- +title: Add a simple C shared library to your .NET OrchardCore application +weight: 3 + +### FIXED, DO NOT MODIFY +layout: learningpathall +--- + +## Introduction + +In this section, you will learn how to integrate a simple C shared library into your .NET OrchardCore application. This process involves creating a C library, compiling it, and then using it within your .NET application. This integration can help you leverage existing C code and libraries, enhancing the functionality and performance of your application. + + +## Step 1: Create a C shared library + +First, you need to create a simple C shared library. This library will contain a function that you will call from your .NET application. + +1. Create a new file named `mylib.c` with the following content: + + ```c + #include + + void greet() { + printf("Hello from the C library!\n"); + } + ``` + +2. Compile the C file into a shared library: + + ```bash + gcc -shared -o libmylib.so -fPIC mylib.c + ``` + + This will generate a shared library file (`libmylib.so`). + +## Step 2: Use the C library in your .NET application + +Now that you have a shared library, you can use it in your .NET application. + +1. In your OrchardCore application, create a new class file named `NativeMethods.cs`: + + ```csharp + using System; + using System.Runtime.InteropServices; + + public static class NativeMethods + { + [DllImport("mylib", EntryPoint = "greet")] + public static extern void Greet(); + } + ``` + +2. Call the `Greet` method from your application. For example, you can add the following code to your main program or a controller: + + ```csharp + using OrchardCore.Logging; + + var builder = WebApplication.CreateBuilder(args); + + builder.Host.UseNLogHost(); + + builder.Services + .AddOrchardCms() + // // Orchard Specific Pipeline + // .ConfigureServices( services => { + // }) + // .Configure( (app, routes, services) => { + // }) + ; + + var app = builder.Build(); + + Console.WriteLine("Calling native greet..."); // NEW INTEROP LINE + NativeMethods.Greet(); // NEW INTEROP LINE + + if (!app.Environment.IsDevelopment()) + { + app.UseExceptionHandler("/Error"); + // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. + app.UseHsts(); + } + + app.UseHttpsRedirection(); + app.UseStaticFiles(); + + app.UseOrchardCore(); + + app.Run(); + ``` + +3. Ensure that dotnet can find your shared library: + +```bash +``` + +## Step 3: Run your application + +Now when you run `dotnet run`, you will see + +```bash +Calling native greet... +Hello from the C library! +``` + +in the logging output. + +## Compiling for Arm + +If you are compiling for Arm, and you need specific Arm optimizations in your C native code, add the flags here: + +```bash + gcc -shared -o libmylib.so -fPIC mylib.c +``` + +Also, if you are cross-compiling from an x86 machine, you will want to use this compiler command instead: + +```bash +aarch64-linux-gnu-gcc -shared -o libmylib.so -fPIC mylib.c +``` + +In the next section, you will explore the tradeoffs of building native AOT arm64 binaries. diff --git a/content/learning-paths/servers-and-cloud-computing/dotnet-migration/3-native-aot.md b/content/learning-paths/servers-and-cloud-computing/dotnet-migration/3-native-aot.md new file mode 100644 index 0000000000..995a0cf0fa --- /dev/null +++ b/content/learning-paths/servers-and-cloud-computing/dotnet-migration/3-native-aot.md @@ -0,0 +1,40 @@ +--- +title: Understand the tradeoffs of building native AOT arm64 binaries +weight: 4 + +### FIXED, DO NOT MODIFY +layout: learningpathall +--- + +# Understand the tradeoffs of building native AOT arm64 binaries + +In this section, we will explore the tradeoffs involved in building native Ahead-Of-Time (AOT) arm64 binaries. AOT compilation can offer significant performance benefits, but it also comes with certain considerations that developers need to be aware of. + +## What is AOT compilation? + +Ahead-Of-Time (AOT) compilation is a process where the code is compiled into a native binary before execution, rather than being interpreted or compiled Just-In-Time (JIT) during execution. This can lead to faster startup times and reduced memory usage, which are critical for performance-sensitive applications. + +## Benefits of AOT for arm64 + +- **Improved startup time**: Since the code is pre-compiled, applications can start faster as there is no need for JIT compilation at runtime. +- **Reduced memory footprint**: AOT-compiled binaries can have a smaller memory footprint, which is beneficial for devices with limited resources. +- **Consistent performance**: AOT provides more predictable performance as the code is already optimized and compiled. + +## Tradeoffs of AOT for arm64 + +- **Larger binary size**: AOT compilation can result in larger binaries, as all the code is included in the final executable. +- **Longer build times**: The process of AOT compilation can increase build times, as the entire application needs to be compiled ahead of time. +- **Limited runtime optimizations**: Unlike JIT, AOT does not benefit from runtime optimizations that can be applied based on the actual execution context. + +## Considerations for using AOT + +When deciding whether to use AOT for your arm64 application, consider the following: + +- **Application size**: If your application is large, the increase in binary size might be a concern. +- **Deployment environment**: For environments where startup time and memory usage are critical, AOT can be advantageous. +- **Development cycle**: If rapid iteration and testing are important, the longer build times of AOT might be a drawback. + +Understanding the tradeoffs of AOT compilation is crucial for making informed decisions about your application's deployment strategy. While AOT can offer significant performance benefits, it is important to weigh these against the potential downsides such as increased binary size and longer build times. + +In the next section, we will delve into TieredPGO (Profile Guided Optimization) for .NET and how it can further enhance the performance of your applications. + diff --git a/content/learning-paths/servers-and-cloud-computing/dotnet-migration/4-tiered-pgo.md b/content/learning-paths/servers-and-cloud-computing/dotnet-migration/4-tiered-pgo.md new file mode 100644 index 0000000000..94ae2a37ca --- /dev/null +++ b/content/learning-paths/servers-and-cloud-computing/dotnet-migration/4-tiered-pgo.md @@ -0,0 +1,45 @@ +--- +title: Explore TieredPGO tradeoffs in OrchardCore +weight: 5 + +### FIXED, DO NOT MODIFY +t: learningpathall +--- + +## Introduction + +In this section, we will explore the tradeoffs of using TieredPGO (Profile Guided Optimization) in the context of an OrchardCore CMS application. TieredPGO is a powerful optimization technique in .NET that can significantly impact the performance of your application. We will relate these tradeoffs back to our OrchardCore example to provide a practical understanding. + +## Understanding TieredPGO + +TieredPGO is a feature in .NET that allows the runtime to optimize code execution based on the actual usage patterns observed during the application's execution. It combines the benefits of both Tiered Compilation and Profile Guided Optimization to improve performance. + +### Key Concepts + +- **Tiered Compilation**: This allows the .NET runtime to initially compile methods with a quick, less-optimized version and later replace them with more optimized versions as the application runs. +- **Profile Guided Optimization (PGO)**: This uses runtime data to inform the JIT (Just-In-Time) compiler about which parts of the code are most frequently executed, allowing it to focus optimization efforts on those areas. + +## Tradeoffs of Using TieredPGO + +While TieredPGO can enhance performance, it also comes with certain tradeoffs: + +1. **Startup Time**: The initial startup time of the application might be slightly longer due to the profiling overhead. +2. **Memory Usage**: Additional memory is used to store profiling data and multiple versions of compiled methods. +3. **Complexity**: Understanding and tuning TieredPGO requires a deeper knowledge of the application's runtime behavior. + +### Example: Enabling TieredPGO + +To enable TieredPGO in your OrchardCore application, you can set the following environment variables: + +```bash +export DOTNET_TieredPGO=1 +export DOTNET_TieredCompilation=1 +``` + +### Observing the Impact + +1. **Performance Gains**: Run your OrchardCore application and monitor the performance improvements in frequently accessed pages or components. +2. **Profiling Overhead**: Measure the startup time and memory usage to understand the impact of enabling TieredPGO. +3. **Optimization Focus**: Identify which parts of your application benefit the most from TieredPGO and consider if the tradeoffs are acceptable. + +TieredPGO offers a compelling way to optimize .NET applications by leveraging runtime profiling data. In the context of an OrchardCore CMS application, it can lead to significant performance improvements, especially in high-traffic scenarios. However, it's essential to weigh the tradeoffs, such as increased startup time and memory usage, to determine if it's the right choice for your application. diff --git a/content/learning-paths/servers-and-cloud-computing/dotnet-migration/5-dotnet-versions.md b/content/learning-paths/servers-and-cloud-computing/dotnet-migration/5-dotnet-versions.md new file mode 100644 index 0000000000..d8409586da --- /dev/null +++ b/content/learning-paths/servers-and-cloud-computing/dotnet-migration/5-dotnet-versions.md @@ -0,0 +1,62 @@ +--- +title: Evaluate .NET versions for performance on Arm +weight: 6 + +### FIXED, DO NOT MODIFY +layout: learningpathall +--- + +# Evaluate .NET versions for performance on Arm + +In this section, we will explore the performance characteristics of different .NET versions on Arm architecture. Understanding which versions perform best and the features they offer can help you make informed decisions when developing applications for Arm-based systems. + +## .NET versions overview + +.NET has evolved significantly over the years, with each version introducing new features and performance improvements. Here, we will focus on the key versions that have notable performance implications for Arm architecture. + +## .NET Core 3.1 (end-of-life 2022) + +.NET Core 3.1 was a significant release that introduced better support for Arm64, making it a viable option for developing applications on Arm-based systems. Key features include: + +- Improved JIT (Just-In-Time) compilation for Arm64. +- Enhanced garbage collection performance. +- Support for hardware intrinsics, allowing for optimized low-level operations. + +## .NET 5 (end-of-life 2022) + +.NET 5 marked the unification of the .NET platform, bringing together .NET Core, .NET Framework, and Xamarin. It continued to build on the performance improvements of .NET Core 3.1, with additional enhancements: + +- Improved cross-platform performance, including Arm64. +- Introduction of single-file applications, reducing deployment complexity. +- Enhanced support for containerized applications, which is beneficial for cloud deployments on Arm servers. + +## .NET 6 (end-of-life 2024) + +.NET 6 is a Long-Term Support (LTS) release that further optimizes performance for Arm architecture. It includes: + +- TieredPGO (Profile Guided Optimization), which optimizes runtime performance based on actual usage patterns. +- Improved support for high core counts, making it ideal for modern Arm servers with many cores. + +## .NET 7 + +.NET 7 continues the trend of performance enhancements, with a focus on: + +- Native AOT (Ahead-Of-Time) compilation, which can significantly improve startup times and reduce memory usage. +- Enhanced support for cloud-native applications, which are increasingly deployed on Arm-based infrastructure. +- Continued optimizations for high-performance computing scenarios. + +## .NET 8 (current LTS) + +## .NET 9 + +## .NET 10 (preview) + + + +## Choosing the right .NET version + +When selecting a .NET version for your Arm-based application, consider the following: + +- **Performance needs**: If performance is critical, .NET 6 or later is recommended due to its advanced optimizations and support for modern Arm features. +- **Long-term support**: If you require long-term support, .NET 6 is the current LTS version. +- **Feature requirements**: Evaluate the specific features of each version to determine which best meets your application's needs. diff --git a/content/learning-paths/servers-and-cloud-computing/dotnet-migration/_index.md b/content/learning-paths/servers-and-cloud-computing/dotnet-migration/_index.md new file mode 100644 index 0000000000..34486bc0f6 --- /dev/null +++ b/content/learning-paths/servers-and-cloud-computing/dotnet-migration/_index.md @@ -0,0 +1,53 @@ +--- +title: Migrating a .NET OrchardCore CMS application to Azure Cobalt + +minutes_to_complete: 25 + +who_is_this_for: .NET developers who want to take advantage of the cost and performance benefits of Azure Cobalt processors. + +learning_objectives: + - Create and compile a basic OrchardCore CMS application + - Add a simple C shared library to your .NET application + - Understand the tradeoffs of building native AOT (ahead-of-time) arm64 binaries + - Learn about TieredPGO (Profile Guided Optimization) for .NET + - Gain intuition about performance of different .NET versions + - .NET optimizations for huge core counts + +prerequisites: + - An Azure Cobalt instance running Ubuntu 24.04 + - Installation of .NET 10 + - gcc installed + +author: Joe Stech + +### Tags +skilllevels: Advanced +subjects: Performance and Architecture +armips: + - Neoverse +tools_software_languages: + - .NET + - OrchardCore + - C +operatingsystems: + - Linux + + +further_reading: + - resource: + title: OrchardCore documentation + link: https://docs.orchardcore.net/ + type: documentation + - resource: + title: .NET documentation + link: https://docs.microsoft.com/en-us/dotnet/ + type: documentation + + + +### FIXED, DO NOT MODIFY +# ================================================================================ +weight: 1 # _index.md always has weight of 1 to order correctly +layout: "learningpathall" # All files under learning paths have this same wrapper +learning_path_main_page: "yes" # This should be surfaced when looking for related content. Only set for _index.md of learning path content. +--- diff --git a/content/learning-paths/servers-and-cloud-computing/dotnet-migration/_next-steps.md b/content/learning-paths/servers-and-cloud-computing/dotnet-migration/_next-steps.md new file mode 100644 index 0000000000..c3db0de5a2 --- /dev/null +++ b/content/learning-paths/servers-and-cloud-computing/dotnet-migration/_next-steps.md @@ -0,0 +1,8 @@ +--- +# ================================================================================ +# FIXED, DO NOT MODIFY THIS FILE +# ================================================================================ +weight: 21 # Set to always be larger than the content in this path to be at the end of the navigation. +title: "Next Steps" # Always the same, html page title. +layout: "learningpathall" # All files under learning paths have this same wrapper for Hugo processing. +--- From 15e9ebd65f7abd6b94bbae8156866022a1626d28 Mon Sep 17 00:00:00 2001 From: Joe <4088382+JoeStech@users.noreply.github.com> Date: Thu, 5 Jun 2025 17:06:12 -0600 Subject: [PATCH 2/8] gcc optimizations --- .../dotnet-migration/2-add-shared-c-library.md | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/content/learning-paths/servers-and-cloud-computing/dotnet-migration/2-add-shared-c-library.md b/content/learning-paths/servers-and-cloud-computing/dotnet-migration/2-add-shared-c-library.md index 70bcfbbbc1..2601440baf 100644 --- a/content/learning-paths/servers-and-cloud-computing/dotnet-migration/2-add-shared-c-library.md +++ b/content/learning-paths/servers-and-cloud-computing/dotnet-migration/2-add-shared-c-library.md @@ -106,16 +106,12 @@ in the logging output. ## Compiling for Arm -If you are compiling for Arm, and you need specific Arm optimizations in your C native code, add the flags here: +If you are compiling for Arm directly on Azure Cobalt, the compiler understands what default processor optimizations it should use, and you can compile as done in Step 1 above. However, if you are cross-compiling in your build pipeline, you should specify `-mcpu=neoverse-n2 -O3` when running the cross-compiler: ```bash - gcc -shared -o libmylib.so -fPIC mylib.c +aarch64-linux-gnu-gcc -mcpu=neoverse-n2 -O3 -shared -o libmylib.so -fPIC mylib.c ``` -Also, if you are cross-compiling from an x86 machine, you will want to use this compiler command instead: - -```bash -aarch64-linux-gnu-gcc -shared -o libmylib.so -fPIC mylib.c -``` +The `-mcpu=neoverse-n2` flag specifies the Cobalt architecture, and `-O3` ensures that maximum optimizations are completed (including SIMD opimizations). In the next section, you will explore the tradeoffs of building native AOT arm64 binaries. From d47b9308c74cff83e06ec544dbd92f2018de74d1 Mon Sep 17 00:00:00 2001 From: Joe <4088382+JoeStech@users.noreply.github.com> Date: Fri, 6 Jun 2025 16:35:51 -0600 Subject: [PATCH 3/8] addressing comments from 1 on 1 with Pareena --- .../1-create-orchardcore-app.md | 8 ++- .../dotnet-migration/3-native-aot.md | 40 ------------ .../dotnet-migration/4-tiered-pgo.md | 45 -------------- .../dotnet-migration/5-dotnet-versions.md | 62 ------------------- .../dotnet-migration/_index.md | 2 +- 5 files changed, 7 insertions(+), 150 deletions(-) delete mode 100644 content/learning-paths/servers-and-cloud-computing/dotnet-migration/3-native-aot.md delete mode 100644 content/learning-paths/servers-and-cloud-computing/dotnet-migration/4-tiered-pgo.md delete mode 100644 content/learning-paths/servers-and-cloud-computing/dotnet-migration/5-dotnet-versions.md diff --git a/content/learning-paths/servers-and-cloud-computing/dotnet-migration/1-create-orchardcore-app.md b/content/learning-paths/servers-and-cloud-computing/dotnet-migration/1-create-orchardcore-app.md index c79a1a74a1..a95f976b76 100644 --- a/content/learning-paths/servers-and-cloud-computing/dotnet-migration/1-create-orchardcore-app.md +++ b/content/learning-paths/servers-and-cloud-computing/dotnet-migration/1-create-orchardcore-app.md @@ -12,15 +12,19 @@ In this section, you will learn how to create and compile a basic OrchardCore CM ## Step 1: Set up your development environment -1. **Install .NET SDK**: Follow the instructions on the [.NET download page](https://dotnet.microsoft.com/download) to install the SDK for your operating system. +1. Launch an Azure Cobalt instance running Ubuntu 24.04, and open port 8080 to the internet (link to instructions here) -2. **Verify installations**: Open a terminal and run the following commands to verify the installations: +2. **Install .NET SDK**: Follow the instructions on the [.NET download page](https://dotnet.microsoft.com/download) to install the SDK for your operating system. + +3. **Verify installations**: Open a terminal and run the following commands to verify the installations: ```bash dotnet --version node --version ``` + + ## Step 2: Install the OrchardCore Templates To start building an OrchardCore application, you need to install the OrchardCore templates. Open your terminal and run the following command: diff --git a/content/learning-paths/servers-and-cloud-computing/dotnet-migration/3-native-aot.md b/content/learning-paths/servers-and-cloud-computing/dotnet-migration/3-native-aot.md deleted file mode 100644 index 995a0cf0fa..0000000000 --- a/content/learning-paths/servers-and-cloud-computing/dotnet-migration/3-native-aot.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: Understand the tradeoffs of building native AOT arm64 binaries -weight: 4 - -### FIXED, DO NOT MODIFY -layout: learningpathall ---- - -# Understand the tradeoffs of building native AOT arm64 binaries - -In this section, we will explore the tradeoffs involved in building native Ahead-Of-Time (AOT) arm64 binaries. AOT compilation can offer significant performance benefits, but it also comes with certain considerations that developers need to be aware of. - -## What is AOT compilation? - -Ahead-Of-Time (AOT) compilation is a process where the code is compiled into a native binary before execution, rather than being interpreted or compiled Just-In-Time (JIT) during execution. This can lead to faster startup times and reduced memory usage, which are critical for performance-sensitive applications. - -## Benefits of AOT for arm64 - -- **Improved startup time**: Since the code is pre-compiled, applications can start faster as there is no need for JIT compilation at runtime. -- **Reduced memory footprint**: AOT-compiled binaries can have a smaller memory footprint, which is beneficial for devices with limited resources. -- **Consistent performance**: AOT provides more predictable performance as the code is already optimized and compiled. - -## Tradeoffs of AOT for arm64 - -- **Larger binary size**: AOT compilation can result in larger binaries, as all the code is included in the final executable. -- **Longer build times**: The process of AOT compilation can increase build times, as the entire application needs to be compiled ahead of time. -- **Limited runtime optimizations**: Unlike JIT, AOT does not benefit from runtime optimizations that can be applied based on the actual execution context. - -## Considerations for using AOT - -When deciding whether to use AOT for your arm64 application, consider the following: - -- **Application size**: If your application is large, the increase in binary size might be a concern. -- **Deployment environment**: For environments where startup time and memory usage are critical, AOT can be advantageous. -- **Development cycle**: If rapid iteration and testing are important, the longer build times of AOT might be a drawback. - -Understanding the tradeoffs of AOT compilation is crucial for making informed decisions about your application's deployment strategy. While AOT can offer significant performance benefits, it is important to weigh these against the potential downsides such as increased binary size and longer build times. - -In the next section, we will delve into TieredPGO (Profile Guided Optimization) for .NET and how it can further enhance the performance of your applications. - diff --git a/content/learning-paths/servers-and-cloud-computing/dotnet-migration/4-tiered-pgo.md b/content/learning-paths/servers-and-cloud-computing/dotnet-migration/4-tiered-pgo.md deleted file mode 100644 index 94ae2a37ca..0000000000 --- a/content/learning-paths/servers-and-cloud-computing/dotnet-migration/4-tiered-pgo.md +++ /dev/null @@ -1,45 +0,0 @@ ---- -title: Explore TieredPGO tradeoffs in OrchardCore -weight: 5 - -### FIXED, DO NOT MODIFY -t: learningpathall ---- - -## Introduction - -In this section, we will explore the tradeoffs of using TieredPGO (Profile Guided Optimization) in the context of an OrchardCore CMS application. TieredPGO is a powerful optimization technique in .NET that can significantly impact the performance of your application. We will relate these tradeoffs back to our OrchardCore example to provide a practical understanding. - -## Understanding TieredPGO - -TieredPGO is a feature in .NET that allows the runtime to optimize code execution based on the actual usage patterns observed during the application's execution. It combines the benefits of both Tiered Compilation and Profile Guided Optimization to improve performance. - -### Key Concepts - -- **Tiered Compilation**: This allows the .NET runtime to initially compile methods with a quick, less-optimized version and later replace them with more optimized versions as the application runs. -- **Profile Guided Optimization (PGO)**: This uses runtime data to inform the JIT (Just-In-Time) compiler about which parts of the code are most frequently executed, allowing it to focus optimization efforts on those areas. - -## Tradeoffs of Using TieredPGO - -While TieredPGO can enhance performance, it also comes with certain tradeoffs: - -1. **Startup Time**: The initial startup time of the application might be slightly longer due to the profiling overhead. -2. **Memory Usage**: Additional memory is used to store profiling data and multiple versions of compiled methods. -3. **Complexity**: Understanding and tuning TieredPGO requires a deeper knowledge of the application's runtime behavior. - -### Example: Enabling TieredPGO - -To enable TieredPGO in your OrchardCore application, you can set the following environment variables: - -```bash -export DOTNET_TieredPGO=1 -export DOTNET_TieredCompilation=1 -``` - -### Observing the Impact - -1. **Performance Gains**: Run your OrchardCore application and monitor the performance improvements in frequently accessed pages or components. -2. **Profiling Overhead**: Measure the startup time and memory usage to understand the impact of enabling TieredPGO. -3. **Optimization Focus**: Identify which parts of your application benefit the most from TieredPGO and consider if the tradeoffs are acceptable. - -TieredPGO offers a compelling way to optimize .NET applications by leveraging runtime profiling data. In the context of an OrchardCore CMS application, it can lead to significant performance improvements, especially in high-traffic scenarios. However, it's essential to weigh the tradeoffs, such as increased startup time and memory usage, to determine if it's the right choice for your application. diff --git a/content/learning-paths/servers-and-cloud-computing/dotnet-migration/5-dotnet-versions.md b/content/learning-paths/servers-and-cloud-computing/dotnet-migration/5-dotnet-versions.md deleted file mode 100644 index d8409586da..0000000000 --- a/content/learning-paths/servers-and-cloud-computing/dotnet-migration/5-dotnet-versions.md +++ /dev/null @@ -1,62 +0,0 @@ ---- -title: Evaluate .NET versions for performance on Arm -weight: 6 - -### FIXED, DO NOT MODIFY -layout: learningpathall ---- - -# Evaluate .NET versions for performance on Arm - -In this section, we will explore the performance characteristics of different .NET versions on Arm architecture. Understanding which versions perform best and the features they offer can help you make informed decisions when developing applications for Arm-based systems. - -## .NET versions overview - -.NET has evolved significantly over the years, with each version introducing new features and performance improvements. Here, we will focus on the key versions that have notable performance implications for Arm architecture. - -## .NET Core 3.1 (end-of-life 2022) - -.NET Core 3.1 was a significant release that introduced better support for Arm64, making it a viable option for developing applications on Arm-based systems. Key features include: - -- Improved JIT (Just-In-Time) compilation for Arm64. -- Enhanced garbage collection performance. -- Support for hardware intrinsics, allowing for optimized low-level operations. - -## .NET 5 (end-of-life 2022) - -.NET 5 marked the unification of the .NET platform, bringing together .NET Core, .NET Framework, and Xamarin. It continued to build on the performance improvements of .NET Core 3.1, with additional enhancements: - -- Improved cross-platform performance, including Arm64. -- Introduction of single-file applications, reducing deployment complexity. -- Enhanced support for containerized applications, which is beneficial for cloud deployments on Arm servers. - -## .NET 6 (end-of-life 2024) - -.NET 6 is a Long-Term Support (LTS) release that further optimizes performance for Arm architecture. It includes: - -- TieredPGO (Profile Guided Optimization), which optimizes runtime performance based on actual usage patterns. -- Improved support for high core counts, making it ideal for modern Arm servers with many cores. - -## .NET 7 - -.NET 7 continues the trend of performance enhancements, with a focus on: - -- Native AOT (Ahead-Of-Time) compilation, which can significantly improve startup times and reduce memory usage. -- Enhanced support for cloud-native applications, which are increasingly deployed on Arm-based infrastructure. -- Continued optimizations for high-performance computing scenarios. - -## .NET 8 (current LTS) - -## .NET 9 - -## .NET 10 (preview) - - - -## Choosing the right .NET version - -When selecting a .NET version for your Arm-based application, consider the following: - -- **Performance needs**: If performance is critical, .NET 6 or later is recommended due to its advanced optimizations and support for modern Arm features. -- **Long-term support**: If you require long-term support, .NET 6 is the current LTS version. -- **Feature requirements**: Evaluate the specific features of each version to determine which best meets your application's needs. diff --git a/content/learning-paths/servers-and-cloud-computing/dotnet-migration/_index.md b/content/learning-paths/servers-and-cloud-computing/dotnet-migration/_index.md index 34486bc0f6..8317821e19 100644 --- a/content/learning-paths/servers-and-cloud-computing/dotnet-migration/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/dotnet-migration/_index.md @@ -14,7 +14,7 @@ learning_objectives: - .NET optimizations for huge core counts prerequisites: - - An Azure Cobalt instance running Ubuntu 24.04 + - An Azure account - Installation of .NET 10 - gcc installed From 31aaddfe7c9acc32634c212a66e755fabd0a3c07 Mon Sep 17 00:00:00 2001 From: Joe <4088382+JoeStech@users.noreply.github.com> Date: Mon, 9 Jun 2025 15:28:23 -0600 Subject: [PATCH 4/8] anycpu and versions file --- .../dotnet-migration/3-any-cpu.md | 51 ++++++++++++++ .../dotnet-migration/4-dotnet-versions.md | 69 +++++++++++++++++++ 2 files changed, 120 insertions(+) create mode 100644 content/learning-paths/servers-and-cloud-computing/dotnet-migration/3-any-cpu.md create mode 100644 content/learning-paths/servers-and-cloud-computing/dotnet-migration/4-dotnet-versions.md diff --git a/content/learning-paths/servers-and-cloud-computing/dotnet-migration/3-any-cpu.md b/content/learning-paths/servers-and-cloud-computing/dotnet-migration/3-any-cpu.md new file mode 100644 index 0000000000..3908c73d5d --- /dev/null +++ b/content/learning-paths/servers-and-cloud-computing/dotnet-migration/3-any-cpu.md @@ -0,0 +1,51 @@ +--- +title: Run a .NET OrchardCore application on Arm and x86 +weight: 4 + +### FIXED, DO NOT MODIFY +layout: learningpathall +--- + +# Run a .NET OrchardCore application on Arm and x86 + +In this section, you will learn how to configure and run your OrchardCore application on both Arm and x86 architectures using the .NET AnyCPU configuration. This approach allows your application to be architecture agnostic, providing flexibility and ease of deployment across different hardware platforms. + +## Configure the project for AnyCPU + +To make your OrchardCore application architecture agnostic, you need to configure it to use the AnyCPU platform target. This allows the .NET runtime to choose the appropriate architecture at runtime. + +1. Open your OrchardCore project in your preferred IDE. +2. Locate the `.csproj` file for your project. +3. Modify the `` element to `AnyCPU`: + + ```xml + + AnyCPU + + ``` + +4. Save the changes to the `.csproj` file. + +## Build once, run anywhere + + ```bash + dotnet build -c Release + ``` + +4. Run the application: + + ```bash + dotnet run + ``` + +Your application should now be runnable on any architecture. + +## Benefits of architecture agnostic applications + +By configuring your application to be architecture agnostic, you gain several benefits: + +- **Flexibility**: Deploy your application on a wide range of devices without modification. +- **Efficiency**: Reduce the need for maintaining separate builds for different architectures. +- **Scalability**: Easily scale your application across different hardware platforms. + +This approach ensures that your OrchardCore application can run seamlessly on both Arm and x86 architectures, as well as 64 bit or 32 bit processors. \ No newline at end of file diff --git a/content/learning-paths/servers-and-cloud-computing/dotnet-migration/4-dotnet-versions.md b/content/learning-paths/servers-and-cloud-computing/dotnet-migration/4-dotnet-versions.md new file mode 100644 index 0000000000..6186bba518 --- /dev/null +++ b/content/learning-paths/servers-and-cloud-computing/dotnet-migration/4-dotnet-versions.md @@ -0,0 +1,69 @@ +--- +title: Evaluate .NET versions for performance on Arm +weight: 5 + +### FIXED, DO NOT MODIFY +layout: learningpathall +--- + +# Evaluate .NET versions for performance on Arm + +In this section, we will explore the performance characteristics of different .NET versions on Arm architecture. Understanding which versions perform best and the features they offer can help you make informed decisions when developing applications for Arm-based systems. + +## .NET versions overview + +.NET has evolved significantly over the years, with each version introducing new features and performance improvements. Here, we will focus on the key versions that have notable performance implications for Arm architecture. + +## .NET Core 3.1 (end-of-life 2022) + +.NET Core 3.1 was a significant release that introduced better support for Arm64, making it a viable option for developing applications on Arm-based systems. Key features include: + +- Improved JIT (Just-In-Time) compilation for Arm64. +- Enhanced garbage collection performance. +- Support for hardware intrinsics, allowing for optimized low-level operations. + +## .NET 5 (end-of-life 2022) + +.NET 5 marked the unification of the .NET platform, bringing together .NET Core, .NET Framework, and Xamarin. It continued to build on the performance improvements of .NET Core 3.1, with additional enhancements: + +- Improved cross-platform performance, including Arm64. +- Introduction of single-file applications, reducing deployment complexity. +- Enhanced support for containerized applications, which is beneficial for cloud deployments on Arm servers. + +## .NET 6 (end-of-life 2024) + +.NET 6 is a Long-Term Support (LTS) release that further optimizes performance for Arm architecture. It includes: + +- TieredPGO (Profile Guided Optimization). TieredPGO is a feature in .NET that allows the runtime to optimize code execution based on the actual usage patterns observed during the application's execution. It combines the benefits of both Tiered Compilation and Profile Guided Optimization to improve performance. +- Improved support for high core counts, making it ideal for modern Arm servers with many cores. + +## .NET 7 + +.NET 7 continues the trend of performance enhancements, with a focus on: + +- Native AOT (Ahead-Of-Time) compilation, which can significantly improve startup times and reduce memory usage. +- Enhanced support for cloud-native applications, which are increasingly deployed on Arm-based infrastructure. +- Continued optimizations for high-performance computing scenarios. + +## .NET 8 (current LTS) + +.NET 8, as the current Long-Term Support (LTS) version, builds upon the advancements of its predecessors with a focus on stability and performance. Key features include: + +- Further improvements in Native AOT, enhancing startup times and reducing resource consumption. +- Optimized performance for cloud-native and microservices architectures on Arm. +- Enhanced developer productivity features, making it easier to build and deploy applications on Arm-based systems. + +## .NET 9 + +.NET 9 introduces experimental features and performance enhancements aimed at future-proofing applications. While not an LTS release, it offers: + +- Cutting-edge performance optimizations for Arm architecture. +- New language features and runtime improvements. +- Enhanced support for emerging technologies and platforms. + +## .NET 10 (preview) + + +## Hands-on performance comparison + +Let's do a comparison between OrchardCore running on .NET 8 and the earliest compatible version of .NET From d635e431fc50e9ff2677a9f703baaefd7a2b4448 Mon Sep 17 00:00:00 2001 From: Joe <4088382+JoeStech@users.noreply.github.com> Date: Tue, 10 Jun 2025 16:19:56 -0600 Subject: [PATCH 5/8] add a new cobalt learning path to link to from the .NET path, and add LD path info to the .NET path --- .../cobalt/1-create-cobalt-vm.md | 25 ++++++++ .../cobalt/2-open-port.md | 24 ++++++++ .../cobalt/3-verify-connectivity.md | 47 +++++++++++++++ .../cobalt/_index.md | 54 ++++++++++++++++++ .../cobalt/_next-steps.md | 8 +++ .../cobalt/images/create-cobalt-vm.png | Bin 0 -> 125740 bytes .../cobalt/images/create-nsg-rule.png | Bin 0 -> 39925 bytes .../1-create-orchardcore-app.md | 6 +- .../2-add-shared-c-library.md | 1 + .../dotnet-migration/3-any-cpu.md | 2 +- .../dotnet-migration/_index.md | 2 +- 11 files changed, 163 insertions(+), 6 deletions(-) create mode 100644 content/learning-paths/servers-and-cloud-computing/cobalt/1-create-cobalt-vm.md create mode 100644 content/learning-paths/servers-and-cloud-computing/cobalt/2-open-port.md create mode 100644 content/learning-paths/servers-and-cloud-computing/cobalt/3-verify-connectivity.md create mode 100644 content/learning-paths/servers-and-cloud-computing/cobalt/_index.md create mode 100644 content/learning-paths/servers-and-cloud-computing/cobalt/_next-steps.md create mode 100644 content/learning-paths/servers-and-cloud-computing/cobalt/images/create-cobalt-vm.png create mode 100644 content/learning-paths/servers-and-cloud-computing/cobalt/images/create-nsg-rule.png diff --git a/content/learning-paths/servers-and-cloud-computing/cobalt/1-create-cobalt-vm.md b/content/learning-paths/servers-and-cloud-computing/cobalt/1-create-cobalt-vm.md new file mode 100644 index 0000000000..2007ec1a24 --- /dev/null +++ b/content/learning-paths/servers-and-cloud-computing/cobalt/1-create-cobalt-vm.md @@ -0,0 +1,25 @@ +--- +title: Create the Cobalt 100 virtual machine +weight: 2 + +### FIXED, DO NOT MODIFY +layout: learningpathall +--- + +## Use the Azure Portal to deploy a Cobalt 100 VM + +Azure Cobalt 100 VMs are a part of the ['D' family of Azure VMs](https://learn.microsoft.com/en-us/azure/virtual-machines/sizes/general-purpose/d-family). To deploy one, follow these steps: + +1. Sign in to the [Azure Portal](https://portal.azure.com/). +2. Select **Create a resource → Compute → Virtual machine**. +3. Complete the *Basics* tab: + ![Azure Portal – Basics tab for the VM wizard#center](images/create-cobalt-vm.png) + The Dpsv6-series are powered by Cobalt 100. Selecting Standard_D4ps_v6 will give you a Cobalt VM with 4 physical cores. you can change the 4 to another value if you want a different number of cores. +4. Upload your public SSH key or generate a new one in the wizard. +5. Disallow public inbound ports for now. +5. Accept the defaults on the *Disks* tab. +6. On the *Networking* tab ensure that a **Public IP** is selected. You will need it to connect later. Leave the NSG settings as *Basic* for now. + +Click **Review + create** followed by **Create**. Azure now deploys the VM and the automatically-generated Network Security Group (NSG). Provisioning takes ~2 minutes. + +Navigate to the **Deployment in progress** pane or open the **Notifications** panel to track progress. When the deployment succeeds proceed to the next step to expose an inbound port. diff --git a/content/learning-paths/servers-and-cloud-computing/cobalt/2-open-port.md b/content/learning-paths/servers-and-cloud-computing/cobalt/2-open-port.md new file mode 100644 index 0000000000..f446d15df1 --- /dev/null +++ b/content/learning-paths/servers-and-cloud-computing/cobalt/2-open-port.md @@ -0,0 +1,24 @@ +--- +title: Open an inbound port in the Network Security Group +weight: 3 + +### FIXED, DO NOT MODIFY +layout: learningpathall +--- + +## Allow external traffic to TCP ports 22 (SSH) and 8080 + +Every new virtual machine created through the Azure wizard is associated with a **Network Security Group (NSG)**. An NSG acts like a stateful firewall – if no rule explicitly allows traffic, Azure blocks it. + +In this step you will open port 22 for SSH, as well as port 8080 so that a web application running on the VM is reachable from your IP for testing. Substitute a different port if required by your workload, or a different IP range if you'd like broader accessibility. + +1. In the Azure Portal open the newly created VM resource and click **Networking → Network settings** in the left nav. +2. Select the **Network security group**. +3. In the left nav click **Settings → Inbound security rules** +4. Click **Add** at the top of the screen. +5. Fill in the form, specifying **My IP address** as the source and 22 as the destination port: + ![Add inbound security rule with source of my IP and destination port 22#center](images/create-nsg-rule.png) + +To open port 8080, follow steps 4 and 5 again, but instead choose port 8080 for the destination port. + +You have now opened ports 22 and 8080 to your IP. In the next step you will verify connectivity. \ No newline at end of file diff --git a/content/learning-paths/servers-and-cloud-computing/cobalt/3-verify-connectivity.md b/content/learning-paths/servers-and-cloud-computing/cobalt/3-verify-connectivity.md new file mode 100644 index 0000000000..b16db0151c --- /dev/null +++ b/content/learning-paths/servers-and-cloud-computing/cobalt/3-verify-connectivity.md @@ -0,0 +1,47 @@ +--- +title: Verify connectivity to the Cobalt 100 VM +weight: 4 + +### FIXED, DO NOT MODIFY +layout: learningpathall +--- + +## Connect over SSH and test the open port + +1. On the **Overview** page for the VM copy the **Public IP address**. +2. Open a terminal on your local machine and SSH to the VM (replace *azureuser* if you chose a different admin username): + +```bash +ssh -i [path to your pem file] azureuser@[public IP] +``` + +Where `[public IP]` is your public IP and `[path to your pem file]` is the path to your SSH key file. + +Accept the prompt to add the host to *known_hosts* the first time you connect. + +### Start a simple HTTP server + +If you do not already have an application listening on TCP 8080 you can start one temporarily: + +```bash +sudo apt update -y && sudo apt install -y python3 +python3 -m http.server 8080 +``` + +Leave this terminal open – the server runs in the foreground. + +### Test from your local machine + +In a second local terminal run `curl` to confirm you can reach the server through the NSG rule you created: + +```bash +curl http://[public IP]:8080 +``` + +Where `[public IP]` is your public IP. + +You should see an HTML directory listing (or your application response). Receiving a response verifies that TCP 8080 is open and the VM is reachable from the public internet. + +Terminate the Python server when you are finished testing (press `Ctrl + C`). + +You now have an Arm-based Cobalt 100 VM with an exposed port 8080 that you can use to run any test server. To learn about optimizing .NET workloads on Cobalt, check out [Migrating a .NET application to Azure Cobalt](../../dotnet-migration/). \ No newline at end of file diff --git a/content/learning-paths/servers-and-cloud-computing/cobalt/_index.md b/content/learning-paths/servers-and-cloud-computing/cobalt/_index.md new file mode 100644 index 0000000000..04cd277fa8 --- /dev/null +++ b/content/learning-paths/servers-and-cloud-computing/cobalt/_index.md @@ -0,0 +1,54 @@ +--- +title: Create an Azure Cobalt 100 VM + +minutes_to_complete: 10 + +who_is_this_for: Developers and DevOps engineers who need an Arm-based virtual machine on Azure and want to expose an application port to the internet. + +learning_objectives: + - Deploy an Arm-based Cobalt 100 virtual machine (VM) on Microsoft Azure. + - Connect to the Cobalt 100 VM using SSH. + - Open an inbound TCP port in the associated Network Security Group (NSG). + - Verify external connectivity to the newly opened port. + +prerequisites: + - A Microsoft Azure subscription with permission to create resources + - Basic familiarity with SSH + +author: Joe Stech + +### Tags +# Tagging metadata, see the Learning Path guide for the allowed values +skilllevels: Introductory +subjects: Containers and Virtualization +arm_ips: + - Neoverse +tools_software_languages: + - Azure Portal + - Azure CLI +operatingsystems: + - Linux + + +further_reading: + - resource: + title: Azure Cobalt 100 VM documentation + link: https://learn.microsoft.com/azure/virtual-machines/cobalt-100 + type: Documentation + - resource: + title: Azure Virtual Machines overview + link: https://learn.microsoft.com/azure/virtual-machines/ + type: Documentation + - resource: + title: Configure Azure network security group rules + link: https://learn.microsoft.com/azure/virtual-network/security-overview + type: Documentation + + + +### FIXED, DO NOT MODIFY +# ================================================================================ +weight: 1 # _index.md always has weight of 1 to order correctly +layout: "learningpathall" # All files under learning paths have this same wrapper +learning_path_main_page: "yes" # This should be surfaced when looking for related content. Only set for _index.md of learning path content. +--- diff --git a/content/learning-paths/servers-and-cloud-computing/cobalt/_next-steps.md b/content/learning-paths/servers-and-cloud-computing/cobalt/_next-steps.md new file mode 100644 index 0000000000..c3db0de5a2 --- /dev/null +++ b/content/learning-paths/servers-and-cloud-computing/cobalt/_next-steps.md @@ -0,0 +1,8 @@ +--- +# ================================================================================ +# FIXED, DO NOT MODIFY THIS FILE +# ================================================================================ +weight: 21 # Set to always be larger than the content in this path to be at the end of the navigation. +title: "Next Steps" # Always the same, html page title. +layout: "learningpathall" # All files under learning paths have this same wrapper for Hugo processing. +--- diff --git a/content/learning-paths/servers-and-cloud-computing/cobalt/images/create-cobalt-vm.png b/content/learning-paths/servers-and-cloud-computing/cobalt/images/create-cobalt-vm.png new file mode 100644 index 0000000000000000000000000000000000000000..ccbbb5d78d3e390306db04dff7b6105334fa156c GIT binary patch literal 125740 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 KPbwr$g8v5)NSEdS literal 0 HcmV?d00001 diff --git a/content/learning-paths/servers-and-cloud-computing/cobalt/images/create-nsg-rule.png b/content/learning-paths/servers-and-cloud-computing/cobalt/images/create-nsg-rule.png new file mode 100644 index 0000000000000000000000000000000000000000..7e97b89bad56639d92f2d955c838eec3db1da0fb GIT binary patch literal 39925 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 z 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 UiN~+NyTCtX1=Z`RR}H=Y8>X0}eE Date: Wed, 11 Jun 2025 22:55:53 -0600 Subject: [PATCH 6/8] changes from testing anyCPU --- .../dotnet-migration/1-create-orchardcore-app.md | 12 +++++++++--- .../dotnet-migration/3-any-cpu.md | 12 ++++++++++-- .../dotnet-migration/4-dotnet-versions.md | 4 +--- 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/content/learning-paths/servers-and-cloud-computing/dotnet-migration/1-create-orchardcore-app.md b/content/learning-paths/servers-and-cloud-computing/dotnet-migration/1-create-orchardcore-app.md index 7601474b46..e8f4de83e6 100644 --- a/content/learning-paths/servers-and-cloud-computing/dotnet-migration/1-create-orchardcore-app.md +++ b/content/learning-paths/servers-and-cloud-computing/dotnet-migration/1-create-orchardcore-app.md @@ -14,13 +14,19 @@ In this section, you will learn how to create and compile a basic [OrchardCore]( 1. Launch an Azure Cobalt instance running Ubuntu 24.04, and open port 8080 to the internet. For instructions on how to do this, see the [Create an Azure Cobalt 100 VM](../../cobalt) Learning Path. -2. **Install .NET SDK**: Follow the instructions on the [.NET download page](https://dotnet.microsoft.com/download) to install the SDK for your operating system. +2. **Install .NET SDK**: -3. **Verify installations**: Open a terminal and run the following commands to verify the installations: +```bash +wget https://packages.microsoft.com/config/ubuntu/24.04/packages-microsoft-prod.deb +sudo dpkg -i packages-microsoft-prod.deb +sudo apt-get update +sudo apt-get install -y dotnet-sdk-8.0 +``` + +3. **Verify installations**: ```bash dotnet --version - node --version ``` ## Step 2: Install the OrchardCore Templates diff --git a/content/learning-paths/servers-and-cloud-computing/dotnet-migration/3-any-cpu.md b/content/learning-paths/servers-and-cloud-computing/dotnet-migration/3-any-cpu.md index b56dad9b8f..9b6fc7bdc0 100644 --- a/content/learning-paths/servers-and-cloud-computing/dotnet-migration/3-any-cpu.md +++ b/content/learning-paths/servers-and-cloud-computing/dotnet-migration/3-any-cpu.md @@ -10,6 +10,8 @@ layout: learningpathall In this section, you will learn how to configure and run your OrchardCore application on both Arm and x86 architectures using the .NET AnyCPU configuration. This approach allows your application to be architecture agnostic, providing flexibility and ease of deployment across different hardware platforms. +The AnyCPU feature has been around since .NET 2, but it's current incarnation was released in .NET Framework 4.5. + ## Configure the project for AnyCPU To make your OrchardCore application architecture agnostic, you need to configure it to use the AnyCPU platform target. This allows the .NET runtime to choose the appropriate architecture at runtime. @@ -35,10 +37,16 @@ To make your OrchardCore application architecture agnostic, you need to configur 4. Run the application: ```bash - dotnet run + dotnet run --urls http://0.0.0.0:8080 ``` -Your application should now be runnable on any architecture. +Your application should now be runnable on any architecture. All you have to do is copy the `MyOrchardCoreApp` directory to any computer with the .NET 8 Framework installed and run + +```bash +dotnet ./bin/Release/net8.0/MyOrchardCoreApp.dll --urls http://0.0.0.0:8080 +``` + +From within the `MyOrchardCoreApp` directory. ## Benefits of architecture agnostic applications diff --git a/content/learning-paths/servers-and-cloud-computing/dotnet-migration/4-dotnet-versions.md b/content/learning-paths/servers-and-cloud-computing/dotnet-migration/4-dotnet-versions.md index 6186bba518..67fbeb8484 100644 --- a/content/learning-paths/servers-and-cloud-computing/dotnet-migration/4-dotnet-versions.md +++ b/content/learning-paths/servers-and-cloud-computing/dotnet-migration/4-dotnet-versions.md @@ -8,9 +8,7 @@ layout: learningpathall # Evaluate .NET versions for performance on Arm -In this section, we will explore the performance characteristics of different .NET versions on Arm architecture. Understanding which versions perform best and the features they offer can help you make informed decisions when developing applications for Arm-based systems. - -## .NET versions overview +Understanding which versions perform best and the features they offer can help you make informed decisions when developing applications for Arm-based systems. .NET has evolved significantly over the years, with each version introducing new features and performance improvements. Here, we will focus on the key versions that have notable performance implications for Arm architecture. From 919d3789b1f9bf6862e275a97a130eeda5c2b4bb Mon Sep 17 00:00:00 2001 From: Joe <4088382+JoeStech@users.noreply.github.com> Date: Wed, 11 Jun 2025 23:38:57 -0600 Subject: [PATCH 7/8] versioning page enhancements and fixes --- .../dotnet-migration/4-dotnet-versions.md | 64 +++++++++++-------- 1 file changed, 36 insertions(+), 28 deletions(-) diff --git a/content/learning-paths/servers-and-cloud-computing/dotnet-migration/4-dotnet-versions.md b/content/learning-paths/servers-and-cloud-computing/dotnet-migration/4-dotnet-versions.md index 67fbeb8484..da8dba7f64 100644 --- a/content/learning-paths/servers-and-cloud-computing/dotnet-migration/4-dotnet-versions.md +++ b/content/learning-paths/servers-and-cloud-computing/dotnet-migration/4-dotnet-versions.md @@ -14,54 +14,62 @@ Understanding which versions perform best and the features they offer can help y ## .NET Core 3.1 (end-of-life 2022) -.NET Core 3.1 was a significant release that introduced better support for Arm64, making it a viable option for developing applications on Arm-based systems. Key features include: +.NET Core 3.1 was the first LTS with meaningful Arm64 support. Highlights were: -- Improved JIT (Just-In-Time) compilation for Arm64. -- Enhanced garbage collection performance. -- Support for hardware intrinsics, allowing for optimized low-level operations. +- Initial JIT (Just-In-Time) optimizations for Arm64 (but the bulk of Arm throughput work arrived in .NET 5). +- Faster garbage collection thanks to refinements to the background GC mode. +- Initial set of Arm64 hardware intrinsics (AdvSIMD, AES, CRC32) exposed in `System.Runtime.Intrinsics`. ## .NET 5 (end-of-life 2022) -.NET 5 marked the unification of the .NET platform, bringing together .NET Core, .NET Framework, and Xamarin. It continued to build on the performance improvements of .NET Core 3.1, with additional enhancements: +With .NET 5 Microsoft started the “one .NET” unification. Even though it had only 18 months of support, it delivered notable Arm gains: -- Improved cross-platform performance, including Arm64. -- Introduction of single-file applications, reducing deployment complexity. -- Enhanced support for containerized applications, which is beneficial for cloud deployments on Arm servers. +- Cross-gen2 shipped, delivering better Arm64 code quality (but only became the default in .NET 6). +- Single-file application publishing (with optional IL-trimming) simplified deployment to Arm edge devices. +- Major ASP.NET Core throughput wins on Arm64 (Kestrel & gRPC) compared with .NET Core 3.1. ## .NET 6 (end-of-life 2024) -.NET 6 is a Long-Term Support (LTS) release that further optimizes performance for Arm architecture. It includes: +.NET 6 laid the foundation for the modern performance story on Arm64: -- TieredPGO (Profile Guided Optimization). TieredPGO is a feature in .NET that allows the runtime to optimize code execution based on the actual usage patterns observed during the application's execution. It combines the benefits of both Tiered Compilation and Profile Guided Optimization to improve performance. -- Improved support for high core counts, making it ideal for modern Arm servers with many cores. +- Tiered PGO entered preview, combining tiered compilation with profile-guided optimisation. +- Better scalability on many-core Arm servers thanks to the new ThreadPool implementation. +- First-class support for Apple M1, enabling full .NET development on Arm-based macOS, as well as for Windows Arm64. -## .NET 7 -.NET 7 continues the trend of performance enhancements, with a focus on: +## .NET 7 (end-of-life 2024) -- Native AOT (Ahead-Of-Time) compilation, which can significantly improve startup times and reduce memory usage. -- Enhanced support for cloud-native applications, which are increasingly deployed on Arm-based infrastructure. -- Continued optimizations for high-performance computing scenarios. +.NET 7 was an STS (Standard-Term Support) release which is now out of support, but it pushed the performance envelope and is therefore interesting from a historical perspective. Key highlights were: -## .NET 8 (current LTS) +- General-availability of Native AOT publishing for console applications, producing self-contained, very small binaries with fast start-up on Arm64. +- Dynamic PGO (Profile-Guided Optimisation) and On-Stack Replacement became the default, letting the JIT optimise the hottest code paths based on real run-time data. +- New Arm64 hardware intrinsics (e.g. SHA-1/SHA-256, AES, CRC-32) exposed through System.Runtime.Intrinsics, enabling high-performance crypto workloads. -.NET 8, as the current Long-Term Support (LTS) version, builds upon the advancements of its predecessors with a focus on stability and performance. Key features include: +## .NET 8 (current LTS – support until November 2026) -- Further improvements in Native AOT, enhancing startup times and reducing resource consumption. -- Optimized performance for cloud-native and microservices architectures on Arm. -- Enhanced developer productivity features, making it easier to build and deploy applications on Arm-based systems. +.NET 8 is the current Long-Term Support release and should be your baseline for new production workloads. Important Arm-related improvements include: + +- Native AOT support for ASP.NET Core, trimming enhancements and even smaller self-contained binaries, translating into faster cold-start for containerised Arm services. +- Further JIT tuning for Arm64 delivering single- to low-double-digit percentage throughput wins in real-world benchmarks. +- Smaller base container images (`mcr.microsoft.com/dotnet/aspnet:8.0` and `…/runtime:8.0`) thanks to a redesigned layering strategy, particularly beneficial on Arm where network bandwidth is often at a premium. +- Garbage-collector refinements that reduce pause times on highly-threaded, many-core servers. ## .NET 9 -.NET 9 introduces experimental features and performance enhancements aimed at future-proofing applications. While not an LTS release, it offers: +.NET 9 is still in preview, so features may change, but public builds already show promising Arm-centric updates: + +- PGO is now enabled for release builds by default and its heuristics have been retuned for Arm workloads, yielding notable throughput improvements with zero developer effort. +- The JIT has started to exploit Arm v9 instructions such as SVE2 where hardware is available, opening the door to even wider SIMD operations. +- C# 13 and F# 8 previews ship with the SDK, bringing useful productivity improvements fully supported on Arm devices. + +Although .NET 9 will receive only 18 months of support, it is an excellent choice when you need the very latest performance improvements or want to trial new language/runtime capabilities ahead of the next LTS. -- Cutting-edge performance optimizations for Arm architecture. -- New language features and runtime improvements. -- Enhanced support for emerging technologies and platforms. +## .NET 10 (preview – next LTS) -## .NET 10 (preview) +.NET 10 is still in preview and will likely change prior to it's GA release, but it will be the next LTS version of .NET. +- Extended SVE2 and new SME (Scalable Matrix Extension) intrinsics to unlock efficient implementation of large-scale numerical algorithms and on-device AI inference on Arm v9. +- C# 14 is expected to ship alongside .NET 10, bringing additional compile-time metaprogramming features that can reduce boilerplate on resource-constrained Arm edge devices. -## Hands-on performance comparison +Because .NET 10 is still in preview, you should validate any assumptions about feature availability against the latest preview builds and roadmap updates. -Let's do a comparison between OrchardCore running on .NET 8 and the earliest compatible version of .NET From 42a16940aa96a5295bdeabf9ba5a7c7e9b48f70e Mon Sep 17 00:00:00 2001 From: Joe <4088382+JoeStech@users.noreply.github.com> Date: Wed, 11 Jun 2025 23:58:21 -0600 Subject: [PATCH 8/8] formatting fixes --- .../1-create-orchardcore-app.md | 30 +++---- .../2-add-shared-c-library.md | 90 +++++++++---------- .../dotnet-migration/3-any-cpu.md | 22 ++--- .../dotnet-migration/_index.md | 6 +- 4 files changed, 73 insertions(+), 75 deletions(-) diff --git a/content/learning-paths/servers-and-cloud-computing/dotnet-migration/1-create-orchardcore-app.md b/content/learning-paths/servers-and-cloud-computing/dotnet-migration/1-create-orchardcore-app.md index e8f4de83e6..86e5d7d5fb 100644 --- a/content/learning-paths/servers-and-cloud-computing/dotnet-migration/1-create-orchardcore-app.md +++ b/content/learning-paths/servers-and-cloud-computing/dotnet-migration/1-create-orchardcore-app.md @@ -25,9 +25,9 @@ sudo apt-get install -y dotnet-sdk-8.0 3. **Verify installations**: - ```bash - dotnet --version - ``` +```bash +dotnet --version +``` ## Step 2: Install the OrchardCore Templates @@ -43,31 +43,31 @@ This command installs the OrchardCore project templates, which you will use to c 1. **Create a new project**: Use the `dotnet` CLI to create a new OrchardCore application. - ```bash - dotnet new occms -n MyOrchardCoreApp - ``` +```bash +dotnet new occms -n MyOrchardCoreApp +``` This command creates a new OrchardCore CMS application in a directory named `MyOrchardCoreApp`. 2. **Navigate to the project directory**: - ```bash - cd MyOrchardCoreApp - ``` +```bash +cd MyOrchardCoreApp +``` ## Step 4: Run the OrchardCore application 1. **Build the application**: Compile the application using the following command: - ```bash - dotnet build - ``` +```bash +dotnet build +``` 2. **Run the application**: Start the application with: - ```bash - dotnet run --urls http://0.0.0.0:8080 - ``` +```bash +dotnet run --urls http://0.0.0.0:8080 +``` 3. **Access the application**: Open a web browser and navigate to `http://[instance IP]:8080` to see your OrchardCore application in action, where `[instance IP]` is the public IP of your Azure Cobalt instance. diff --git a/content/learning-paths/servers-and-cloud-computing/dotnet-migration/2-add-shared-c-library.md b/content/learning-paths/servers-and-cloud-computing/dotnet-migration/2-add-shared-c-library.md index 84eb84020b..3850c79245 100644 --- a/content/learning-paths/servers-and-cloud-computing/dotnet-migration/2-add-shared-c-library.md +++ b/content/learning-paths/servers-and-cloud-computing/dotnet-migration/2-add-shared-c-library.md @@ -17,19 +17,19 @@ First, you need to create a simple C shared library. This library will contain a 1. Create a new file named `mylib.c` with the following content: - ```c - #include +```c +#include - void greet() { - printf("Hello from the C library!\n"); - } - ``` +void greet() { + printf("Hello from the C library!\n"); +} +``` 2. Compile the C file into a shared library: - ```bash - gcc -shared -o libmylib.so -fPIC mylib.c - ``` +```bash +gcc -shared -o libmylib.so -fPIC mylib.c +``` This will generate a shared library file (`libmylib.so`). @@ -39,54 +39,54 @@ Now that you have a shared library, you can use it in your .NET application. 1. In your OrchardCore application, create a new class file named `NativeMethods.cs`: - ```csharp - using System; - using System.Runtime.InteropServices; +```csharp +using System; +using System.Runtime.InteropServices; - public static class NativeMethods - { - [DllImport("mylib", EntryPoint = "greet")] - public static extern void Greet(); - } - ``` +public static class NativeMethods +{ + [DllImport("mylib", EntryPoint = "greet")] + public static extern void Greet(); +} +``` 2. Call the `Greet` method from your application. For example, you can add the following code to your main program or a controller: - ```csharp - using OrchardCore.Logging; +```csharp +using OrchardCore.Logging; - var builder = WebApplication.CreateBuilder(args); +var builder = WebApplication.CreateBuilder(args); - builder.Host.UseNLogHost(); +builder.Host.UseNLogHost(); - builder.Services - .AddOrchardCms() - // // Orchard Specific Pipeline - // .ConfigureServices( services => { - // }) - // .Configure( (app, routes, services) => { - // }) - ; +builder.Services + .AddOrchardCms() + // // Orchard Specific Pipeline + // .ConfigureServices( services => { + // }) + // .Configure( (app, routes, services) => { + // }) +; - var app = builder.Build(); +var app = builder.Build(); - Console.WriteLine("Calling native greet..."); // NEW INTEROP LINE - NativeMethods.Greet(); // NEW INTEROP LINE +Console.WriteLine("Calling native greet..."); // NEW INTEROP LINE +NativeMethods.Greet(); // NEW INTEROP LINE - if (!app.Environment.IsDevelopment()) - { - app.UseExceptionHandler("/Error"); - // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. - app.UseHsts(); - } +if (!app.Environment.IsDevelopment()) +{ + app.UseExceptionHandler("/Error"); + // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. + app.UseHsts(); +} - app.UseHttpsRedirection(); - app.UseStaticFiles(); +app.UseHttpsRedirection(); +app.UseStaticFiles(); - app.UseOrchardCore(); +app.UseOrchardCore(); - app.Run(); - ``` +app.Run(); +``` 3. Ensure that dotnet can find your shared library: @@ -115,4 +115,4 @@ aarch64-linux-gnu-gcc -mcpu=neoverse-n2 -O3 -shared -o libmylib.so -fPIC mylib.c The `-mcpu=neoverse-n2` flag specifies the Cobalt architecture, and `-O3` ensures that maximum optimizations are completed (including SIMD opimizations). -In the next section, you will explore the tradeoffs of building native AOT arm64 binaries. +In the next section, you will explore how to make your build architecture agnostic with the anyCPU feature. diff --git a/content/learning-paths/servers-and-cloud-computing/dotnet-migration/3-any-cpu.md b/content/learning-paths/servers-and-cloud-computing/dotnet-migration/3-any-cpu.md index 9b6fc7bdc0..e26c529c81 100644 --- a/content/learning-paths/servers-and-cloud-computing/dotnet-migration/3-any-cpu.md +++ b/content/learning-paths/servers-and-cloud-computing/dotnet-migration/3-any-cpu.md @@ -20,25 +20,25 @@ To make your OrchardCore application architecture agnostic, you need to configur 2. Locate the `.csproj` file for your project. 3. Modify the `` element to `AnyCPU`: - ```xml - - AnyCPU - - ``` +```xml + + AnyCPU + +``` 4. Save the changes to the `.csproj` file. ## Build once, run anywhere - ```bash - dotnet build -c Release - ``` +```bash +dotnet build -c Release +``` 4. Run the application: - ```bash - dotnet run --urls http://0.0.0.0:8080 - ``` +```bash +dotnet run --urls http://0.0.0.0:8080 +``` Your application should now be runnable on any architecture. All you have to do is copy the `MyOrchardCoreApp` directory to any computer with the .NET 8 Framework installed and run diff --git a/content/learning-paths/servers-and-cloud-computing/dotnet-migration/_index.md b/content/learning-paths/servers-and-cloud-computing/dotnet-migration/_index.md index b3d131d34d..dac07dd8a5 100644 --- a/content/learning-paths/servers-and-cloud-computing/dotnet-migration/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/dotnet-migration/_index.md @@ -8,14 +8,12 @@ who_is_this_for: .NET developers who want to take advantage of the cost and perf learning_objectives: - Create and compile a basic OrchardCore CMS application - Add a simple C shared library to your .NET application - - Understand the tradeoffs of building native AOT (ahead-of-time) arm64 binaries - - Learn about TieredPGO (Profile Guided Optimization) for .NET + - Learn about anyCPU hardware agnostic builds - Gain intuition about performance of different .NET versions - - .NET optimizations for huge core counts prerequisites: - An Azure account - - Installation of .NET 10 + - Installation of .NET 8 - gcc installed author: Joe Stech