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: .github/workflows/sync-openapi.yml
+4-2Lines changed: 4 additions & 2 deletions
Original file line number
Diff line number
Diff line change
@@ -1,6 +1,6 @@
1
1
name: Sync OpenAPI schema
2
2
3
-
# **What it does**: Once a day, this workflow syncs the REST, Webhooks, and GitHub Apps automated pipelines with the github/rest-api-description repository, and creates a pull request if there are updates to any of the data files we generate from the OpenAPI.
3
+
# **What it does**: Syncs the REST, Webhooks, and GitHub Apps automated pipelines with the github/rest-api-description repository, and creates a pull request if there are updates to any of the data files we generate from the OpenAPI. Runs on a weekday schedule or a `sync-openapi` repository dispatch.
4
4
# **Why we have it**: So we can automate updates to REST, Webhooks, and GitHub Apps documentation
5
5
# **Who does it impact**: Anyone making OpenAPI changes in `github/github`, and wanting to get them published on the docs site.
6
6
@@ -12,6 +12,8 @@ on:
12
12
type: string
13
13
required: true
14
14
default: 'main'
15
+
repository_dispatch:
16
+
types: [sync-openapi]
15
17
schedule:
16
18
- cron: '20 16 * * 1-5'# Run Mon-Fri at 16:20 UTC / 8:20 PST
Copy file name to clipboardExpand all lines: content/admin/enforcing-policies/enforcing-policies-for-your-enterprise/enforcing-repository-management-policies-in-your-enterprise.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -209,7 +209,7 @@ By default, repository administrators can rename branches that are targeted by e
209
209
210
210
To keep your repository size manageable and prevent performance issues, you can configure a file size limit for repositories in your enterprise.
211
211
212
-
By default, when you enforce repository upload limits, people cannot add or update files larger than 100 MB.
212
+
By default, people cannot add or update files larger than 100 MB, but you can raise or remove this limit. If you enforce your chosen limit for all repositories on the instance, individual repositories cannot use a different limit.
213
213
214
214
{% data reusables.enterprise-accounts.access-enterprise %}
215
215
{% data reusables.enterprise-accounts.policies-tab %}
Copy file name to clipboardExpand all lines: content/admin/managing-github-apps-for-your-enterprise/automate-installations.md
+2-2Lines changed: 2 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -228,13 +228,13 @@ The installation token you just received gives you permission to create a reposi
228
228
229
229
1. To check the repository was created successfully, go to `https://github.com/orgs/ORG/repositories`, replacing ORG with the name of your organization.
Copy file name to clipboardExpand all lines: content/admin/monitoring-and-managing-your-instance/additional-nodes/configuring-additional-nodes.md
+52Lines changed: 52 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -159,6 +159,58 @@ Logs are stored locally on the stateless nodes. They can be exported from these
159
159
160
160
You can use the `ghe-cluster-support-bundle` and `ghe-support-bundle` commands to generate and upload cluster or single-node bundles.
161
161
162
+
## Mitigating single-core softirq saturation
163
+
164
+
165
+
166
+
Adding a stateless node to a {% data variables.product.prodname_ghe_server %} high-availability deployment sends all traffic between two nodes over a single WireGuard tunnel. Because every packet for that node pair shares one UDP port, the network card steers it to one receive queue, and one CPU core processes all inbound packets. Under heavy traffic that core reaches 100 percent while the others stay idle, and the node drops packets. {% data variables.product.prodname_ghe_server %} includes the built-in mitigations described below.
167
+
168
+
### 1. Scale out with more stateless nodes
169
+
170
+
Each stateless node reaches the primary over its own WireGuard tunnel, so the primary processes each node's traffic on a separate receive queue and CPU core. Spreading workloads across more, smaller stateless nodes lets the load balancer share cross-tunnel load across more of the primary's cores, and this does not rely on tunnel-level hashing. Two nodes roughly halve the per-core receive load, and three cut it to about a third.
171
+
172
+
{% data variables.product.prodname_ghe_server %} sizes each node's web workers from its memory and caps its own value at 30. Keep `app.github.github-workers` near 30 per node; higher counts cost memory and, during a tunnel stall, add queue depth rather than throughput, because the extra workers block on the primary. For more capacity, add more stateless nodes.
173
+
174
+
### 2. Multi-tunnel WireGuard (opt-in)
175
+
176
+
{% data variables.product.prodname_ghe_server %} can spread inter-node traffic across several WireGuard tunnels. Each tunnel uses its own UDP port, so different connections land on different receive queues and different CPU cores share the work. Set the tunnel count to the lowest number of receive queues across your cluster nodes, the "Combined" value of `ethtool -l eth0`.
177
+
178
+
```shell copy
179
+
ghe-config wireguard.num-tunnels 8
180
+
ghe-config-apply
181
+
```
182
+
183
+
The default is 1. The maximum is 16; higher values are capped. More tunnels than the interface has receive queues adds no benefit. To revert, remove the setting and apply.
184
+
185
+
```shell copy
186
+
ghe-config --unset wireguard.num-tunnels
187
+
ghe-config-apply
188
+
```
189
+
190
+
**Before you enable (one-time):**
191
+
192
+
* In your external firewall or cloud security group, open the extra tunnel UDP ports between all nodes, including all replicas. Ports count up from 1194, so 8 tunnels use UDP 1194 to 1201. The full range requires UDP 1194 to 1209.
193
+
* Enabling multi-tunnel updates the host firewall. Apply it once by rebooting all nodes, or by reloading the firewall with `sudo ufw reload` on each node. Confirm your network security group already restricts inbound access first, as the ufw reload briefly drops and recreates the rules. Later `num-tunnels` changes do not need this step.
194
+
195
+
### 3. Local git-proxy routing on the primary (automatic)
196
+
197
+
Git requests that a stateless node would otherwise send back across the tunnel now stay on the primary, where the Git data already lives. This removes a large share of cross-tunnel packets, and needs no action. The primary uses its local Git proxy first and falls back to a remote node only if the local one is unavailable.
198
+
199
+
### 4. Capacity-based web request weighting (opt-in)
200
+
201
+
When nodes run different numbers of web workers, {% data variables.product.prodname_ghe_server %} can distribute requests in proportion to each node's worker count instead of evenly. Enable it when worker counts are uneven, for example a primary with 100 workers and a stateless node with 30.
Start by scaling out to more stateless nodes. It is the most complete option, spreads load across more of the primary's cores through the load balancer, and needs no feature flag. If a single core still saturates, enable multi-tunnel WireGuard. Enable capacity-based weighting only when worker counts differ across nodes.
213
+
162
214
## Known limitations
163
215
164
216
This feature is not designed for monorepos, but the addition of new stateless nodes may indirectly improve monorepo operations by reducing web and job workloads on the primary node. There are no autoscaling and scaledown features.
Copy file name to clipboardExpand all lines: content/admin/monitoring-and-managing-your-instance/configuring-high-availability/elasticsearch-cross-cluster-replication.md
+6-15Lines changed: 6 additions & 15 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -37,19 +37,13 @@ Before you enable CCR, confirm the following.
37
37
* Your instance is configured for high availability with at least two appliances (a primary and one or more replicas).
38
38
* You have an updated {% data variables.product.prodname_ghe_server %} license that includes the Elasticsearch entitlement required for CCR. Contact {% data variables.contact.contact_enterprise_sales %} or {% data variables.contact.github_support %} to have your enterprise enabled for the new license, then download the updated license file.
39
39
40
-
{% warning %}
41
-
42
-
**Warning:** When CCR is enabled, the upgrade preflight check requires a valid CCR-enabled license. If the flag is enabled and the license check fails, the upgrade will not proceed. Make sure your updated license is installed before you enable the feature or upgrade. If you are unsure whether your license includes the Elasticsearch entitlement, contact {% data variables.contact.github_support %}.
43
-
44
-
{% endwarning %}
40
+
> [!WARNING]
41
+
> When CCR is enabled, the upgrade preflight check requires a valid CCR-enabled license. If the flag is enabled and the license check fails, the upgrade will not proceed. Make sure your updated license is installed before you enable the feature or upgrade. If you are unsure whether your license includes the Elasticsearch entitlement, contact {% data variables.contact.github_support %}.
**Note:** The migration may take a significant amount of time depending on the size of your instance, because search data is consolidated onto the primary before replication restarts. Plan to enable CCR during a maintenance window, and test the process in a non-production environment first. For more information, see [AUTOTITLE](/admin/upgrading-your-instance).
51
-
52
-
{% endnote %}
45
+
> [!NOTE]
46
+
> The migration may take a significant amount of time depending on the size of your instance, because search data is consolidated onto the primary before replication restarts. Plan to enable CCR during a maintenance window, and test the process in a non-production environment first. For more information, see [AUTOTITLE](/admin/upgrading-your-instance).
53
47
54
48
1. Contact {% data variables.contact.github_support %} and request access to the new HA search architecture. {% data variables.product.company_short %} will enable your enterprise so that you can download the required CCR-enabled license.
55
49
1. Download your updated license and upload it to your instance. For more information, see [AUTOTITLE](/billing/how-tos/manage-server-licenses/download-your-license).
@@ -81,11 +75,8 @@ After a failover with CCR enabled, the promoted appliance becomes the new leader
**Warning:** Do not disable CCR on a production instance without guidance from {% data variables.contact.github_support %}. Disabling CCR is not a routine self-service operation. Turning the feature off can trigger removal of replica Elasticsearch data as part of returning to the previous mode.
87
-
88
-
{% endwarning %}
78
+
> [!WARNING]
79
+
> Do not disable CCR on a production instance without guidance from {% data variables.contact.github_support %}. Disabling CCR is not a routine self-service operation. Turning the feature off can trigger removal of replica Elasticsearch data as part of returning to the previous mode.
89
80
90
81
If you need to return to the previous search architecture, contact {% data variables.contact.github_support %} before making any changes. {% data variables.product.company_short %} will help you confirm that your license, replication state, and upgrade path are handled safely.
Copy file name to clipboardExpand all lines: content/code-security/how-tos/manage-security-alerts/remediate-alerts-at-scale/creating-managing-security-campaigns.md
+2-2Lines changed: 2 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -59,13 +59,13 @@ You choose the alerts that you want to include in the campaign by using either:
59
59
60
60
The security campaign is created and the campaign overview page is displayed.
61
61
62
-
{% note %}
62
+
<divclass="border rounded-2 p-3">
63
63
64
64
Did you successfully create a security campaign for your organization?
Copy file name to clipboardExpand all lines: content/code-security/how-tos/secure-at-scale/configure-organization-security/configure-specific-tools/estimate-price.md
+2-2Lines changed: 2 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -41,13 +41,13 @@ You need to have generated a secret risk assessment for your organization. See [
41
41
* The **per-committer rate** (for example, $19 per active committer).
42
42
1. To proceed with enabling {% data variables.product.prodname_secret_protection %}, click **Review and enable**.
43
43
44
-
{% note %}
44
+
<divclass="border rounded-2 p-3">
45
45
46
46
Did you successfully use the {% data variables.secret-scanning.pricing-calculator %} to estimate the cost of using {% data variables.product.prodname_secret_protection %} features on your organization?
0 commit comments