[nginx] Detect cache line size at runtime on macOS.
Sergey Kandaurov
pluknet at nginx.com
Wed Mar 27 17:46:40 UTC 2024
details: https://hg.nginx.org/nginx/rev/61cd12c25878
branches:
changeset: 9231:61cd12c25878
user: Piotr Sikora <piotr at aviatrix.com>
date: Mon Feb 26 20:00:40 2024 +0000
description:
Detect cache line size at runtime on macOS.
Notably, Apple Silicon CPUs have 128 byte cache line size,
which is twice the default configured for generic aarch64.
Signed-off-by: Piotr Sikora <piotr at aviatrix.com>
diffstat:
src/os/unix/ngx_darwin_init.c | 16 +++++++++++-----
src/os/unix/ngx_posix_init.c | 5 ++++-
2 files changed, 15 insertions(+), 6 deletions(-)
diffs (55 lines):
diff -r fb989e24c60a -r 61cd12c25878 src/os/unix/ngx_darwin_init.c
--- a/src/os/unix/ngx_darwin_init.c Mon Feb 26 20:00:38 2024 +0000
+++ b/src/os/unix/ngx_darwin_init.c Mon Feb 26 20:00:40 2024 +0000
@@ -9,11 +9,12 @@
#include <ngx_core.h>
-char ngx_darwin_kern_ostype[16];
-char ngx_darwin_kern_osrelease[128];
-int ngx_darwin_hw_ncpu;
-int ngx_darwin_kern_ipc_somaxconn;
-u_long ngx_darwin_net_inet_tcp_sendspace;
+char ngx_darwin_kern_ostype[16];
+char ngx_darwin_kern_osrelease[128];
+int ngx_darwin_hw_ncpu;
+int ngx_darwin_kern_ipc_somaxconn;
+u_long ngx_darwin_net_inet_tcp_sendspace;
+int64_t ngx_darwin_hw_cachelinesize;
ngx_uint_t ngx_debug_malloc;
@@ -56,6 +57,10 @@ sysctl_t sysctls[] = {
&ngx_darwin_kern_ipc_somaxconn,
sizeof(ngx_darwin_kern_ipc_somaxconn), 0 },
+ { "hw.cachelinesize",
+ &ngx_darwin_hw_cachelinesize,
+ sizeof(ngx_darwin_hw_cachelinesize), 0 },
+
{ NULL, NULL, 0, 0 }
};
@@ -155,6 +160,7 @@ ngx_os_specific_init(ngx_log_t *log)
return NGX_ERROR;
}
+ ngx_cacheline_size = ngx_darwin_hw_cachelinesize;
ngx_ncpu = ngx_darwin_hw_ncpu;
if (ngx_darwin_kern_ipc_somaxconn > 32767) {
diff -r fb989e24c60a -r 61cd12c25878 src/os/unix/ngx_posix_init.c
--- a/src/os/unix/ngx_posix_init.c Mon Feb 26 20:00:38 2024 +0000
+++ b/src/os/unix/ngx_posix_init.c Mon Feb 26 20:00:40 2024 +0000
@@ -51,7 +51,10 @@ ngx_os_init(ngx_log_t *log)
}
ngx_pagesize = getpagesize();
- ngx_cacheline_size = NGX_CPU_CACHE_LINE;
+
+ if (ngx_cacheline_size == 0) {
+ ngx_cacheline_size = NGX_CPU_CACHE_LINE;
+ }
for (n = ngx_pagesize; n >>= 1; ngx_pagesize_shift++) { /* void */ }
More information about the nginx-devel
mailing list