diff options
Diffstat (limited to 'src/os')
| -rw-r--r-- | src/os/unix/ngx_files.h | 13 | ||||
| -rw-r--r-- | src/os/unix/ngx_freebsd_config.h | 1 | ||||
| -rw-r--r-- | src/os/unix/ngx_posix_config.h | 1 | ||||
| -rw-r--r-- | src/os/unix/ngx_process.h | 1 | ||||
| -rw-r--r-- | src/os/unix/ngx_process_cycle.c | 17 | ||||
| -rw-r--r-- | src/os/unix/ngx_setaffinity.c | 69 | ||||
| -rw-r--r-- | src/os/unix/ngx_setaffinity.h | 23 | ||||
| -rw-r--r-- | src/os/unix/ngx_solaris_config.h | 1 |
8 files changed, 110 insertions, 16 deletions
diff --git a/src/os/unix/ngx_files.h b/src/os/unix/ngx_files.h index ffe732c47..9c97e2bb7 100644 --- a/src/os/unix/ngx_files.h +++ b/src/os/unix/ngx_files.h @@ -200,14 +200,25 @@ void ngx_close_file_mapping(ngx_file_mapping_t *fm); #endif -#define ngx_realpath(p, r) realpath((char *) p, (char *) r) +#define ngx_realpath(p, r) (u_char *) realpath((char *) p, (char *) r) #define ngx_realpath_n "realpath()" #define ngx_getcwd(buf, size) (getcwd((char *) buf, size) != NULL) #define ngx_getcwd_n "getcwd()" #define ngx_path_separator(c) ((c) == '/') + +#if defined(PATH_MAX) + +#define NGX_HAVE_MAX_PATH 1 #define NGX_MAX_PATH PATH_MAX +#else + +#define NGX_MAX_PATH 4096 + +#endif + + #define NGX_DIR_MASK_LEN 0 diff --git a/src/os/unix/ngx_freebsd_config.h b/src/os/unix/ngx_freebsd_config.h index 460581a7b..5b3ff278c 100644 --- a/src/os/unix/ngx_freebsd_config.h +++ b/src/os/unix/ngx_freebsd_config.h @@ -23,6 +23,7 @@ #include <grp.h> #include <dirent.h> #include <glob.h> +#include <time.h> #include <sys/param.h> /* ALIGN() */ #include <sys/mount.h> /* statfs() */ diff --git a/src/os/unix/ngx_posix_config.h b/src/os/unix/ngx_posix_config.h index a0a2c8ce8..4d432a7e3 100644 --- a/src/os/unix/ngx_posix_config.h +++ b/src/os/unix/ngx_posix_config.h @@ -45,6 +45,7 @@ #include <grp.h> #include <dirent.h> #include <glob.h> +#include <time.h> #if (NGX_HAVE_SYS_PARAM_H) #include <sys/param.h> /* statfs() */ #endif diff --git a/src/os/unix/ngx_process.h b/src/os/unix/ngx_process.h index bd0252bd8..7b5e8c0c2 100644 --- a/src/os/unix/ngx_process.h +++ b/src/os/unix/ngx_process.h @@ -9,6 +9,7 @@ #define _NGX_PROCESS_H_INCLUDED_ +#include <ngx_setaffinity.h> #include <ngx_setproctitle.h> diff --git a/src/os/unix/ngx_process_cycle.c b/src/os/unix/ngx_process_cycle.c index 2b6f4c72a..82cf8e6ca 100644 --- a/src/os/unix/ngx_process_cycle.c +++ b/src/os/unix/ngx_process_cycle.c @@ -62,7 +62,7 @@ ngx_int_t ngx_threads_n; #endif -u_long cpu_affinity; +uint64_t cpu_affinity; static u_char master_process[] = "master process"; @@ -913,23 +913,10 @@ ngx_worker_process_init(ngx_cycle_t *cycle, ngx_uint_t priority) } } -#if (NGX_HAVE_SCHED_SETAFFINITY) - if (cpu_affinity) { - ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0, - "sched_setaffinity(0x%08Xl)", cpu_affinity); - - if (sched_setaffinity(0, sizeof(cpu_affinity), - (cpu_set_t *) &cpu_affinity) - == -1) - { - ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno, - "sched_setaffinity(0x%08Xl) failed", cpu_affinity); - } + ngx_setaffinity(cpu_affinity, cycle->log); } -#endif - #if (NGX_HAVE_PR_SET_DUMPABLE) /* allow coredump after setuid() in Linux 2.4.x */ diff --git a/src/os/unix/ngx_setaffinity.c b/src/os/unix/ngx_setaffinity.c new file mode 100644 index 000000000..8f6cf3594 --- /dev/null +++ b/src/os/unix/ngx_setaffinity.c @@ -0,0 +1,69 @@ + +/* + * Copyright (C) Nginx, Inc. + */ + + +#include <ngx_config.h> +#include <ngx_core.h> + + +#if (NGX_HAVE_CPUSET_SETAFFINITY) + +#include <sys/cpuset.h> + +void +ngx_setaffinity(uint64_t cpu_affinity, ngx_log_t *log) +{ + cpuset_t mask; + ngx_uint_t i; + + ngx_log_error(NGX_LOG_NOTICE, log, 0, + "cpuset_setaffinity(0x%08Xl)", cpu_affinity); + + CPU_ZERO(&mask); + i = 0; + do { + if (cpu_affinity & 1) { + CPU_SET(i, &mask); + } + i++; + cpu_affinity >>= 1; + } while (cpu_affinity); + + if (cpuset_setaffinity(CPU_LEVEL_WHICH, CPU_WHICH_PID, -1, + sizeof(cpuset_t), &mask) == -1) + { + ngx_log_error(NGX_LOG_ALERT, log, ngx_errno, + "cpuset_setaffinity() failed"); + } +} + +#elif (NGX_HAVE_SCHED_SETAFFINITY) + +void +ngx_setaffinity(uint64_t cpu_affinity, ngx_log_t *log) +{ + cpu_set_t mask; + ngx_uint_t i; + + ngx_log_error(NGX_LOG_NOTICE, log, 0, + "sched_setaffinity(0x%08Xl)", cpu_affinity); + + CPU_ZERO(&mask); + i = 0; + do { + if (cpu_affinity & 1) { + CPU_SET(i, &mask); + } + i++; + cpu_affinity >>= 1; + } while (cpu_affinity); + + if (sched_setaffinity(0, sizeof(cpu_set_t), &mask) == -1) { + ngx_log_error(NGX_LOG_ALERT, log, ngx_errno, + "sched_setaffinity() failed"); + } +} + +#endif diff --git a/src/os/unix/ngx_setaffinity.h b/src/os/unix/ngx_setaffinity.h new file mode 100644 index 000000000..33f5835de --- /dev/null +++ b/src/os/unix/ngx_setaffinity.h @@ -0,0 +1,23 @@ + +/* + * Copyright (C) Nginx, Inc. + */ + +#ifndef _NGX_SETAFFINITY_H_INCLUDED_ +#define _NGX_SETAFFINITY_H_INCLUDED_ + + +#if (NGX_HAVE_SCHED_SETAFFINITY || NGX_HAVE_CPUSET_SETAFFINITY) + +#define NGX_HAVE_CPU_AFFINITY 1 + +void ngx_setaffinity(uint64_t cpu_affinity, ngx_log_t *log); + +#else + +#define ngx_setaffinity(cpu_affinity, log) + +#endif + + +#endif /* _NGX_SETAFFINITY_H_INCLUDED_ */ diff --git a/src/os/unix/ngx_solaris_config.h b/src/os/unix/ngx_solaris_config.h index 8a86fe610..e664ba826 100644 --- a/src/os/unix/ngx_solaris_config.h +++ b/src/os/unix/ngx_solaris_config.h @@ -29,6 +29,7 @@ #include <grp.h> #include <dirent.h> #include <glob.h> +#include <time.h> #include <sys/statvfs.h> /* statvfs() */ #include <sys/filio.h> /* FIONBIO */ |
