You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: content/learning-paths/servers-and-cloud-computing/dotnet-migration-nopcommerce/2-environment-setup.md
+2Lines changed: 2 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -40,6 +40,8 @@ docker --version
40
40
41
41
Expected output: `Arm` (kernel strings may still show architecture-specific values). Ensure the .NET SDK version is 9.0.x.
42
42
43
+
If you are upgrading from an older .NET version before migrating to Cobalt, you can use [GitHub Copilot modernization for .NET](https://learn.microsoft.com/dotnet/core/porting/github-copilot-app-modernization/overview) to assess the project and guide the upgrade. In Visual Studio Code, open Copilot Chat and use `@modernize-dotnet`; in Visual Studio, use the Modernize action from Solution Explorer.
44
+
43
45
## PostgreSQL prerequisite for nopCommerce install
44
46
45
47
nopCommerce defaults to SQL Server, but this learning path uses PostgreSQL for Arm validation. For PostgreSQL installs, `citext` is required before migration/installation. Without it, installer migrations fail with `type "citext" does not exist` (captured in local test artifacts).
This is the scalable path for one image definition across both architectures.
52
53
54
+
## SDK version guardrail
55
+
56
+
Before choosing the SDK publish path for multi-architecture images, check the SDK version used by CI and by developer workstations:
57
+
58
+
```bash
59
+
dotnet --version
60
+
```
61
+
62
+
If you cannot use a .NET SDK version that supports multi-RID container publishing, or if SDK publish does not produce the multi-architecture image index you need, use the `docker buildx build --platform linux/amd64,linux/arm64` workflow instead. Multi-RID container publishing starts with .NET SDK versions 8.0.405, 9.0.102, and 9.0.2xx.
63
+
53
64
## Recommendation
54
65
55
66
Use SDK publish as the default migration path. Use a Dockerfile workflow for advanced layer control or custom build logic.
Copy file name to clipboardExpand all lines: content/learning-paths/servers-and-cloud-computing/dotnet-migration-nopcommerce/6-deploy-verify-cobalt.md
+26-1Lines changed: 26 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -12,9 +12,10 @@ Treat tuning as an experiment pipeline, not a one-shot tweak. On Arm, apply chan
12
12
13
13
## Tuned run configuration
14
14
15
-
Start with a conservative runtime profile that is commonly effective for server workloads.
15
+
Start with a conservative runtime profile that is commonly effective for server workloads. Keep these settings outside the application code at first so you can switch profiles without rebuilding.
Treat this as an experiment, not a default. Turning off spin waiting can reduce wasted CPU on small instances or oversubscribed containers, but it can also increase wake-up latency and reduce peak throughput. Validate it separately from the base tuned profile.
38
+
39
+
### Tiered PGO and ReadyToRun optimize different phases
40
+
41
+
`DOTNET_TieredPGO=1` and `DOTNET_ReadyToRun=1` are not the same optimization:
42
+
43
+
-`ReadyToRun` favors startup and early request latency by using precompiled code when it is available.
44
+
-`TieredPGO` favors steady-state throughput by letting the JIT recompile hot methods with runtime profile data.
45
+
- Test them together and separately if startup latency and warmed throughput both matter.
46
+
26
47
Run the same endpoint suite used in the baseline:
27
48
28
49
```bash
@@ -44,6 +65,10 @@ Use these rules before adopting a tuning profile:
44
65
- Require improvement in both throughput and p95 latency, not just one.
45
66
- Set a minimum practical threshold (for example, >=5% median gain) before rollout.
46
67
68
+
## Instance-size tradeoffs
69
+
70
+
Do not assume the same profile wins on every Azure Cobalt VM size. Smaller instances often benefit from lower CPU burn and predictable p95 latency. Larger instances often benefit from higher concurrency, but can expose GC, database, and shared-resource contention. Compare throughput, p95/p99 latency, CPU utilization, and error rate for each instance size before keeping a tuning profile.
71
+
47
72
## Interpretation
48
73
49
74
- If only one metric improves while p95 or error rate regresses, do not treat the change as a win.
0 commit comments