diff options
author | jmcneill <jmcneill@pkgsrc.org> | 2019-10-06 11:35:16 +0000 |
---|---|---|
committer | jmcneill <jmcneill@pkgsrc.org> | 2019-10-06 11:35:16 +0000 |
commit | 64f0d28dd3b2b8767112147274dc7ca6145a4116 (patch) | |
tree | 4986b9e7599fb3a2ab26e9bb93db9e4808df9cd9 /sysutils/estd | |
parent | b410a61af09d3bac04fdfc3c9107bec04274149d (diff) | |
download | pkgsrc-64f0d28dd3b2b8767112147274dc7ca6145a4116.tar.gz |
Add "Generic Multi-domain Mode" support and track CPU usage on a per-domain
basis when enabled.
Diffstat (limited to 'sysutils/estd')
-rw-r--r-- | sysutils/estd/Makefile | 4 | ||||
-rw-r--r-- | sysutils/estd/distinfo | 5 | ||||
-rw-r--r-- | sysutils/estd/patches/patch-estd.1 | 28 | ||||
-rw-r--r-- | sysutils/estd/patches/patch-estd.c | 188 |
4 files changed, 218 insertions, 7 deletions
diff --git a/sysutils/estd/Makefile b/sysutils/estd/Makefile index dcafe60ce0e..08cffeefb1b 100644 --- a/sysutils/estd/Makefile +++ b/sysutils/estd/Makefile @@ -1,8 +1,8 @@ -# $NetBSD: Makefile,v 1.35 2019/08/14 21:36:09 macallan Exp $ +# $NetBSD: Makefile,v 1.36 2019/10/06 11:35:16 jmcneill Exp $ DISTNAME= estd-r11 PKGNAME= estd-0.11 -PKGREVISION= 2 +PKGREVISION= 3 CATEGORIES= sysutils MASTER_SITES= http://flpsed.org/ diff --git a/sysutils/estd/distinfo b/sysutils/estd/distinfo index ff1eba67cd8..599ee1c01da 100644 --- a/sysutils/estd/distinfo +++ b/sysutils/estd/distinfo @@ -1,8 +1,9 @@ -$NetBSD: distinfo,v 1.23 2017/10/25 21:38:52 khorben Exp $ +$NetBSD: distinfo,v 1.24 2019/10/06 11:35:16 jmcneill Exp $ SHA1 (estd-r11.tar.gz) = 6c1148d66ff93b2e45af0411f1234fcccd1a2407 RMD160 (estd-r11.tar.gz) = 261a6a79e54f2502a50aad79e336259604376f3c SHA512 (estd-r11.tar.gz) = 37b005ab451f7a26248064cee5736ca43c6345b419e00050186158d5830fe96035fa78d2651a908899e6c61d44b1aaeb8b3cac0fbde19fb4c82976f709b011dc Size (estd-r11.tar.gz) = 9361 bytes SHA1 (patch-aa) = 6671d042e8b593b33e8633d657b14acaf3f115eb -SHA1 (patch-estd.c) = e813e795a18fa16ced0070fe7485dff3f3de61ac +SHA1 (patch-estd.1) = 9e58f33fc722681728306c92678e1cfe6d5b373e +SHA1 (patch-estd.c) = 1cfdf7b8f90152c1b420ada3f22c297f1256f98e diff --git a/sysutils/estd/patches/patch-estd.1 b/sysutils/estd/patches/patch-estd.1 new file mode 100644 index 00000000000..838393cacb0 --- /dev/null +++ b/sysutils/estd/patches/patch-estd.1 @@ -0,0 +1,28 @@ +$NetBSD: patch-estd.1,v 1.1 2019/10/06 11:35:16 jmcneill Exp $ + +Document Generic Multi-domain Mode. + +--- estd.1.orig 2015-02-18 21:38:03.000000000 +0000 ++++ estd.1 +@@ -1,9 +1,9 @@ +-.TH estd 1 "February 18, 2015" "release 11" "USER COMMANDS" ++.TH estd 1 "October 6, 2019" "release 11" "USER COMMANDS" + .SH NAME + estd \- Enhanced SpeedStep & PowerNow management daemon + .SH SYNOPSIS + .B estd +-[\-d] [\-o] [\-A] [\-C] [\-E] [\-I] [\-L] [\-R] [\-P] [\-G] [\-a] [\-s] [\-b] [\-p interval] [\-g period] [\-l low] [\-h high] [\-m minimum] [\-M maximum] ++[\-d] [\-o] [\-A] [\-C] [\-D] [\-E] [\-I] [\-L] [\-R] [\-P] [\-G] [\-a] [\-s] [\-b] [\-p interval] [\-g period] [\-l low] [\-h high] [\-m minimum] [\-M maximum] + .PP + .B estd + -f +@@ -51,6 +51,9 @@ clock modulation feature will be turned + speed mode is chosen by estd, in which case the lowest clock duty cycle + is used (this feature is not available on Dragonfly BSD) + .TP ++\-D ++Force Generic Multi-domain Mode. ++.TP + \-E + Force Enhanced Speedstep-Mode. + .TP diff --git a/sysutils/estd/patches/patch-estd.c b/sysutils/estd/patches/patch-estd.c index cbef47a4d86..b6ddd13cb11 100644 --- a/sysutils/estd/patches/patch-estd.c +++ b/sysutils/estd/patches/patch-estd.c @@ -1,10 +1,192 @@ -$NetBSD: patch-estd.c,v 1.1 2015/03/06 18:08:38 khorben Exp $ +$NetBSD: patch-estd.c,v 1.2 2019/10/06 11:35:16 jmcneill Exp $ -Removed useless "estd: Forked" message +- Removed useless "estd: Forked" message +- Add support for generic multi-domain frequency controls --- estd.c.orig 2015-02-18 21:38:03.000000000 +0000 +++ estd.c -@@ -626,7 +626,6 @@ main(int argc, char *argv[]) +@@ -58,8 +58,9 @@ + #define TECH_INTREPID 4 + #define TECH_LOONGSON 5 + #define TECH_ROCKCHIP 6 +-#define TECH_GENERIC 7 +-#define TECH_MAX 7 ++#define TECH_GENERIC_MD 7 ++#define TECH_GENERIC 8 ++#define TECH_MAX 8 + + /* this is ugly, but... <shrug> */ + #define MAX_FREQS 32 +@@ -128,6 +129,7 @@ static char *techdesc[TECH_MAX + 1] = {" + "Intrepid", + "Loongson", + "Rockchip", ++ "Generic Multi-domain", + "Generic" + }; + static char *freqctl[TECH_MAX + 1] = { "", +@@ -137,6 +139,7 @@ static char *freqctl[TECH_MAX + 1] = { " + "machdep.intrepid.frequency.available", + "machdep.loongson.frequency.available", + "machdep.cpu.frequency.available", ++ "machdep.cpufreq.cpu0.available", + "machdep.frequency.available" + }; + static char *setctl[TECH_MAX + 1] = { "", +@@ -146,6 +149,7 @@ static char *setctl[TECH_MAX + 1] = { "" + "machdep.intrepid.frequency.target", + "machdep.loongson.frequency.target", + "machdep.cpu.frequency.target", ++ "machdep.cpufreq.cpu0.target", + "machdep.frequency.current" + }; + +@@ -234,6 +238,63 @@ acpi_init() + } + + ++int ++generic_md_init_cpu(int d, int cpu) ++{ ++ char name[256]; ++ char current[SYSCTLBUF]; ++ char *mp; ++ size_t currentsize = SYSCTLBUF; ++ int i; ++ ++ snprintf(name, sizeof(name), "machdep.cpufreq.cpu%d.current", cpu); ++ if (sysctlbyname(name, ¤t, ¤tsize, NULL, 0) < 0) { ++ if (d > 0) { ++ /* Assume this CPU is a member of the previous domain */ ++ domain[d-1].cpus[domain[d-1].ncpus++] = cpu; ++ } ++ return 1; ++ } ++ ++ ndomains = d + 1; ++ domain = realloc(domain, ndomains * sizeof(struct domain)); ++ if (domain == NULL) { ++ fprintf(stderr, "estd: realloc failed (errno %d)\n", errno); ++ exit(1); ++ } ++ memset(&domain[d], 0, sizeof(struct domain)); ++ ++ domain[d].ncpus = 1; ++ domain[d].cpus = ecalloc(ncpus, sizeof(int)); ++ domain[d].cpus[0] = cpu; ++ ++ asprintf(&domain[d].freqctl, "machdep.cpufreq.cpu%d.available", cpu); ++ asprintf(&domain[d].setctl, "machdep.cpufreq.cpu%d.target", cpu); ++ if (domain[d].setctl == NULL || domain[d].freqctl == NULL) { ++ fprintf(stderr, "estd: asprintf failed\n"); ++ exit(1); ++ } ++ ++ if ((!daemonize) && (verbose)) ++ for (i = 0; i < domain[d].ncpus; i++) ++ printf("estd: domain %d: member %d\n", d, domain[d].cpus[i]); ++ ++ return 0; ++} ++ ++int ++generic_md_init() ++{ ++ int d = 0, cpu; ++ ++ for (cpu = 0; cpu < ncpus; cpu++) ++ if (generic_md_init_cpu(d, cpu) == 0) ++ d++; ++ ++ return d > 0 ? 0 : 1; ++} ++ ++ + /* returns cpu-usage in percent, mean over the sleep-interval or -1 if an error occured */ + #if defined(__DragonFly__) + int +@@ -308,8 +369,10 @@ get_cpuusage(int d) + int cpu_of_max = 0; + int cpu; + int i; ++ int n; + +- for (cpu = 0; cpu < ncpus; cpu++) { ++ for (n = 0; n < domain[d].ncpus; n++) { ++ cpu = domain[d].cpus[n]; + u_int64_t total_time = 0; + + for (i = 0; i < CPUSTATES; i++) { +@@ -401,7 +464,7 @@ main(int argc, char *argv[]) + int i; + char frequencies[SYSCTLBUF]; /* XXX Ugly */ + char *fp; +- size_t freqsize = SYSCTLBUF; ++ size_t freqsize; + int curstrat = strategy; + int d; + FILE *fexists; +@@ -410,7 +473,7 @@ main(int argc, char *argv[]) + #endif + + /* get command-line options */ +- while ((ch = getopt(argc, argv, "vfdonACEGILPasbp:h:l:g:m:M:")) != -1) ++ while ((ch = getopt(argc, argv, "vfdonACDEGILPasbp:h:l:g:m:M:")) != -1) + switch (ch) { + case 'v': + version(); +@@ -438,6 +501,9 @@ main(int argc, char *argv[]) + fprintf(stderr, "-C not available under DragonFly\n"); + exit(1); + #endif ++ case 'D': ++ tech = TECH_GENERIC_MD; ++ break; + case 'E': + tech = TECH_EST; + break; +@@ -516,6 +582,7 @@ main(int argc, char *argv[]) + /* try to guess cpu-scaling technology */ + if (tech == TECH_UNKNOWN) { + for (tech = 1; tech <= TECH_MAX; tech++) { ++ freqsize = SYSCTLBUF; + if (sysctlbyname(freqctl[tech], &frequencies, &freqsize, NULL, 0) >= 0) break; + } + if (tech > TECH_MAX) { +@@ -529,6 +596,11 @@ main(int argc, char *argv[]) + fprintf(stderr, "estd: Cannot ACPI P-States\n"); + exit(1); + } ++ } else if (tech == TECH_GENERIC_MD) { ++ if (generic_md_init()) { ++ fprintf(stderr, "estd: Cannot init generic multi-domain support\n"); ++ exit(1); ++ } + } else { + domain[0].freqctl = freqctl[tech]; + domain[0].setctl = setctl[tech]; +@@ -552,6 +624,7 @@ main(int argc, char *argv[]) + /* for each cpu domain... */ + for (d = 0; d < ndomains; d++) { + /* get supported frequencies... */ ++ freqsize = SYSCTLBUF; + if (sysctlbyname(domain[d].freqctl, &frequencies, &freqsize, NULL, 0) < 0) { + fprintf(stderr, "estd: Cannot get supported frequencies (maybe you forced the wrong CPU-scaling technology?)\n"); + exit(1); +@@ -588,7 +661,11 @@ main(int argc, char *argv[]) + if (listfreq) { + printf("Supported frequencies (%s Mode):\n",techdesc[tech]); + for (d = 0; d < ndomains; d++) { +- printf("Domain %d:\n", d); ++ printf("Domain %d:", d); ++ for (i = 0; i < domain[d].ncpus; i++) { ++ printf(" cpu%d", domain[d].cpus[i]); ++ } ++ printf("\n"); + for (i = 0; i < domain[d].nfreqs; i++) { + printf("%i MHz\n", domain[d].freqtab[i]); + } +@@ -626,7 +703,6 @@ main(int argc, char *argv[]) /* all ok, here we go */ if (daemonize) { if (fork()) { |