Use sysconf to determine cacheline size at runtime.

Determine cacheline size at runtime if supported
using sysconf(_SC_LEVEL1_DCACHE_LINESIZE). In case not supported,
fallback to compile time defaults.
This commit is contained in:
Debayan Ghosh 2017-12-11 16:28:11 +00:00
parent f91a2640b9
commit c4fe79eb6e
2 changed files with 20 additions and 0 deletions

View file

@ -964,6 +964,16 @@ ngx_feature_test="sysconf(_SC_NPROCESSORS_ONLN)"
. auto/feature . 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="openat(), fstatat()"
ngx_feature_name="NGX_HAVE_OPENAT" ngx_feature_name="NGX_HAVE_OPENAT"
ngx_feature_run=no ngx_feature_run=no

View file

@ -36,6 +36,9 @@ ngx_os_init(ngx_log_t *log)
{ {
ngx_time_t *tp; ngx_time_t *tp;
ngx_uint_t n; ngx_uint_t n;
#if (NGX_HAVE_LEVEL1_DCACHE_LINESIZE)
long size;
#endif
#if (NGX_HAVE_OS_SPECIFIC_INIT) #if (NGX_HAVE_OS_SPECIFIC_INIT)
if (ngx_os_specific_init(log) != NGX_OK) { if (ngx_os_specific_init(log) != NGX_OK) {
@ -62,6 +65,13 @@ ngx_os_init(ngx_log_t *log)
ngx_ncpu = 1; 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(); ngx_cpuinfo();
if (getrlimit(RLIMIT_NOFILE, &rlmt) == -1) { if (getrlimit(RLIMIT_NOFILE, &rlmt) == -1) {