]> git.kaiwu.me - nginx.git/commitdiff
Use sysconf to determine cacheline size at runtime.
authorDebayan Ghosh <debayang.qdt@qualcommdatacenter.com>
Mon, 11 Dec 2017 16:28:11 +0000 (16:28 +0000)
committerDebayan Ghosh <debayang.qdt@qualcommdatacenter.com>
Mon, 11 Dec 2017 16:28:11 +0000 (16:28 +0000)
Determine cacheline size at runtime if supported
using sysconf(_SC_LEVEL1_DCACHE_LINESIZE). In case not supported,
fallback to compile time defaults.

auto/unix
src/os/unix/ngx_posix_init.c

index f6f29027506d7205b374a162f7bc9380cf8de85f..3be8b27a597c323205db08ded0f2a966434081ef 100644 (file)
--- a/auto/unix
+++ b/auto/unix
@@ -964,6 +964,16 @@ ngx_feature_test="sysconf(_SC_NPROCESSORS_ONLN)"
 . auto/feature
 
 
+ngx_feature="sysconf(_SC_LEVEL1_DCACHE_LINESIZE)"
+ngx_feature_name="NGX_HAVE_LEVEL1_DCACHE_LINESIZE"
+ngx_feature_run=no
+ngx_feature_incs=
+ngx_feature_path=
+ngx_feature_libs=
+ngx_feature_test="sysconf(_SC_LEVEL1_DCACHE_LINESIZE)"
+. auto/feature
+
+
 ngx_feature="openat(), fstatat()"
 ngx_feature_name="NGX_HAVE_OPENAT"
 ngx_feature_run=no
index 583ea4ff925243a4794a88c182b94e21bfa2ae45..7824735d0bae6878f1ea90ada865929944cee1c5 100644 (file)
@@ -36,6 +36,9 @@ ngx_os_init(ngx_log_t *log)
 {
     ngx_time_t  *tp;
     ngx_uint_t   n;
+#if (NGX_HAVE_LEVEL1_DCACHE_LINESIZE)
+    long         size;
+#endif
 
 #if (NGX_HAVE_OS_SPECIFIC_INIT)
     if (ngx_os_specific_init(log) != NGX_OK) {
@@ -62,6 +65,13 @@ ngx_os_init(ngx_log_t *log)
         ngx_ncpu = 1;
     }
 
+#if (NGX_HAVE_LEVEL1_DCACHE_LINESIZE)
+    size = sysconf(_SC_LEVEL1_DCACHE_LINESIZE);
+    if (size > 0) {
+        ngx_cacheline_size = size;
+    }
+#endif
+
     ngx_cpuinfo();
 
     if (getrlimit(RLIMIT_NOFILE, &rlmt) == -1) {