aboutsummaryrefslogtreecommitdiff
path: root/src/internal/runtime/syscall
diff options
context:
space:
mode:
authorLance Yang <ioworker0@gmail.com>2024-03-19 14:19:43 +0000
committerMichael Knyszek <mknyszek@google.com>2024-03-19 14:54:29 +0000
commitcb12198de57db6f514d7ef11839d446189e38f4b (patch)
treebadaa98ce8212fb9d331bee245c0abba19e0d420 /src/internal/runtime/syscall
parentb750841906c84e894dfa3ee43e0f65d94f989b01 (diff)
downloadgo-cb12198de57db6f514d7ef11839d446189e38f4b.tar.xz
runtime: optimize permission changes with mprotect
On Linux, both mprotect() and mmap() acquire the mmap_lock (in writer mode), posing scalability challenges. The mmap_lock (formerly called mmap_sem) is a reader/writer lock that controls access to a process's address space; before making changes there (mapping in a new range, for example), the kernel must acquire that lock. Page-fault handling must also acquire mmap_lock (in reader mode) to ensure that the address space doesn't change in surprising ways while a fault is being resolved. A process can have a large address space and many threads running (and incurring page faults) concurrently, turning mmap_lock into a significant bottleneck. While both mmap() and mprotect() are protected by the mmap_lock, the shorter duration of mprotect system call, due to their simpler nature, results in a reduced locking time for the mmap_lock. Change-Id: I7f929544904e31eab34d0d8a9e368abe4de64637 GitHub-Last-Rev: 6f27a216b4fb789181d00316561b44358a118b19 GitHub-Pull-Request: golang/go#65038 Reviewed-on: https://go-review.googlesource.com/c/go/+/554935 Reviewed-by: Michael Knyszek <mknyszek@google.com> Reviewed-by: Mauri de Souza Meneguzzo <mauri870@gmail.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Michael Pratt <mpratt@google.com>
Diffstat (limited to 'src/internal/runtime/syscall')
-rw-r--r--src/internal/runtime/syscall/defs_linux_386.go1
-rw-r--r--src/internal/runtime/syscall/defs_linux_amd64.go1
-rw-r--r--src/internal/runtime/syscall/defs_linux_arm.go1
-rw-r--r--src/internal/runtime/syscall/defs_linux_arm64.go1
-rw-r--r--src/internal/runtime/syscall/defs_linux_loong64.go1
-rw-r--r--src/internal/runtime/syscall/defs_linux_mips64x.go1
-rw-r--r--src/internal/runtime/syscall/defs_linux_mipsx.go1
-rw-r--r--src/internal/runtime/syscall/defs_linux_ppc64x.go1
-rw-r--r--src/internal/runtime/syscall/defs_linux_riscv64.go1
-rw-r--r--src/internal/runtime/syscall/defs_linux_s390x.go1
10 files changed, 10 insertions, 0 deletions
diff --git a/src/internal/runtime/syscall/defs_linux_386.go b/src/internal/runtime/syscall/defs_linux_386.go
index 613dc77d59..68e687fb14 100644
--- a/src/internal/runtime/syscall/defs_linux_386.go
+++ b/src/internal/runtime/syscall/defs_linux_386.go
@@ -6,6 +6,7 @@ package syscall
const (
SYS_FCNTL = 55
+ SYS_MPROTECT = 125
SYS_EPOLL_CTL = 255
SYS_EPOLL_PWAIT = 319
SYS_EPOLL_CREATE1 = 329
diff --git a/src/internal/runtime/syscall/defs_linux_amd64.go b/src/internal/runtime/syscall/defs_linux_amd64.go
index 2ba3128813..ec480f5817 100644
--- a/src/internal/runtime/syscall/defs_linux_amd64.go
+++ b/src/internal/runtime/syscall/defs_linux_amd64.go
@@ -5,6 +5,7 @@
package syscall
const (
+ SYS_MPROTECT = 10
SYS_FCNTL = 72
SYS_EPOLL_CTL = 233
SYS_EPOLL_PWAIT = 281
diff --git a/src/internal/runtime/syscall/defs_linux_arm.go b/src/internal/runtime/syscall/defs_linux_arm.go
index af3e0510b1..c5d1503012 100644
--- a/src/internal/runtime/syscall/defs_linux_arm.go
+++ b/src/internal/runtime/syscall/defs_linux_arm.go
@@ -6,6 +6,7 @@ package syscall
const (
SYS_FCNTL = 55
+ SYS_MPROTECT = 125
SYS_EPOLL_CTL = 251
SYS_EPOLL_PWAIT = 346
SYS_EPOLL_CREATE1 = 357
diff --git a/src/internal/runtime/syscall/defs_linux_arm64.go b/src/internal/runtime/syscall/defs_linux_arm64.go
index c924f6211a..f743fe31a5 100644
--- a/src/internal/runtime/syscall/defs_linux_arm64.go
+++ b/src/internal/runtime/syscall/defs_linux_arm64.go
@@ -9,6 +9,7 @@ const (
SYS_EPOLL_CTL = 21
SYS_EPOLL_PWAIT = 22
SYS_FCNTL = 25
+ SYS_MPROTECT = 226
SYS_EPOLL_PWAIT2 = 441
SYS_EVENTFD2 = 19
diff --git a/src/internal/runtime/syscall/defs_linux_loong64.go b/src/internal/runtime/syscall/defs_linux_loong64.go
index c1a5649a42..82218d1509 100644
--- a/src/internal/runtime/syscall/defs_linux_loong64.go
+++ b/src/internal/runtime/syscall/defs_linux_loong64.go
@@ -9,6 +9,7 @@ const (
SYS_EPOLL_CTL = 21
SYS_EPOLL_PWAIT = 22
SYS_FCNTL = 25
+ SYS_MPROTECT = 226
SYS_EPOLL_PWAIT2 = 441
SYS_EVENTFD2 = 19
diff --git a/src/internal/runtime/syscall/defs_linux_mips64x.go b/src/internal/runtime/syscall/defs_linux_mips64x.go
index 07c0aba539..4e0fd1f5d1 100644
--- a/src/internal/runtime/syscall/defs_linux_mips64x.go
+++ b/src/internal/runtime/syscall/defs_linux_mips64x.go
@@ -7,6 +7,7 @@
package syscall
const (
+ SYS_MPROTECT = 5010
SYS_FCNTL = 5070
SYS_EPOLL_CTL = 5208
SYS_EPOLL_PWAIT = 5272
diff --git a/src/internal/runtime/syscall/defs_linux_mipsx.go b/src/internal/runtime/syscall/defs_linux_mipsx.go
index a1bb5d720a..b87a355093 100644
--- a/src/internal/runtime/syscall/defs_linux_mipsx.go
+++ b/src/internal/runtime/syscall/defs_linux_mipsx.go
@@ -8,6 +8,7 @@ package syscall
const (
SYS_FCNTL = 4055
+ SYS_MPROTECT = 4125
SYS_EPOLL_CTL = 4249
SYS_EPOLL_PWAIT = 4313
SYS_EPOLL_CREATE1 = 4326
diff --git a/src/internal/runtime/syscall/defs_linux_ppc64x.go b/src/internal/runtime/syscall/defs_linux_ppc64x.go
index 78558b360f..8235edd795 100644
--- a/src/internal/runtime/syscall/defs_linux_ppc64x.go
+++ b/src/internal/runtime/syscall/defs_linux_ppc64x.go
@@ -8,6 +8,7 @@ package syscall
const (
SYS_FCNTL = 55
+ SYS_MPROTECT = 125
SYS_EPOLL_CTL = 237
SYS_EPOLL_PWAIT = 303
SYS_EPOLL_CREATE1 = 315
diff --git a/src/internal/runtime/syscall/defs_linux_riscv64.go b/src/internal/runtime/syscall/defs_linux_riscv64.go
index c1a5649a42..82218d1509 100644
--- a/src/internal/runtime/syscall/defs_linux_riscv64.go
+++ b/src/internal/runtime/syscall/defs_linux_riscv64.go
@@ -9,6 +9,7 @@ const (
SYS_EPOLL_CTL = 21
SYS_EPOLL_PWAIT = 22
SYS_FCNTL = 25
+ SYS_MPROTECT = 226
SYS_EPOLL_PWAIT2 = 441
SYS_EVENTFD2 = 19
diff --git a/src/internal/runtime/syscall/defs_linux_s390x.go b/src/internal/runtime/syscall/defs_linux_s390x.go
index b539b2d22a..08073c01f0 100644
--- a/src/internal/runtime/syscall/defs_linux_s390x.go
+++ b/src/internal/runtime/syscall/defs_linux_s390x.go
@@ -6,6 +6,7 @@ package syscall
const (
SYS_FCNTL = 55
+ SYS_MPROTECT = 125
SYS_EPOLL_CTL = 250
SYS_EPOLL_PWAIT = 312
SYS_EPOLL_CREATE1 = 327