]> git.kaiwu.me - nginx.git/commitdiff
Detect cache line size at runtime on macOS.
authorPiotr Sikora <piotr@aviatrix.com>
Mon, 26 Feb 2024 20:00:40 +0000 (20:00 +0000)
committerPiotr Sikora <piotr@aviatrix.com>
Mon, 26 Feb 2024 20:00:40 +0000 (20:00 +0000)
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@aviatrix.com>
src/os/unix/ngx_darwin_init.c
src/os/unix/ngx_posix_init.c

index aabe02ff963f359380fa1bdc8fd755db02489a83..70748ee57ab139091b92055bbd018f1efc0c69fe 100644 (file)
@@ -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) {
index 7824735d0bae6878f1ea90ada865929944cee1c5..6ac931c0ce23f0682f090c52d58a7999a8202ae6 100644 (file)
@@ -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 */ }