Index: head/benchmarks/apib/files/patch-src_apib__cpu.c =================================================================== --- head/benchmarks/apib/files/patch-src_apib__cpu.c (revision 463479) +++ head/benchmarks/apib/files/patch-src_apib__cpu.c (revision 463480) @@ -1,102 +1,103 @@ --- src/apib_cpu.c.orig 2017-08-28 22:38:37 UTC +++ src/apib_cpu.c @@ -14,6 +14,11 @@ limitations under the License. */ +#ifdef __FreeBSD__ +#include +#include +#include +#endif #include #include #include @@ -35,6 +40,9 @@ static double TicksPerSecond; * for hyperthreading, etc. */ int cpu_Count(apr_pool_t* pool) { +#ifdef _SC_NPROCESSORS_ONLN + return (int)sysconf(_SC_NPROCESSORS_ONLN); +#else apr_status_t s; apr_file_t* f; char buf[PROC_BUF_LEN]; -@@ -66,10 +74,19 @@ int cpu_Count(apr_pool_t* pool) +@@ -66,10 +74,20 @@ int cpu_Count(apr_pool_t* pool) count = 1; } return count; +#endif } static int getTicks(CPUUsage* cpu, apr_pool_t* pool) { +#ifdef __FreeBSD__ + struct tms ticks; ++ + cpu->idle = times(&ticks); + if (cpu->idle == -1) + return 0; + cpu->nonIdle = ticks.tms_utime + ticks.tms_stime; + return 1; +#else apr_status_t s; apr_file_t* proc; char buf[PROC_BUF_LEN]; -@@ -118,10 +135,12 @@ static int getTicks(CPUUsage* cpu, apr_pool_t* pool) +@@ -118,10 +136,12 @@ static int getTicks(CPUUsage* cpu, apr_pool_t* pool) } return 0; +#endif } double cpu_GetMemoryUsage(apr_pool_t* pool) { +#ifdef __linux__ apr_status_t s; apr_file_t* proc; char buf[PROC_BUF_LEN]; -@@ -138,12 +157,36 @@ double cpu_GetMemoryUsage(apr_pool_t* pool) +@@ -138,12 +158,36 @@ double cpu_GetMemoryUsage(apr_pool_t* pool) if (s != APR_SUCCESS) { return 0.0; } +#endif long totalMem = 0; long freeMem = 0; long buffers = 0; long cache = 0; +#ifdef __FreeBSD__ -+ /* Let's work with kilobytes. */ ++ /* We work with kilobytes to match Linux' /proc/meminfo. */ + long pagesize = sysconf(_SC_PAGESIZE) / 1024; + totalMem = sysconf(_SC_PHYS_PAGES) * pagesize; + + size_t len; + + unsigned free; + len = sizeof(free); + sysctlbyname("vm.stats.vm.v_free_count", &free, &len, NULL, 0); + freeMem = free * pagesize; + + /* `buffers' is of expected type (long), no need for another variable. */ + len = sizeof(buffers); + sysctlbyname("vfs.bufspace", &buffers, &len, NULL, 0); + buffers /= 1024; + -+ /* `cache' is number of inactive pages since r309017. */ ++ /* `cache' is based on number of inactive pages since r309017. */ + unsigned inact; + len = sizeof(inact); + sysctlbyname("vm.stats.vm.v_inactive_count", &inact, &len, NULL, 0); + cache = inact * pagesize; +#else while (linep_NextLine(&line)) { char* n = linep_NextToken(&line, " "); char* v = linep_NextToken(&line, " "); -@@ -158,6 +201,7 @@ double cpu_GetMemoryUsage(apr_pool_t* pool) +@@ -158,6 +202,7 @@ double cpu_GetMemoryUsage(apr_pool_t* pool) cache = atol(v); } } +#endif if ((totalMem <= 0) || (freeMem <= 0)) { return 0.0;