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
DCPerf is an open source benchmarking and microbenchmarking suite, originally developed by Meta, that faithfully replicates the characteristics of various general purpose data center workloads. One of the key differentiators to alternate benchmarking software is the fidelity of micro-architectural behaviour replicated by DCPerf, for example, cache misses, branch misprediction rate etc.
25
+
26
+
The use cases of running DCPerf are to generate performance data to inform procurement decision and regression testing for changes in environment, such as kernel and compiler changes. This installation guide is to install DCPerf on Arm-based servers. This example has been tested on a AWS `c7g.metal` instance running Ubuntu 22.04 LTS.
27
+
28
+
Please Note: When running on a server provided by a cloud service provided, you will have limit access to change parameters such as BIOS settings which can impact performance.
DCPerf offers many benchmarks, please refer the official documentation for the benchmark of your choice. In this example we will run the MediaWiki benchmark. The MediaWiki benchmark is designed to faithfully reproduce the workload of the facebook social networking site. First install the dependency.
Confirm security-enhanced Linux (SELinux) is disabled with the following commands.
75
+
76
+
```bash
77
+
sudo apt install selinux-utils
78
+
getenforce
79
+
```
80
+
81
+
You should see the following response. If you do not see the `Disabled` output. Please refer to your distributions documentation on how to disable before proceeding.
82
+
83
+
```output
84
+
Disabled
85
+
```
86
+
87
+
88
+
The `install` argument to the `benchpress_cli.py` command line script can be used to automatially install all dependencies for each benchmark.
Please note this can take several minutes to do all the required steps.
95
+
96
+
97
+
## Run the MediaWiki Benchmark
98
+
99
+
For sake of brevity we will pass in duration and timeout arguments through a `JSON` dictionary with the `-i` argument.
100
+
101
+
```bash
102
+
sudo ./benchpress_cli.py run oss_performance_mediawiki_mlp -i '{
103
+
"duration": "30s",
104
+
"timeout": "1m"
105
+
}'
106
+
```
107
+
108
+
Whilst the benchmark is running you will be able to observe the various processes occupying the CPU with the `top` command.
109
+
110
+
111
+
Once the benchmark is complete, within the `DCPerf` directory a `benchmark_metrics_*` directory will be created with a `JSON` file for the system specs and metrics respectively.
Copy file name to clipboardExpand all lines: content/learning-paths/servers-and-cloud-computing/bolt/_index.md
+4-4Lines changed: 4 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -5,13 +5,13 @@ minutes_to_complete: 30
5
5
6
6
who_is_this_for: This is an introductory topic for software developers who want to learn how to use BOLT on an Arm executable.
7
7
8
-
learning_objectives:
9
-
- Build an application which is ready to be optimized by BOLT
8
+
learning_objectives:
9
+
- Build an application which is ready to be optimized by BOLT
10
10
- Profile an application and collect performance information
11
-
- Run BOLT to create an optimized executable
11
+
- Run BOLT to create an optimized executable
12
12
13
13
prerequisites:
14
-
- An Arm based system running Linux with [BOLT](/install-guides/bolt/) and [Linux Perf](/install-guides/perf/) installed. The Linux kernel should be version 5.15 or later. Earlier kernel versions can be used, but some Linux Perf features may be limited or not available.
14
+
- An Arm based system running Linux with [BOLT](/install-guides/bolt/) and [Linux Perf](/install-guides/perf/) installed. The Linux kernel should be version 5.15 or later. Earlier kernel versions can be used, but some Linux Perf features may be limited or not available. For [SPE](./bolt-spe) the version should be 6.14 or later.
15
15
- (Optional) A second, more powerful Linux system to build the software executable and run BOLT.
Copy file name to clipboardExpand all lines: content/learning-paths/servers-and-cloud-computing/bolt/bolt-spe.md
+34-28Lines changed: 34 additions & 28 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -7,59 +7,60 @@ layout: learningpathall
7
7
---
8
8
9
9
## BOLT with SPE
10
+
The steps to use BOLT with Perf SPE are listed below.
10
11
11
-
{{% notice Important Note %}}
12
-
Currently, BOLT may not generate a faster binary when using Perf SPE due to limitations within `perf` and BOLT itself.
13
-
For more information and the latest updates see: [[AArch64] BOLT does not support SPE branch data](https://github.com/llvm/llvm-project/issues/115333).
14
-
{{% /notice %}}
12
+
### Collect Perf data with SPE
15
13
16
-
The steps to use BOLT with Perf SPE are listed below.
14
+
First, make sure you are using Linux Perf version v6.14 or later, which supports the 'brstack' field and captures all branch information.
17
15
18
-
### Collect Perf data with SPE
16
+
```bash { output_lines = "2" }
17
+
perf --version
18
+
perf version 6.14
19
+
```
19
20
20
-
Run your executable in the normal use case and collect a SPE performance profile. This will output a `perf.data` file containing the profile and will be used to optimize the executable.
21
+
Next, run your executable in the normal use case to collect an SPE performance profile. This generates a `perf.data` file containing the profile, which will be used to optimize the executable.
21
22
22
-
Record samples while running your application. Substitute the actual name of your application for `executable`:
23
+
Record samples while running your application, replacing `executable` below:
23
24
24
25
```bash { target="ubuntu:latest" }
25
-
perf record -e arm_spe/branch_filter=1/u -o perf.data-- ./executable
26
+
perf record -e 'arm_spe/branch_filter=1/u' -o perf.data-- ./executable
26
27
```
28
+
Once the execution is complete, perf will print a summary that includes the size of the `perf.data` file:
27
29
28
-
Perf prints the size of the `perf.data` file:
29
-
30
-
```output
30
+
```bash { target="ubuntu:latest" }
31
31
[ perf record: Woken up 79 times to write data ]
32
32
[ perf record: Captured and wrote 4.910 MB perf.data ]
33
33
```
34
34
35
-
### Convert the Profile into BOLT format
35
+
The `-jitter=1` flag can help avoid resonance, while `-c`/`--count` controls the sampling period.
36
+
37
+
### Convert the Profile to BOLT format
36
38
37
-
`perf2bolt` converts the profile into a BOLT data format. For the given sample data, `perf2bolt` finds all instruction pointers in the profile, maps them back to the assembly instructions, and outputs a count of how many times each assembly instruction was sampled.
39
+
`perf2bolt` converts the profile into BOLT's data format. It maps branch events from the profileto assembly instructions and outputs branch execution traces with sample counts.
38
40
39
-
If you application is named `executable`, run the commend below to convert the profile data:
41
+
If you application is named `executable`, run the command below to convert the profile data:
Copy file name to clipboardExpand all lines: content/learning-paths/servers-and-cloud-computing/cobalt/1-create-cobalt-vm.md
+16-12Lines changed: 16 additions & 12 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -8,25 +8,29 @@ layout: learningpathall
8
8
9
9
## Use the Azure Portal to deploy a Cobalt 100 VM
10
10
11
-
Cobalt 100 is Microsoft’s first Arm-based server processor, built using the Armv9 Neoverse-N2 CPU. The Cobalt 100 processor is optimized for the performance of scale-out cloud-based applications.
11
+
Cobalt 100 is Microsoft’s first Arm-based server processor, built on the Armv9 Neoverse-N2 CPU architecture. It is optimized for the performance and efficiency of scale-out, cloud-based applications.
12
12
13
-
The Azure Cobalt 100 VM instances include two series:
13
+
Azure offers Cobalt 100–powered virtual machines in two series:
14
+
15
+
-**Dpsv6** and **Dplsv6** (general-purpose)
16
+
-**Epsv6** (memory-optimized)
14
17
15
-
The general-purpose Dpsv6 and Dplsv6 virtual machine series.
16
-
The memory-optimized Epsv6 virtual machine series.
17
18
18
19
To create a Cobalt 100 VM, follow these steps:
19
20
20
21
1. Sign in to the [Azure Portal](https://portal.azure.com/).
21
22
2. Select **Create a resource → Compute → Virtual machine**.
22
-
3. Complete the *Basics* tab:
23
-

24
-
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.
23
+
3. Complete the fields in the **Basics** tab using the values shown in the figure below:
24
+
25
+

26
+
27
+
Cobalt 100 powers the Dpsv6 and Dplsv6 series. Selecting **Standard_D4ps_v6** creates a Cobalt VM with four physical cores.
28
+
You can choose a different size if you need more or fewer cores.
25
29
4. Upload your public SSH key or generate a new one in the wizard.
26
-
5.Disallow public inbound ports for now.
27
-
5. Accept the defaults on the *Disks* tab.
28
-
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.
30
+
5.For the **Public inbound ports** field, select **None**.
31
+
6. On the **Disks** tab, accept the default options.
32
+
7. On the **Networking** tab, ensure that a **Public IP** is selected. You will need it to connect to the VM later. Leave the NSG settings as **Basic**.
29
33
30
-
Click **Review + create** followed by **Create**. Azure now deploys the VM and the automatically-generated Network Security Group (NSG). Provisioning takes ~2 minutes.
34
+
8. Select **Review + create**, then **Create**. Azure deploys the VM and the automatically-generated Network Security Group (NSG). Provisioning takes ~2 minutes.
31
35
32
-
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.
36
+
9.Navigate to the **Deployment in progress** pane or open the **Notifications** panel to track progress. When the deployment completes, proceed to the next step to expose an inbound port.
title: Open an inbound port in the Network Security Group
2
+
title: Open inbound ports in the Network Security Group
3
3
weight: 3
4
4
5
5
### FIXED, DO NOT MODIFY
@@ -8,16 +8,20 @@ layout: learningpathall
8
8
9
9
## Allow external traffic to TCP ports 22 (SSH) and 8080
10
10
11
-
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.
11
+
Every new virtual machine created through the Azure wizard is associated with a **Network Security Group (NSG)**. An NSG acts as a stateful firewall – if no rule explicitly allows traffic, Azure blocks it by default.
12
12
13
-
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.
13
+
In this step, you'll open port 22 for SSH and 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.
14
14
15
-
1. In the Azure Portal open the newlycreated VM resource and click**Networking → Network settings**in the left nav.
15
+
1. In the Azure Portal, open the newly-created VM resource and select**Networking → Network settings**from the left-hand menu.
16
16
2. Select the **Network security group**.
17
-
3. Click on **Create Port Rule** and from the drop-down men select **Inbound port rule**
18
-
4. Fill in the form, specifying **My IP address** as the source and 22 as the destination port:
19
-

20
-
5. Click **Add**.
21
-
To open port 8080, follow steps 3 through 5 again, but instead choose port 8080 for the destination port.
17
+
3. Select **Create Port Rule**, then choose **Inbound port rule** from the drop-down menu.
22
18
23
-
You have now opened ports 22 and 8080 to your IP. In the next step you will verify connectivity.
19
+
4. Fill in the form with **My IP address** as the source and 22 as the destination port:
20
+
21
+

22
+
23
+
5. Select **Add**.
24
+
25
+
6. To open port 8080, repeat steps 3-5 and enter 8080 as the destination port.
26
+
27
+
You have now opened ports 22 and 8080 to your IP. In the next step, you'll verify connectivity from your local machine.
Copy file name to clipboardExpand all lines: content/learning-paths/servers-and-cloud-computing/cobalt/3-verify-connectivity.md
+12-11Lines changed: 12 additions & 11 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -8,20 +8,19 @@ layout: learningpathall
8
8
9
9
## Connect over SSH and test the open port
10
10
11
-
1. On the **Overview** page for the VM copy the **Public IP address**.
12
-
2. Open a terminal on your local machine and SSH to the VM (replace *azureuser* if you chose a different admin username):
11
+
On the **Overview** page of the VM, copy the **Public IP address**. Open a terminal on your local machine, and SSH to the VM (replace *azureuser* if you chose a different admin username):
13
12
14
13
```bash
15
14
ssh -i [path to your pem file] azureuser@[public IP]
16
15
```
17
16
18
-
Where`[public IP]`is your public IP and `[path to your pem file]`is the path to your SSH key file.
17
+
Replace`[public IP]`with your VM's public IP address, and `[path to your pem file]`with the path to your SSH private key file.
19
18
20
-
Accept the prompt to add the host to *known_hosts*the first time you connect.
19
+
When prompted, confirm the connection to add the VM to your *known_hosts*file.
21
20
22
-
### Start a simple HTTP server
21
+
### Start a temporary HTTP server
23
22
24
-
If you do not already have an application listening on TCP 8080 you can start one temporarily:
23
+
If you don't already have an application listening on TCP 8080, you can start one temporarily:
25
24
26
25
```bash
27
26
sudo apt update -y && sudo apt install -y python3
@@ -32,16 +31,18 @@ Leave this terminal open – the server runs in the foreground.
32
31
33
32
### Test from your local machine
34
33
35
-
In a second local terminal run `curl` to confirm you can reach the server through the NSG rule you created:
34
+
In a second local terminal run `curl` to confirm that you can reach the server through the NSG rule you created:
36
35
37
36
```bash
38
37
curl http://[public IP]:8080
39
38
```
40
39
41
-
Where`[public IP]`is your public IP.
40
+
Replace`[public IP]`with your VM's public IP address.
42
41
43
-
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.
42
+
You should see an HTML directory listing (or your application response). A successful response confirms that TCP port 8080 is open and the VM is reachable from the public internet.
44
43
45
-
Terminate the Python server when you are finished testing (press `Ctrl + C`).
44
+
To stop the server, press `Ctrl + C`.
46
45
47
-
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/).
46
+
You now have an Arm-based Cobalt 100 VM with port 8080 open and ready to receive external traffic. You can use it to run any test server or deploy your own application.
47
+
48
+
To learn about optimizing .NET workloads on Cobalt, check out [Migrating a .NET application to Azure Cobalt](../../dotnet-migration/).
0 commit comments