aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexey Dokuchaev <danfe@FreeBSD.org>2018-03-03 09:54:21 +0000
committerAlexey Dokuchaev <danfe@FreeBSD.org>2018-03-03 09:54:21 +0000
commit2781c2091efbb3853683fe301b6a6c29418cc5c8 (patch)
treeab903d0042e7ad7b3e6cf74e8babffff45213ffd
parent121fa8087736c8ed01b71a74b49daa52e029b3d7 (diff)
downloadports-2781c2091efbb3853683fe301b6a6c29418cc5c8.tar.gz
ports-2781c2091efbb3853683fe301b6a6c29418cc5c8.zip
- Collect CPU and memory statistics originally missing on FreeBSD
- Adjust COMMENT and port description text for better readability
Notes
Notes: svn path=/head/; revision=463478
-rw-r--r--benchmarks/apib/Makefile3
-rw-r--r--benchmarks/apib/files/patch-src_apib__cpu.c102
-rw-r--r--benchmarks/apib/pkg-descr2
3 files changed, 105 insertions, 2 deletions
diff --git a/benchmarks/apib/Makefile b/benchmarks/apib/Makefile
index ed73425df41e..a948456faf1f 100644
--- a/benchmarks/apib/Makefile
+++ b/benchmarks/apib/Makefile
@@ -3,10 +3,11 @@
PORTNAME= apib
PORTVERSION= 1.0
+PORTREVISION= 1
CATEGORIES= benchmarks www
MAINTAINER= danfe@FreeBSD.org
-COMMENT= Simple, fast HTTP performance-testing tool
+COMMENT= Simple and fast HTTP performance testing tool
LICENSE= APACHE20
diff --git a/benchmarks/apib/files/patch-src_apib__cpu.c b/benchmarks/apib/files/patch-src_apib__cpu.c
new file mode 100644
index 000000000000..5aa215d2a754
--- /dev/null
+++ b/benchmarks/apib/files/patch-src_apib__cpu.c
@@ -0,0 +1,102 @@
+--- 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 <sys/types.h>
++#include <sys/sysctl.h>
++#include <sys/times.h>
++#endif
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <string.h>
+@@ -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)
+ 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)
+ }
+
+ 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)
+ 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. */
++ 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. */
++ 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)
+ cache = atol(v);
+ }
+ }
++#endif
+
+ if ((totalMem <= 0) || (freeMem <= 0)) {
+ return 0.0;
diff --git a/benchmarks/apib/pkg-descr b/benchmarks/apib/pkg-descr
index d49929dfc7a9..1f49364a897b 100644
--- a/benchmarks/apib/pkg-descr
+++ b/benchmarks/apib/pkg-descr
@@ -2,7 +2,7 @@ apib is a tool that makes it easy to test API servers. It is supported
on Unix systems that include the Apache Portable Runtime and OpenSSL.
apib has most of the features of Apache Bench (ab), but is also intended
-to be a more modern replacement. In particular, it supports:
+to be a more modern replacement. In particular, it offers:
- Proper HTTP 1.1 support including keep-alives and chunked encoding
- Ability to spawn multiple I/O threads to take advantage of multiple