From nchazirakis@xklawfirm.gr Sun Jun 1 04:46:46 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: * X-Spam-Status: No, score=1.4 required=5.0 tests=FREEMAIL_FORGED_REPLYTO, FREEMAIL_REPLYTO_END_DIGIT autolearn=no version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id D99A57F3F for ; Sun, 1 Jun 2014 04:46:46 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id A21A88F8037 for ; Sun, 1 Jun 2014 02:46:43 -0700 (PDT) X-ASG-Debug-ID: 1401615997-04bdf0599f3b82c0001-S8gJnT Received: from server28.cretaforce.gr (server28.cretaforce.gr [176.9.62.253]) by cuda.sgi.com with ESMTP id ZEgJvCbTUixJvD22 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Sun, 01 Jun 2014 02:46:38 -0700 (PDT) X-Barracuda-Envelope-From: nchazirakis@xklawfirm.gr X-Barracuda-Apparent-Source-IP: 176.9.62.253 Received: from www.xklawfirm.gr (server28.cretaforce.gr [176.9.62.234]) by server28.cretaforce.gr (Postfix) with ESMTPA id 9018F7DC8B9; Sun, 1 Jun 2014 12:53:28 +0300 (EEST) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Date: Sun, 01 Jun 2014 11:53:28 +0200 From: Karin LOCK To: undisclosed-recipients:; Subject: =?UTF-8?Q?=CE=94=CE=AC=CE=BD=CE=B5=CE=B9=CE=BF=20=CF=80=CF=81?= =?UTF-8?Q?=CE=BF=CF=83=CF=86=CE=BF=CF=81=CE=AC?= Reply-To: aprx2@live.fr X-ASG-Orig-Subj: =?UTF-8?Q?=CE=94=CE=AC=CE=BD=CE=B5=CE=B9=CE=BF=20=CF=80=CF=81?= =?UTF-8?Q?=CE=BF=CF=83=CF=86=CE=BF=CF=81=CE=AC?= Mail-Reply-To: aprx2@live.fr Message-ID: X-Sender: nchazirakis@xklawfirm.gr User-Agent: Roundcube Webmail/1.0.1 X-Barracuda-Connect: server28.cretaforce.gr[176.9.62.253] X-Barracuda-Start-Time: 1401615998 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.70 X-Barracuda-Spam-Status: No, SCORE=0.70 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA620a, BSF_SC7_SA298e X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6283 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.50 BSF_SC0_SA620a Custom Rule SA620a 0.20 BSF_SC7_SA298e Custom Rule SA298e -- Γεια σας, Σας ενδιαφέρει σε ένα οικονομικό δάνειο στο 2%; επικοινωνήστε μαζί μου για λεπτομέρειες και προϋποθέσεις. ταχυδρομείο μου: aprx2@live.fr σας ευχαριστώ From nscott@redhat.com Sun Jun 1 19:05:09 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id CB0487F54 for ; Sun, 1 Jun 2014 19:05:09 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 97F4F8F8040 for ; Sun, 1 Jun 2014 17:05:09 -0700 (PDT) X-ASG-Debug-ID: 1401667499-04bdf059a13d81e0001-S8gJnT Received: from mx6-phx2.redhat.com (mx6-phx2.redhat.com [209.132.183.39]) by cuda.sgi.com with ESMTP id 1Iwb3ltypzeKaCyH for ; Sun, 01 Jun 2014 17:04:59 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.39 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx6-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5204wbR018157 for ; Sun, 1 Jun 2014 20:04:59 -0400 Date: Sun, 1 Jun 2014 20:04:58 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: pcp@oss.sgi.com Message-ID: <806781229.18466341.1401667498768.JavaMail.zimbra@redhat.com> In-Reply-To: <286601916.18464538.1401666162505.JavaMail.zimbra@redhat.com> Subject: pmconfig(1) location MIME-Version: 1.0 X-ASG-Orig-Subj: pmconfig(1) location Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.12] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: pmconfig(1) location Thread-Index: ECvw3kbYTKdqmic4pNlVdYGBg3yYjQ== X-Barracuda-Connect: mx6-phx2.redhat.com[209.132.183.39] X-Barracuda-Start-Time: 1401667499 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6300 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Hi all, The other day jeffpc mentioned on IRC that the PCP pmconfig(1) binary semi-conflicts with a Solaris power management utility of the same name. We've probably not noticed it before because they reside in /usr/bin and /usr/sbin respectively. Would anyone object to migration of the PCP pmconfig into the private $PCP_BINADM_DIR? (I prefer this approach, and for all platforms not just Solaris) Should a compat symlink be installed in the /usr/bin location on non-Solaris platforms, in case of any scripts outside PCP using it? (I'd prefer not to do this, but would readily agree if anyone has a case where this would break something?) cheers. -- Nathan From nscott@redhat.com Sun Jun 1 19:07:37 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 0394B7F47 for ; Sun, 1 Jun 2014 19:07:37 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id E4151304043 for ; Sun, 1 Jun 2014 17:07:33 -0700 (PDT) X-ASG-Debug-ID: 1401667649-04cbb050fd1ace30001-S8gJnT Received: from mx3-phx2.redhat.com (mx3-phx2.redhat.com [209.132.183.24]) by cuda.sgi.com with ESMTP id Jly6yLDQcNUkkWJx for ; Sun, 01 Jun 2014 17:07:29 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.24 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx3-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id s5207TmK019050; Sun, 1 Jun 2014 20:07:29 -0400 Date: Sun, 1 Jun 2014 20:07:28 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: Dave Brolley Cc: pcp@oss.sgi.com Message-ID: <1691336344.18466835.1401667648983.JavaMail.zimbra@redhat.com> In-Reply-To: <5388DA90.5000803@redhat.com> References: <410753304.16136418.1401248705845.JavaMail.zimbra@redhat.com> <5386075A.70505@redhat.com> <1726157269.16845669.1401321783766.JavaMail.zimbra@redhat.com> <53873F4B.8030208@redhat.com> <1086317405.17579957.1401434621463.JavaMail.zimbra@redhat.com> <5388DA90.5000803@redhat.com> Subject: Re: Service advertising versus QA MIME-Version: 1.0 X-ASG-Orig-Subj: Re: Service advertising versus QA Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.12] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: Service advertising versus QA Thread-Index: zMtchJS7rUFyA+zMc2Pee8eekFJ62g== X-Barracuda-Connect: mx3-phx2.redhat.com[209.132.183.24] X-Barracuda-Start-Time: 1401667649 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.03 X-Barracuda-Spam-Status: No, SCORE=0.03 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA_TO_FROM_DOMAIN_MATCH, THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6300 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 0.01 BSF_SC0_SA_TO_FROM_DOMAIN_MATCH Sender Domain Matches Recipient Domain ----- Original Message ----- > Your changes to 775 and 946 look good. So good that I stole them for 766 > and 776 :-) > > I also changed 766 and 776 to use pminfo in order to obtain the address > of an active interface. Pushed to brolley/dev on pcpfans as Looks good (no need to check for pminfo btw - the sky has fallen in if that cannot be found, & a huge number of tests would fail). > > [...] > > finds *something*/*anything*? Otherwise we repeat ourselves(?), and as > > more and more mechanisms come along, pmfind is going to get more and > > more expensive...? > I can see this being a global option and a companion to the pending > timeout option. *nod* > There are probably users who want any result and would > be satisfied with the first one (the qa tests themselves could benefit > from this) and others who want the full results. The also-pending > callback will be another way for users to consume the output as it is > discovered. Combining all of these will certainly yield a wide range of > ways to use the API and the tool. Agreed, sounds good to me - thanks Dave. cheers. -- Nathan From nscott@redhat.com Mon Jun 2 03:48:31 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 1B8147F54 for ; Mon, 2 Jun 2014 03:48:31 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id E3712304064 for ; Mon, 2 Jun 2014 01:48:27 -0700 (PDT) X-ASG-Debug-ID: 1401698899-04cb6c100ac4f90001-S8gJnT Received: from mx5-phx2.redhat.com (mx5-phx2.redhat.com [209.132.183.37]) by cuda.sgi.com with ESMTP id qDuOjI44LZLvHApE for ; Mon, 02 Jun 2014 01:48:19 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.37 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx5-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s528mJLe010417 for ; Mon, 2 Jun 2014 04:48:19 -0400 Date: Mon, 2 Jun 2014 04:48:19 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: pcp@oss.sgi.com Message-ID: <2010432606.18647545.1401698899243.JavaMail.zimbra@redhat.com> In-Reply-To: <947661467.18646939.1401698759485.JavaMail.zimbra@redhat.com> Subject: pcp updates: qa, libpcp+pmstat hostnames, pmcc MIME-Version: 1.0 X-ASG-Orig-Subj: pcp updates: qa, libpcp+pmstat hostnames, pmcc Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.12] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: pcp updates: qa, libpcp+pmstat hostnames, pmcc Thread-Index: EJv16SrNRg1tX0nBgXVMIT5hpB0mAg== X-Barracuda-Connect: mx5-phx2.redhat.com[209.132.183.37] X-Barracuda-Start-Time: 1401698899 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6310 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Changes committed to git://git.performancecopilot.org/pcp.git dev qa/297.out | 2 + qa/734 | 40 +++++++++++++++++++++++++++++++++++++++ qa/734.out | 3 ++ qa/766 | 34 +++++++++++++++++---------------- qa/766.out | 2 + qa/776 | 48 ++++++++++++++++++++++++++++++----------------- qa/776.out | 2 + qa/group | 1 src/libpcp/src/context.c | 47 +++++++++++++++++++++++++++++----------------- src/pmstat/pmstat.c | 9 ++++---- src/python/pcp/pmcc.py | 6 +---- 11 files changed, 136 insertions(+), 58 deletions(-) commit 4ba8fabb8ac792e7cf5fcf2a04bade601b26cf69 Author: Nathan Scott Date: Mon Jun 2 18:44:20 2014 +1000 Update test 297 to reflect new libpcp context diagnostics commit 5c8a28e13ac9843edd1f392909e515c77bb96f32 Author: Mark Goodwin Date: Mon Jun 2 15:09:05 2014 +1000 Fix pmcc updating in-memory result values An overzealous coding guard was preventing Metric class values from being computed correctly from fetched pmResult structures. commit 3f0595ab30b6e7c5bc4cf3b65fdc27e300c12102 Author: Nathan Scott Date: Mon Jun 2 15:02:56 2014 +1000 Fix pmstat hostname reporting when running in cluster mode Found a couple of bugs in the hostname reporting done by pmstat and the pmGetContextHostName routine. Firstly, in pmstat a missing field initialisation in the context data structure meant the hostname pointer could point off into the weeds. Secondly, the libpcp code that retrieves and uses the pmcd.hostname metric didn't correctly setup the context for pmLookupName/pmFetch with the result that the original context was re-used and the wrong hostname ended up being reported. Add test qa/734 to exercise the whole horrible situation and add some libpcp diagnostics around context switching in pmGetContextHostName. commit b30c9aa51be78294944b4e7775271928ce05a92b Author: Nathan Scott Date: Mon Jun 2 10:03:09 2014 +1000 No need to check for pminfo in QA tests, nothing would work commit d7ed4e206d21c81a6d3b5627efceb02b94df94b5 Author: Dave Brolley Date: Fri May 30 15:09:55 2014 -0400 Make qa tests 766 and 776 (pmfind with active probing) more robust. - Stole Nathan's deterministic output fix from tests 775 and 946 - Use pminfo to obtain the address of an active interface instead of ifconfig (also Nathan's suggestion). From nscott@redhat.com Mon Jun 2 05:09:42 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id A96C87F54 for ; Mon, 2 Jun 2014 05:09:42 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 866868F8049 for ; Mon, 2 Jun 2014 03:09:42 -0700 (PDT) X-ASG-Debug-ID: 1401703776-04cb6c100cc7f50001-S8gJnT Received: from mx5-phx2.redhat.com (mx5-phx2.redhat.com [209.132.183.37]) by cuda.sgi.com with ESMTP id TsB5Gm5lve6Z2VOL for ; Mon, 02 Jun 2014 03:09:37 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.37 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx5-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s52A9adc026010; Mon, 2 Jun 2014 06:09:36 -0400 Date: Mon, 2 Jun 2014 06:09:36 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: pcp@oss.sgi.com Cc: William Cohen Message-ID: <740708456.18675715.1401703776506.JavaMail.zimbra@redhat.com> In-Reply-To: <1582052329.18672839.1401703216956.JavaMail.zimbra@redhat.com> Subject: [RFC] Command pipe PMDA MIME-Version: 1.0 X-ASG-Orig-Subj: [RFC] Command pipe PMDA Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.12] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: Command pipe PMDA Thread-Index: c+uFBuW+X9x9Y1LhCT9hEFrKGZiOUw== X-Barracuda-Connect: mx5-phx2.redhat.com[209.132.183.37] X-Barracuda-Start-Time: 1401703777 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6311 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Hi all, My colleague Will Cohen recently floated the idea of using PCP to carefully lift some permissions restrictions in tools like perf, and to enable perf functionality to be injected into PCP to some extent. This RFC mail is an attempt to describe one possible way to approach doing this, as I think its an awesome idea - even in its most simple of forms (as described below). A common form of running the Linux perf utility is with its script command - see "perf scripts --list" for a comprehensive list, but some examples are: $ perf script --list List of available trace scripts: rw-by-pid system-wide r/w activity rw-by-file r/w activity for a program, by file failed-syscalls [comm] system-wide failed syscalls However, these almost always require root permissions (modulo some system-wide perf_event_paranoid trickery). Many sites would like to have a less restrictive form of access control for running the scripts and capturing their output for analysis. Note that many scripts have parameters, such as a PID. It is also a very common model to invoke these scripts for a short time, after which they report collected data and then exit. We could tackle this problem with a new pmdapipe(1) agent in PCP, running as root and arbitrating access to the privileged commands. This PMDA would primarily export one event metric, with records of string type holding the command output. One of a configured set of commands could be executed via pmevent(1) connecting to this PMDA (via pmcd) which would execute the requested command and "pipe" the output back to a client utility as event records. This client tool would need very little intelligence, simply dumping the text out to standard output (a --quiet mode to pmevent would possibly suffice). The existing -x option to pmevent could be used to send parameters to the PMDA from the client tool, before the pipe commences. The piping (hot) PMDA would be more involved. It would need to: - enforce access controls before allowing any command to be run on behalf of an unprivileged client. This could be in the form of using the client credentials (uid/gid) attributes, and an initial specification on which users/groups are allowed access. - provide a mechanism for configuration of a set of allowed commands that it is prepared to execute, and a way to map the parameters to the command line before executing the tool. - track each remote client using the client-context-tracking feature to ensure the event stream is sent to the originating client. - once user credentials and parameters have been passed, and tracing begins (via client-driven fetch), fork/exec the relevant command, capture the output as it arrives and ship it back to the client. - either when the child command exits or the client tool disconnects, reap the child process and go back to passively lurking, awaiting the next request. To achieve the generalised configuration goals (while restricting the runnable commands to a sanitised, secure, sysadmin-approved set), the PMDA could read a configuration file on startup (and SIGHUP), perhaps with a syntax along these lines: $ cat /var/lib/pcp/pmdas/pipe/sample.conf # instance user commands rw_syscalls root perf script rw-by-file $1 bdev_trace root btrace -w $1 /dev/$2 [access] allow user bob : all; allow group perf : rw_syscalls; With a setup like the above, a pmevent invocation like the following should be possible as unprivileged user "bob": $ pmevent -i bdev_trace -x '5 sda' pipe.firehose 8,2 5 1 0.000000000 25227 A WS 734332384 + 24 <- (253,2) 734330336 8,0 5 2 0.000000414 25227 A WS 735358432 + 24 <- (8,2) 734332384 8,0 5 3 0.000000756 25227 Q WS 735358432 + 24 [qemu-kvm] [...5 seconds worth] $ cheers. -- Nathan From nscott@redhat.com Tue Jun 3 03:20:14 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 8D1BC7F54 for ; Tue, 3 Jun 2014 03:20:14 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 50D90304062 for ; Tue, 3 Jun 2014 01:20:11 -0700 (PDT) X-ASG-Debug-ID: 1401783605-04bdf0599e4d7c70001-S8gJnT Received: from mx4-phx2.redhat.com (mx4-phx2.redhat.com [209.132.183.25]) by cuda.sgi.com with ESMTP id UTiCB54WniV7R7nU for ; Tue, 03 Jun 2014 01:20:05 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.25 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx4-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id s538K5f7010865; Tue, 3 Jun 2014 04:20:05 -0400 Date: Tue, 3 Jun 2014 04:20:04 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: Mark Goodwin Cc: pcp Message-ID: <631390734.19335445.1401783604765.JavaMail.zimbra@redhat.com> In-Reply-To: <5386E607.2020007@redhat.com> References: <5386E607.2020007@redhat.com> Subject: Re: [pcp] pmcc.py bug? MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [pcp] pmcc.py bug? Content-Type: multipart/mixed; boundary="----=_Part_19335443_335541668.1401783604762" X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: pmcc.py bug? Thread-Index: 77t1zL/biJK7q/wJve5ieoIbl4Uarw== X-Barracuda-Connect: mx4-phx2.redhat.com[209.132.183.25] X-Barracuda-Start-Time: 1401783605 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.03 X-Barracuda-Spam-Status: No, SCORE=0.03 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA_TO_FROM_DOMAIN_MATCH, THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6338 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 0.01 BSF_SC0_SA_TO_FROM_DOMAIN_MATCH Sender Domain Matches Recipient Domain ------=_Part_19335443_335541668.1401783604762 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Hi Mark, ----- Original Message ----- > pmcc doesn't seem to update it's metric values after each fetch beyond > the first, but I may be calling it incorrectly. Here's a simple program > demonstrating the issue, [...] Attached is a revised version of your script which now handles all the standard command line args. It uses latest changes in dev branch to the pcp.pmcc module (incl your fix), so things like this work now... $ ./test-counters-pmcc.py -D all --host verge --samples=3 -t 0.2 ... with as much common code pushed into pmcc as I sensibly could. I think there's still a little work that the script is doing that could be pulled into pmcc as well, but for now this should keep you moving. cheers. -- Nathan ------=_Part_19335443_335541668.1401783604762 Content-Type: text/x-python; name=test-counters-pmcc.py Content-Disposition: attachment; filename=test-counters-pmcc.py Content-Transfer-Encoding: base64 IyEvdXNyL2Jpbi9weXRob24NCg0KaW1wb3J0IHN5cw0KZnJvbSBwY3AgaW1wb3J0IHBtYXBpLCBw bWNjDQoNCkNQVSA9ICJjcHUiDQpJRExFID0gImtlcm5lbC5wZXJjcHUuY3B1LmlkbGUiDQpNRVRS SUNTID0gWyBJRExFIF0NCg0KY2xhc3MgUmVwb3J0ZXIocG1jYy5NZXRyaWNHcm91cFByaW50ZXIp Og0KDQogICAgZGVmIGN1cnZhbHMoc2VsZiwgZ3JvdXAsIG5hbWUpOg0KCXJldHVybiBkaWN0KG1h cChsYW1iZGEgeDogKHhbMV0sIHhbMl0pLCBncm91cFtuYW1lXS5uZXRWYWx1ZXMpKQ0KICAgIGRl ZiBpbnN0bGlzdChzZWxmLCBncm91cCwgbmFtZSk6DQoJcmV0dXJuIHNvcnRlZChkaWN0KG1hcChs YW1iZGEgeDogKHhbMV0sIHhbMl0pLCBncm91cFtuYW1lXS5uZXRWYWx1ZXMpKS5rZXlzKCkpDQoN CiAgICBkZWYgcmVwb3J0KHNlbGYsIG1hbmFnZXIpOg0KCWNfaWRsZSA9IHNlbGYuY3VydmFscyht YW5hZ2VyW0NQVV0sIElETEUpDQoJZm9yIGluc3QgaW4gc2VsZi5pbnN0bGlzdChtYW5hZ2VyW0NQ VV0sIElETEUpOg0KCSAgICBwcmludCBpbnN0LCBjX2lkbGVbaW5zdF0NCglwcmludA0KDQpjbGFz cyBPcHRpb25zKHBtYXBpLnBtT3B0aW9ucyk6DQogICAgZGVmIF9faW5pdF9fKHNlbGYpOg0KICAg ICAgICBwbWFwaS5wbU9wdGlvbnMuX19pbml0X18oc2VsZiwgIkE6YTpEOmg6TzpTOnM6VDp0OlZa Ono/IikNCiAgICAgICAgc2VsZi5wbVNldExvbmdPcHRpb25IZWFkZXIoIkdlbmVyYWwgb3B0aW9u cyIpDQogICAgICAgIHNlbGYucG1TZXRMb25nT3B0aW9uQWxpZ24oKQ0KICAgICAgICBzZWxmLnBt U2V0TG9uZ09wdGlvbkFyY2hpdmUoKQ0KICAgICAgICBzZWxmLnBtU2V0TG9uZ09wdGlvbkRlYnVn KCkNCiAgICAgICAgc2VsZi5wbVNldExvbmdPcHRpb25Ib3N0KCkNCiAgICAgICAgc2VsZi5wbVNl dExvbmdPcHRpb25PcmlnaW4oKQ0KICAgICAgICBzZWxmLnBtU2V0TG9uZ09wdGlvblN0YXJ0KCkN CiAgICAgICAgc2VsZi5wbVNldExvbmdPcHRpb25TYW1wbGVzKCkNCiAgICAgICAgc2VsZi5wbVNl dExvbmdPcHRpb25GaW5pc2goKQ0KICAgICAgICBzZWxmLnBtU2V0TG9uZ09wdGlvbkludGVydmFs KCkNCiAgICAgICAgc2VsZi5wbVNldExvbmdPcHRpb25WZXJzaW9uKCkNCiAgICAgICAgc2VsZi5w bVNldExvbmdPcHRpb25UaW1lWm9uZSgpDQogICAgICAgIHNlbGYucG1TZXRMb25nT3B0aW9uSG9z dFpvbmUoKQ0KICAgICAgICBzZWxmLnBtU2V0TG9uZ09wdGlvbkhlbHAoKQ0KDQppZiBfX25hbWVf XyA9PSAnX19tYWluX18nOg0KICAgIHRyeToNCgltYW5hZ2VyID0gcG1jYy5NZXRyaWNHcm91cE1h bmFnZXIuYnVpbGRlcihPcHRpb25zKCksIHN5cy5hcmd2KQ0KCW1hbmFnZXIucHJpbnRlciA9IFJl cG9ydGVyKCkNCgltYW5hZ2VyWyJjcHUiXSA9IE1FVFJJQ1MgDQoJbWFuYWdlci5ydW4oKQ0KICAg IGV4Y2VwdCBwbWFwaS5wbVVzYWdlRXJyLCB1c2FnZToNCglwcmludCB1c2FnZS5tZXNzYWdlKCkN CiAgICBleGNlcHQgcG1hcGkucG1FcnIsIGVycm9yOg0KCXByaW50ICIlczogJXMiICUgKGVycm9y LnByb2duYW1lKCksIGVycm9yLm1lc3NhZ2UoKSkNCiAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1 cHQ6DQoJcGFzcw0K ------=_Part_19335443_335541668.1401783604762-- From nscott@redhat.com Tue Jun 3 03:20:24 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id B67CE7F54 for ; Tue, 3 Jun 2014 03:20:24 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 44A9CAC003 for ; Tue, 3 Jun 2014 01:20:24 -0700 (PDT) X-ASG-Debug-ID: 1401783621-04cb6c1009189ac0001-S8gJnT Received: from mx4-phx2.redhat.com (mx4-phx2.redhat.com [209.132.183.25]) by cuda.sgi.com with ESMTP id 8DXDuv6KBq1GqVyP for ; Tue, 03 Jun 2014 01:20:21 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.25 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx4-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id s538KKnZ010879 for ; Tue, 3 Jun 2014 04:20:20 -0400 Date: Tue, 3 Jun 2014 04:20:20 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: pcp@oss.sgi.com Message-ID: <527085419.19335470.1401783620503.JavaMail.zimbra@redhat.com> In-Reply-To: <1382813991.19306137.1401781733657.JavaMail.zimbra@redhat.com> Subject: pcp updates: python pmcc module MIME-Version: 1.0 X-ASG-Orig-Subj: pcp updates: python pmcc module Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: pcp updates: python pmcc module Thread-Index: 46QIhVaQHyCG/oonpimDeTy/sRmSOw== X-Barracuda-Connect: mx4-phx2.redhat.com[209.132.183.25] X-Barracuda-Start-Time: 1401783621 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6338 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Changes committed to git://git.performancecopilot.org/pcp.git dev qa/734 | 1 qa/src/test_pmcc.python | 169 +++++++++++++++++++++++++---------------------- src/include/pcp.mingw | 2 src/pmconfig/GNUmakefile | 2 src/pmstat/pmstat.c | 2 src/python/pcp/pmapi.py | 6 + src/python/pcp/pmcc.py | 147 +++++++++++++++++++++++++++++++++++++++- src/python/pmapi.c | 12 +++ 8 files changed, 255 insertions(+), 86 deletions(-) commit eefbc5dd00d9a370fc67a843ecb7601bfa32f505 Author: Nathan Scott Date: Tue Jun 3 17:47:27 2014 +1000 Extend python convenience classes for command line options Focus here is on making the high level pmcc.MetricGroupManager class able to take on more of the work that all client tools have to do. In particular, responding to command line options like sample interval/count, end time, and so on impacts on the logic needed around the fetch loop. Add a MetricGroupPrinter class which can be provided by a script, which will be called upon to handle all matters related to output. Ideally everything else will be handled by convenience classes - this handles command line options and the fetch loop logic; still to be further improved on (perhaps?) is the metric value unpacking wrt counters and rate conversion. Other helpers for common output patters are also likely to be needed. commit 8d8b92b94c2e51a90835877d3576167d831196bb Author: Nathan Scott Date: Tue Jun 3 17:36:02 2014 +1000 Trivial readability cleanup in pmstat sample count handling commit f4f09362256091a7c31ad1dc22c050c5ba2996b0 Author: Nathan Scott Date: Tue Jun 3 17:35:08 2014 +1000 Move pmconfig to PCP_BINADM_DIR avoiding Solaris name conflict commit ee4cedc7f4ef3d0b5257147fd31ac024ccb6a627 Author: Nathan Scott Date: Tue Jun 3 09:35:06 2014 +1000 Remove leftover ld setting in qa/734, noticed by Frank From brolley@redhat.com Tue Jun 3 11:29:09 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id AC4147F3F for ; Tue, 3 Jun 2014 11:29:09 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 8A3C1304066 for ; Tue, 3 Jun 2014 09:29:06 -0700 (PDT) X-ASG-Debug-ID: 1401812941-04bdf059a0518da0001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id 3SNKofp4ic8pLXtv for ; Tue, 03 Jun 2014 09:29:02 -0700 (PDT) X-Barracuda-Envelope-From: brolley@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx12.intmail.prod.int.phx2.redhat.com (int-mx12.intmail.prod.int.phx2.redhat.com [10.5.11.25]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s53GT15W029377 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Tue, 3 Jun 2014 12:29:01 -0400 Received: from [10.10.48.48] (vpn-48-48.rdu2.redhat.com [10.10.48.48]) by int-mx12.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s53GT1Iu022746 for ; Tue, 3 Jun 2014 12:29:01 -0400 Message-ID: <538DF862.603@redhat.com> Date: Tue, 03 Jun 2014 12:31:30 -0400 From: Dave Brolley User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0 MIME-Version: 1.0 To: PCP Mailing List Subject: PCP Updates: Implement fche's Threading Algorithm for Active Probing Content-Type: text/plain; charset=ISO-8859-1; format=flowed X-ASG-Orig-Subj: PCP Updates: Implement fche's Threading Algorithm for Active Probing Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.25 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1401812942 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Hi, As part of his review, fche suggested an alternate threading algorithm for service discovery via active probing. His algorithm utilizes a pool of threads contending for the next available address+port and attempting connections until no more address+port combinations remain. The algorithm simplified several aspects of the implementation, including eliminating the need to count processed addresses, more robust cleanup and making it easier to handle more than one port for a given service. He mentioned abandoning the retry when a socked cannot be created due to EAGAIN, suggesting that TCP should be able to handle this. I left this in because it would be difficult to try again with another thread, since the algorithm would already have advanced past the address+port combination in question. Pushed to the brolley/dev branch of pcpfans. Dave -------------------------------------------------------- commit c8e9b3dc926d0285db06d94207ec36f29f8e3678 Author: Dave Brolley Date: Tue Jun 3 12:01:54 2014 -0400 Implement fche's threading algorithm for active probing. From brolley@redhat.com Tue Jun 3 14:55:00 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 00C767F3F for ; Tue, 3 Jun 2014 14:54:59 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 83592AC004 for ; Tue, 3 Jun 2014 12:54:59 -0700 (PDT) X-ASG-Debug-ID: 1401825297-04cbb050fa306b60001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id d7oEkFaXkM5f0YQp for ; Tue, 03 Jun 2014 12:54:57 -0700 (PDT) X-Barracuda-Envelope-From: brolley@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx12.intmail.prod.int.phx2.redhat.com (int-mx12.intmail.prod.int.phx2.redhat.com [10.5.11.25]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s53JsvYX016333 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Tue, 3 Jun 2014 15:54:57 -0400 Received: from [10.10.48.48] (vpn-48-48.rdu2.redhat.com [10.10.48.48]) by int-mx12.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s53JsuXA030930 for ; Tue, 3 Jun 2014 15:54:56 -0400 Message-ID: <538E28A5.2000104@redhat.com> Date: Tue, 03 Jun 2014 15:57:25 -0400 From: Dave Brolley User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0 MIME-Version: 1.0 To: pcp@oss.sgi.com Subject: Re: [pcp] PCP Updates: Implement fche's Threading Algorithm for Active Probing References: <538DF862.603@redhat.com> X-ASG-Orig-Subj: Re: [pcp] PCP Updates: Implement fche's Threading Algorithm for Active Probing In-Reply-To: <538DF862.603@redhat.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.25 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1401825297 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Found a case where the mutexes were not being initialized. Dave ------------------------------------------------------------------------ commit 64a7394458a66cf3d4a4559a7290b421a0994c07 Author: Dave Brolley Date: Tue Jun 3 15:54:21 2014 -0400 src/libpcp/src/probe.c: Ensure that mutexes are always initialized. Even if we're only using the main thread for probing. Also fixed a few typos. From marty.customs@gmail.com Tue Jun 3 20:18:45 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,HTML_MESSAGE, T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 1A3157F3F for ; Tue, 3 Jun 2014 20:18:45 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id BA12BAC003 for ; Tue, 3 Jun 2014 18:18:41 -0700 (PDT) X-ASG-Debug-ID: 1401844716-04bdf059a154d8e0001-S8gJnT Received: from mail-qg0-f51.google.com (mail-qg0-f51.google.com [209.85.192.51]) by cuda.sgi.com with ESMTP id aqio1gLUofADHEp5 (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Tue, 03 Jun 2014 18:18:37 -0700 (PDT) X-Barracuda-Envelope-From: marty.customs@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.192.51 X-Barracuda-IPDD: Level1 [gmail.com/209.85.192.51] Received: by mail-qg0-f51.google.com with SMTP id q107so14364375qgd.38 for ; Tue, 03 Jun 2014 18:18:36 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.192.51] X-Barracuda-IPDD: Level1 [gmail.com/209.85.192.51] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:date:message-id:subject:from:to:content-type; bh=lBntDGZ9PZS1R+neO9HRYCmwsR/eSnqYE8sI1YwI49c=; b=IdbjOUs7iy9h3qsRNZXF+bxPuqyrKCSivYJe4bQUrIVqRbjD0Fp4fYcX8Qmvak4WME YOoNHaMBEQ09t4yVVcjyCzMfnIsKK6cSfYgkW/mEbi7m4rHHpOraF3ieb0zAlcwZ5Dlc SN05EH0rM3vfdGrfr12lxgRCw+b9PWAzgVQ/bpcrR6EoDXY9Nb8N/GznQpZDiY45EIvU Ih+pJ++OlpXy8T4HtJb+1UHGHVkYBobdNUZgz3UTJ3jzelzOmmkqx7B6zTiijETLIz7+ 3bXcTeMK1HrwzC9fTANLM7+3mbAlHNTMHt/9wzW/HBAJv15aBpqXJhEKZ2SK9sFBmE/G 22/w== MIME-Version: 1.0 X-Received: by 10.229.72.10 with SMTP id k10mr65997916qcj.2.1401844716213; Tue, 03 Jun 2014 18:18:36 -0700 (PDT) Received: by 10.140.42.181 with HTTP; Tue, 3 Jun 2014 18:18:36 -0700 (PDT) Date: Wed, 4 Jun 2014 11:18:36 +1000 Message-ID: Subject: [pcp] Unable to install MySQL PMDA on Ubuntu From: Marty Customs X-ASG-Orig-Subj: [pcp] Unable to install MySQL PMDA on Ubuntu To: pcp@oss.sgi.com Content-Type: multipart/alternative; boundary=089e01681318571be004faf8684d X-Barracuda-Connect: mail-qg0-f51.google.com[209.85.192.51] X-Barracuda-Start-Time: 1401844716 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6360 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message --089e01681318571be004faf8684d Content-Type: text/plain; charset=UTF-8 Salutations all, I'm having some trouble installing the MySQL PMDA on Ubuntu, haven't found a solution by googling, and was hoping someone might be able to point me in the right direction. I install PCP: $ sudo apt-get install pcp Then from /var/lib/pcp/pmdas/mysql/ I attempt to install the agent but get a message instead: $ sudo ./Install Perl PCP::PMDA module is not installed, install it and try again I try installing the missing module but it's already installed: $ sudo apt-get install libpcp-pmda-perl libpcp-pmda-perl is already the newest version. Thanks for any help you can offer, Marty. ++Details of the setup below++ MySQL server 5.5 $ pcp Performance Co-Pilot configuration on pcp-test-host: platform: Linux pcp-test-host 3.8.0-29-generic #42~precise1-Ubuntu SMP Wed Aug 14 16:19:23 UTC 2013 x86_64 hardware: 2 cpus, 1 disk, 7986MB RAM timezone: EST-10 pmcd: Version 3.5.11-1, 3 agents pmda: pmcd linux mmv $ perl -V Summary of my perl5 (revision 5 version 14 subversion 2) configuration: Platform: osname=linux, osvers=2.6.42-37-generic, archname=x86_64-linux-gnu-thread-multi uname='linux panlong 2.6.42-37-generic #58-ubuntu smp thu jan 24 15:28:10 utc 2013 x86_64 x86_64 x86_64 gnulinux ' config_args='-Dusethreads -Duselargefiles -Dccflags=-DDEBIAN -Dcccdlflags=-fPIC -Darchname=x86_64-linux-gnu -Dprefix=/usr -Dprivlib=/usr/share/perl/5.14 -Darchlib=/usr/lib/perl/5.14 -Dvendorprefix=/usr -Dvendorlib=/usr/share/perl5 -Dvendorarch=/usr/lib/perl5 -Dsiteprefix=/usr/local -Dsitelib=/usr/local/share/perl/5.14.2 -Dsitearch=/usr/local/lib/perl/5.14.2 -Dman1dir=/usr/share/man/man1 -Dman3dir=/usr/share/man/man3 -Dsiteman1dir=/usr/local/man/man1 -Dsiteman3dir=/usr/local/man/man3 -Duse64bitint -Dman1ext=1 -Dman3ext=3perl -Dpager=/usr/bin/sensible-pager -Uafs -Ud_csh -Ud_ualarm -Uusesfio -Uusenm -Ui_libutil -DDEBUGGING=-g -Doptimize=-O2 -Duseshrplib -Dlibperl=libperl.so.5.14.2 -des' hint=recommended, useposix=true, d_sigaction=define useithreads=define, usemultiplicity=define useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef use64bitint=define, use64bitall=define, uselongdouble=undef usemymalloc=n, bincompat5005=undef Compiler: cc='cc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64', optimize='-O2 -g', cppflags='-D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include' ccversion='', gccversion='4.6.3', gccosandvers='' intsize=4, longsize=8, ptrsize=8, doublesize=8, byteorder=12345678 d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16 ivtype='long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8 alignbytes=8, prototype=define Linker and Libraries: ld='cc', ldflags =' -fstack-protector -L/usr/local/lib' libpth=/usr/local/lib /lib/x86_64-linux-gnu /lib/../lib /usr/lib/x86_64-linux-gnu /usr/lib/../lib /lib /usr/lib libs=-lgdbm -lgdbm_compat -ldb -ldl -lm -lpthread -lc -lcrypt perllibs=-ldl -lm -lpthread -lc -lcrypt libc=, so=so, useshrplib=true, libperl=libperl.so.5.14.2 gnulibc_version='2.15' Dynamic Linking: dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E' cccdlflags='-fPIC', lddlflags='-shared -O2 -g -L/usr/local/lib -fstack-protector' Characteristics of this binary (from libperl): Compile-time options: MULTIPLICITY PERL_DONT_CREATE_GVSV PERL_IMPLICIT_CONTEXT PERL_MALLOC_WRAP PERL_PRESERVE_IVUV USE_64_BIT_ALL USE_64_BIT_INT USE_ITHREADS USE_LARGE_FILES USE_PERLIO USE_PERL_ATOF USE_REENTRANT_API Locally applied patches: DEBPKG:debian/arm_thread_stress_timeout - http://bugs.debian.org/501970 Raise the timeout of ext/threads/shared/t/stress.t to accommodate slower build hosts DEBPKG:debian/cpan_definstalldirs - Provide a sensible INSTALLDIRS default for modules installed from CPAN. DEBPKG:debian/db_file_ver - http://bugs.debian.org/340047 Remove overly restrictive DB_File version check. DEBPKG:debian/doc_info - Replace generic man(1) instructions with Debian-specific information. DEBPKG:debian/enc2xs_inc - http://bugs.debian.org/290336 Tweak enc2xs to follow symlinks and ignore missing @INC directories. DEBPKG:debian/errno_ver - http://bugs.debian.org/343351 Remove Errno version check due to upgrade problems with long-running processes. DEBPKG:debian/libperl_embed_doc - http://bugs.debian.org/186778 Note that libperl-dev package is required for embedded linking DEBPKG:fixes/respect_umask - Respect umask during installation DEBPKG:debian/writable_site_dirs - Set umask approproately for site install directories DEBPKG:debian/extutils_set_libperl_path - EU:MM: Set location of libperl.a to /usr/lib DEBPKG:debian/no_packlist_perllocal - Don't install .packlist or perllocal.pod for perl or vendor DEBPKG:debian/prefix_changes - Fiddle with *PREFIX and variables written to the makefile DEBPKG:debian/fakeroot - Postpone LD_LIBRARY_PATH evaluation to the binary targets. DEBPKG:debian/instmodsh_doc - Debian policy doesn't install .packlist files for core or vendor. DEBPKG:debian/ld_run_path - Remove standard libs from LD_RUN_PATH as per Debian policy. DEBPKG:debian/libnet_config_path - Set location of libnet.cfg to /etc/perl/Net as /usr may not be writable. DEBPKG:debian/m68k_thread_stress - http://bugs.debian.org/517938 http://bugs.debian.org/495826 Disable some threads tests on m68k for now due to missing TLS. DEBPKG:debian/mod_paths - Tweak @INC ordering for Debian DEBPKG:debian/module_build_man_extensions - http://bugs.debian.org/479460 Adjust Module::Build manual page extensions for the Debian Perl policy DEBPKG:debian/prune_libs - http://bugs.debian.org/128355 Prune the list of libraries wanted to what we actually need. DEBPKG:fixes/net_smtp_docs - [rt.cpan.org #36038] http://bugs.debian.org/100195 Document the Net::SMTP 'Port' option DEBPKG:debian/perlivp - http://bugs.debian.org/510895 Make perlivp skip include directories in /usr/local DEBPKG:debian/disable-zlib-bundling - Disable zlib bundling in Compress::Raw::Zlib DEBPKG:debian/cpanplus_definstalldirs - http://bugs.debian.org/533707 Configure CPANPLUS to use the site directories by default. DEBPKG:debian/cpanplus_config_path - Save local versions of CPANPLUS::Config::System into /etc/perl. DEBPKG:debian/deprecate-with-apt - http://bugs.debian.org/580034 Point users to Debian packages of deprecated core modules DEBPKG:fixes/hurd-ccflags - [a190e64] http://bugs.debian.org/587901 [perl #92244] Make hints/gnu.sh append to $ccflags rather than overriding them DEBPKG:debian/squelch-locale-warnings - http://bugs.debian.org/508764 Squelch locale warnings in Debian package maintainer scripts DEBPKG:debian/skip-upstream-git-tests - Skip tests specific to the upstream Git repository DEBPKG:fixes/extutils-cbuilder-cflags - [011e8fb] http://bugs.debian.org/624460 [perl #89478] Append CFLAGS and LDFLAGS to their Config.pm counterparts in EU::CBuilder DEBPKG:fixes/module-build-home-directory - http://bugs.debian.org/624850 [rt.cpan.org #67893] Fix failing tilde test when run under a UID without a passwd entry DEBPKG:debian/patchlevel - http://bugs.debian.org/567489 List packaged patches for 5.14.2-6ubuntu2.4 in patchlevel.h DEBPKG:fixes/h2ph-multiarch - [e7ec705] http://bugs.debian.org/625808 [perl #90122] Make h2ph correctly search gcc include directories DEBPKG:fixes/index-tainting - [3b36395] http://bugs.debian.org/291450 [perl #64804] RT 64804: tainting with index() of a constant DEBPKG:debian/skip-kfreebsd-crash - http://bugs.debian.org/628493 [perl #96272] Skip a crashing test case in t/op/threads.t on GNU/kFreeBSD DEBPKG:fixes/document_makemaker_ccflags - http://bugs.debian.org/628522 [rt.cpan.org #68613] Document that CCFLAGS should include $Config{ccflags} DEBPKG:fixes/sys-syslog-socket-timeout-kfreebsd.patch - http://bugs.debian.org/627821 [rt.cpan.org #69997] Use a socket timeout on GNU/kFreeBSD to catch ICMP port unreachable messages DEBPKG:fixes/hurd-hints - http://bugs.debian.org/636609 Improve general GNU hints, needed for GNU/Hurd. DEBPKG:fixes/pod_fixes - [7698aed] http://bugs.debian.org/637816 Fix typos in several pod/perl*.pod files DEBPKG:debian/find_html2text - http://bugs.debian.org/640479 Configure CPAN::Distribution with correct name of html2text DEBPKG:fixes/digest_eval_hole - http://bugs.debian.org/644108 Close the eval "require $module" security hole in Digest->new($algorithm) DEBPKG:fixes/hurd-ndbm - [f0d0a20] [perl #102680] http://bugs.debian.org/645989 Add GNU/Hurd hints for NDBM_File DEBPKG:fixes/sysconf.t-posix - [8040185] [perl #102888] http://bugs.debian.org/646016 Fix hang in ext/POSIX/t/sysconf.t on GNU/Hurd DEBPKG:fixes/hurd-largefile - [1fda587] [perl #103014] http://bugs.debian.org/645790 enable LFS on GNU/Hurd DEBPKG:debian/hurd_test_todo_syslog - http://bugs.debian.org/650093 Disable failing GNU/Hurd tests in cpan/Sys-Syslog/t/syslog.t DEBPKG:fixes/hurd_skip_itimer_virtual - [rt.cpan.org #72754] http://bugs.debian.org/650094 Skip interval timer tests in Time::HiRes on GNU/Hurd DEBPKG:debian/hurd_test_skip_socketpair - http://bugs.debian.org/650186 Disable failing GNU/Hurd tests ext/Socket/t/socketpair.t DEBPKG:debian/hurd_test_skip_sigdispatch - http://bugs.debian.org/650188 Disable failing GNU/Hurd tests op/sigdispatch.t DEBPKG:debian/hurd_test_skip_stack - http://bugs.debian.org/650175 Disable failing GNU/Hurd tests dist/threads/t/stack.t DEBPKG:debian/hurd_test_skip_recv - http://bugs.debian.org/650095 Disable failing GNU/Hurd tests cpan/autodie/t/recv.t DEBPKG:debian/hurd_test_skip_libc - http://bugs.debian.org/650097 Disable failing GNU/Hurd tests dist/threads/t/libc.t DEBPKG:debian/hurd_test_skip_pipe - http://bugs.debian.org/650187 Disable failing GNU/Hurd tests io/pipe.t DEBPKG:debian/hurd_test_skip_io_pipe - http://bugs.debian.org/650096 Disable failing GNU/Hurd tests dist/IO/t/io_pipe.t DEBPKG:fixes/CVE-2012-5195 - avoid calling memset with a negative count DEBPKG:fixes/CVE-2012-5526 - [PATCH 1/4] CR escaping for P3P header DEBPKG:CVE-2013-1667.patch - [PATCH] Prevent premature hsplit() calls, and only trigger REHASH after hsplit() DEBPKG:CVE-2012-6329.patch - http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=695224 [1735f6f] fix arbitrary command execution via _compile function in Maketext.pm Built under linux Compiled at Feb 4 2014 23:11:19 @INC: /etc/perl /usr/local/lib/perl/5.14.2 /usr/local/share/perl/5.14.2 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.14 /usr/share/perl/5.14 /usr/local/lib/site_perl --089e01681318571be004faf8684d Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Salutations all,

I'm having some tr= ouble installing the MySQL PMDA on Ubuntu, haven't found a solution by = googling, and was hoping someone might be able to point me in the right dir= ection.

I install PCP:
$ sudo apt-get install pcp
=

Then from /var/lib/pcp/pmdas/mysql/ I attempt to = install the agent but get a message instead:
$ sudo ./Install
Perl PCP::PMDA module is not installed, install it and try again
=

I try installing the missing module but it's alread= y installed:
$ sudo apt-get install libpcp-pmda-perl
libpcp-pmda-perl is already the newest version.

Th= anks for any help you can offer,
Marty.

=
++Details of the setup below++

MySQL server 5.5

$ pcp
P= erformance Co-Pilot configuration on=C2=A0pcp-test-host:

=C2=A0platform: Linux=C2=A0pcp-test-host=C2=A03.8.0-29-generic #42~p= recise1-Ubuntu SMP Wed Aug 14 16:19:23 UTC 2013 x86_64
=C2=A0hardware: 2 cpus, 1 disk, 7986MB RAM
=C2=A0timezone: E= ST-10
=C2=A0 =C2=A0 =C2=A0pmcd: Version 3.5.11-1, 3 agents
<= div>=C2=A0 =C2=A0 =C2=A0pmda: pmcd linux mmv

$ perl -V
Summary of my perl5 (revision 5 version 14 su= bversion 2) configuration:

=C2=A0 Platform:
=C2=A0 =C2=A0 osname=3Dlinux= , osvers=3D2.6.42-37-generic, archname=3Dx86_64-linux-gnu-thread-multi
=C2=A0 =C2=A0 uname=3D'linux panlong 2.6.42-37-generic #58-ubuntu= smp thu jan 24 15:28:10 utc 2013 x86_64 x86_64 x86_64 gnulinux '
=C2=A0 =C2=A0 config_args=3D'-Dusethreads -Duselargefiles -Dccflag= s=3D-DDEBIAN -Dcccdlflags=3D-fPIC -Darchname=3Dx86_64-linux-gnu -Dprefix=3D= /usr -Dprivlib=3D/usr/share/perl/5.14 -Darchlib=3D/usr/lib/perl/5.14 -Dvend= orprefix=3D/usr -Dvendorlib=3D/usr/share/perl5 -Dvendorarch=3D/usr/lib/perl= 5 -Dsiteprefix=3D/usr/local -Dsitelib=3D/usr/local/share/perl/5.14.2 -Dsite= arch=3D/usr/local/lib/perl/5.14.2 -Dman1dir=3D/usr/share/man/man1 -Dman3dir= =3D/usr/share/man/man3 -Dsiteman1dir=3D/usr/local/man/man1 -Dsiteman3dir=3D= /usr/local/man/man3 -Duse64bitint -Dman1ext=3D1 -Dman3ext=3D3perl -Dpager= =3D/usr/bin/sensible-pager -Uafs -Ud_csh -Ud_ualarm -Uusesfio -Uusenm -Ui_l= ibutil -DDEBUGGING=3D-g -Doptimize=3D-O2 -Duseshrplib -Dlibperl=3Dlibperl.s= o.5.14.2 -des'
=C2=A0 =C2=A0 hint=3Drecommended, useposix=3Dtrue, d_sigaction=3Ddefin= e
=C2=A0 =C2=A0 useithreads=3Ddefine, usemultiplicity=3Ddefine
=C2=A0 =C2=A0 useperlio=3Ddefine, d_sfio=3Dundef, uselargefiles=3Dd= efine, usesocks=3Dundef
=C2=A0 =C2=A0 use64bitint=3Ddefine, use64= bitall=3Ddefine, uselongdouble=3Dundef
=C2=A0 =C2=A0 usemymalloc=3Dn, bincompat5005=3Dundef
=C2=A0 = Compiler:
=C2=A0 =C2=A0 cc=3D'cc', ccflags =3D'-D_REE= NTRANT -D_GNU_SOURCE -DDEBIAN -fno-strict-aliasing -pipe -fstack-protector = -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=3D64',
=C2=A0 =C2=A0 optimize=3D'-O2 -g',
=C2=A0 =C2=A0 cpp= flags=3D'-D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fno-strict-aliasing -pipe= -fstack-protector -I/usr/local/include'
=C2=A0 =C2=A0 ccvers= ion=3D'', gccversion=3D'4.6.3', gccosandvers=3D''
=C2=A0 =C2=A0 intsize=3D4, longsize=3D8, ptrsize=3D8, doublesize=3D8, = byteorder=3D12345678
=C2=A0 =C2=A0 d_longlong=3Ddefine, longlongs= ize=3D8, d_longdbl=3Ddefine, longdblsize=3D16
=C2=A0 =C2=A0 ivtyp= e=3D'long', ivsize=3D8, nvtype=3D'double', nvsize=3D8, Off_= t=3D'off_t', lseeksize=3D8
=C2=A0 =C2=A0 alignbytes=3D8, prototype=3Ddefine
=C2=A0 Link= er and Libraries:
=C2=A0 =C2=A0 ld=3D'cc', ldflags =3D= 9; -fstack-protector -L/usr/local/lib'
=C2=A0 =C2=A0 libpth= =3D/usr/local/lib /lib/x86_64-linux-gnu /lib/../lib /usr/lib/x86_64-linux-g= nu /usr/lib/../lib /lib /usr/lib
=C2=A0 =C2=A0 libs=3D-lgdbm -lgdbm_compat -ldb -ldl -lm -lpthread -lc = -lcrypt
=C2=A0 =C2=A0 perllibs=3D-ldl -lm -lpthread -lc -lcrypt
=C2=A0 =C2=A0 libc=3D, so=3Dso, useshrplib=3Dtrue, libperl=3Dlibpe= rl.so.5.14.2
=C2=A0 =C2=A0 gnulibc_version=3D'2.15'
=C2=A0 Dynamic Linking:
=C2=A0 =C2=A0 dlsrc=3Ddl_dlopen.xs, = dlext=3Dso, d_dlsymun=3Dundef, ccdlflags=3D'-Wl,-E'
=C2= =A0 =C2=A0 cccdlflags=3D'-fPIC', lddlflags=3D'-shared -O2 -g -L= /usr/local/lib -fstack-protector'

Characteristics of this binary (from libperl):
=C2=A0 Compile-time options: MULTIPLICITY PERL_DONT_CREATE_GVSV
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 PERL_IMPLICIT_CONTEXT PERL_MALLOC_WRAP
=C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 PERL_= PRESERVE_IVUV USE_64_BIT_ALL USE_64_BIT_INT
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 USE_ITHREADS USE_LARGE_FILES USE_PERLIO USE_PERL_ATOF
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 USE_REENTRANT_API
=C2=A0 Locally applied patches:
=C2=A0 =C2=A0 =C2=A0 =C2=A0 DEBPKG:debian/arm_thread_stress_timeou= t - http://bugs.debian.org/501970= Raise the timeout of ext/threads/shared/t/stress.t to accommodate slow= er build hosts
=C2=A0 =C2=A0 =C2=A0 =C2=A0 DEBPKG:debian/cpan_definstalldirs - Provid= e a sensible INSTALLDIRS default for modules installed from CPAN.
=C2=A0 =C2=A0 =C2=A0 =C2=A0 DEBPKG:debian/db_file_ver - http://bugs.debian.org/340047 Remove overly res= trictive DB_File version check.
=C2=A0 =C2=A0 =C2=A0 =C2=A0 DEBPKG:debian/doc_info - Replace generic m= an(1) instructions with Debian-specific information.
=C2=A0 =C2= =A0 =C2=A0 =C2=A0 DEBPKG:debian/enc2xs_inc - http://bugs.debian.org/290336 Tweak enc2xs to follow symlin= ks and ignore missing @INC directories.
=C2=A0 =C2=A0 =C2=A0 =C2=A0 DEBPKG:debian/errno_ver - http://bugs.debian.org/343351 Remove Errno ve= rsion check due to upgrade problems with long-running processes.
= =C2=A0 =C2=A0 =C2=A0 =C2=A0 DEBPKG:debian/libperl_embed_doc - http://bugs.debian.org/186778 Note that li= bperl-dev package is required for embedded linking
=C2=A0 =C2=A0 =C2=A0 =C2=A0 DEBPKG:fixes/respect_umask - Respect umask= during installation
=C2=A0 =C2=A0 =C2=A0 =C2=A0 DEBPKG:debian/wr= itable_site_dirs - Set umask approproately for site install directories
=C2=A0 =C2=A0 =C2=A0 =C2=A0 DEBPKG:debian/extutils_set_libperl_path = - EU:MM: Set location of libperl.a to /usr/lib
=C2=A0 =C2=A0 =C2=A0 =C2=A0 DEBPKG:debian/no_packlist_perllocal - Don&= #39;t install .packlist or perllocal.pod for perl or vendor
=C2= =A0 =C2=A0 =C2=A0 =C2=A0 DEBPKG:debian/prefix_changes - Fiddle with *PREFIX= and variables written to the makefile
=C2=A0 =C2=A0 =C2=A0 =C2=A0 DEBPKG:debian/fakeroot - Postpone LD_LIBRA= RY_PATH evaluation to the binary targets.
=C2=A0 =C2=A0 =C2=A0 = =C2=A0 DEBPKG:debian/instmodsh_doc - Debian policy doesn't install .pac= klist files for core or vendor.
=C2=A0 =C2=A0 =C2=A0 =C2=A0 DEBPKG:debian/ld_run_path - Remove standard lib= s from LD_RUN_PATH as per Debian policy.
=C2=A0 =C2=A0 =C2=A0 =C2= =A0 DEBPKG:debian/libnet_config_path - Set location of libnet.cfg to /etc/p= erl/Net as /usr may not be writable.
=C2=A0 =C2=A0 =C2=A0 =C2=A0 DEBPKG:debian/m68k_thread_stress - http://bugs.debian.org/517938 http://bugs.debian.org/495826 Disab= le some threads tests on m68k for now due to missing TLS.
=C2=A0 =C2=A0 =C2=A0 =C2=A0 DEBPKG:debian/mod_paths - Tweak @INC order= ing for Debian
=C2=A0 =C2=A0 =C2=A0 =C2=A0 DEBPKG:debian/module_b= uild_man_extensions - http://bugs= .debian.org/479460 Adjust Module::Build manual page extensions for the = Debian Perl policy
=C2=A0 =C2=A0 =C2=A0 =C2=A0 DEBPKG:debian/prune_libs - http://bugs.debian.org/128355 Prune the list= of libraries wanted to what we actually need.
=C2=A0 =C2=A0 =C2= =A0 =C2=A0 DEBPKG:fixes/net_smtp_docs - [rt.= cpan.org #36038] http://bugs.= debian.org/100195 Document the Net::SMTP 'Port' option
=C2=A0 =C2=A0 =C2=A0 =C2=A0 DEBPKG:debian/perlivp - http://bugs.debian.org/510895 Make perlivp skip= include directories in /usr/local
=C2=A0 =C2=A0 =C2=A0 =C2=A0 DE= BPKG:debian/disable-zlib-bundling - Disable zlib bundling in Compress::Raw:= :Zlib
=C2=A0 =C2=A0 =C2=A0 =C2=A0 DEBPKG:debian/cpanplus_definstalldirs - http://bugs.debian.org/533707 C= onfigure CPANPLUS to use the site directories by default.
=C2=A0 = =C2=A0 =C2=A0 =C2=A0 DEBPKG:debian/cpanplus_config_path - Save local versio= ns of CPANPLUS::Config::System into /etc/perl.
=C2=A0 =C2=A0 =C2=A0 =C2=A0 DEBPKG:debian/deprecate-with-apt - http://bugs.debian.org/580034 Point = users to Debian packages of deprecated core modules
=C2=A0 =C2=A0= =C2=A0 =C2=A0 DEBPKG:fixes/hurd-ccflags - [a190e64] http://bugs.debian.org/587901 [perl #92244] Make hi= nts/gnu.sh append to $ccflags rather than overriding them
=C2=A0 =C2=A0 =C2=A0 =C2=A0 DEBPKG:debian/squelch-locale-warnings - http://bugs.debian.org/508764 S= quelch locale warnings in Debian package maintainer scripts
=C2= =A0 =C2=A0 =C2=A0 =C2=A0 DEBPKG:debian/skip-upstream-git-tests - Skip tests= specific to the upstream Git repository
=C2=A0 =C2=A0 =C2=A0 =C2=A0 DEBPKG:fixes/extutils-cbuilder-cflags - [0= 11e8fb] http://bugs.debian.org/62= 4460 [perl #89478] Append CFLAGS and LDFLAGS to their Config.pm counter= parts in EU::CBuilder
=C2=A0 =C2=A0 =C2=A0 =C2=A0 DEBPKG:fixes/module-build-home-directory -= http://bugs.debian.org/624850 [rt.cpan.org #67893] Fix failing tilde= test when run under a UID without a passwd entry
=C2=A0 =C2=A0 =C2=A0 =C2=A0 DEBPKG:debian/patchlevel - http://bugs.debian.org/567489 List packaged = patches for 5.14.2-6ubuntu2.4 in patchlevel.h
=C2=A0 =C2=A0 =C2= =A0 =C2=A0 DEBPKG:fixes/h2ph-multiarch - [e7ec705] http://bugs.debian.org/625808 [perl #90122] Make h2ph= correctly search gcc include directories
=C2=A0 =C2=A0 =C2=A0 =C2=A0 DEBPKG:fixes/index-tainting - [3b36395] http://bugs.debian.org/291450 [= perl #64804] RT 64804: tainting with index() of a constant
=C2=A0= =C2=A0 =C2=A0 =C2=A0 DEBPKG:debian/skip-kfreebsd-crash - http://bugs.debian.org/628493 [perl #96272] Sk= ip a crashing test case in t/op/threads.t on GNU/kFreeBSD
=C2=A0 =C2=A0 =C2=A0 =C2=A0 DEBPKG:fixes/document_makemaker_ccflags - = http://bugs.debian.org/628522= [rt.cpan.org #68613] Document that CCFL= AGS should include $Config{ccflags}
=C2=A0 =C2=A0 =C2=A0 =C2=A0 DEBPKG:fixes/sys-syslog-socket-timeout-kfr= eebsd.patch - http://bugs.debian.= org/627821 [rt.cpan.org #69997] Use = a socket timeout on GNU/kFreeBSD to catch ICMP port unreachable messages
=C2=A0 =C2=A0 =C2=A0 =C2=A0 DEBPKG:fixes/hurd-hints - http://bugs.debian.org/636609 Improve general= GNU hints, needed for GNU/Hurd.
=C2=A0 =C2=A0 =C2=A0 =C2=A0 DEBP= KG:fixes/pod_fixes - [7698aed] ht= tp://bugs.debian.org/637816 Fix typos in several pod/perl*.pod files
=C2=A0 =C2=A0 =C2=A0 =C2=A0 DEBPKG:debian/find_html2text - http://bugs.debian.org/640479 Configure = CPAN::Distribution with correct name of html2text
=C2=A0 =C2=A0 = =C2=A0 =C2=A0 DEBPKG:fixes/digest_eval_hole - http://bugs.debian.org/644108 Close the eval "require= $module" security hole in Digest->new($algorithm)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 DEBPKG:fixes/hurd-ndbm - [f0d0a20] [perl #= 102680] http://bugs.debian.org/64= 5989 Add GNU/Hurd hints for NDBM_File
=C2=A0 =C2=A0 =C2=A0 = =C2=A0 DEBPKG:fixes/sysconf.t-posix - [8040185] [perl #102888] http://bugs.debian.org/646016 Fix hang in= ext/POSIX/t/sysconf.t on GNU/Hurd
=C2=A0 =C2=A0 =C2=A0 =C2=A0 DEBPKG:fixes/hurd-largefile - [1fda587] [p= erl #103014] http://bugs.debian.o= rg/645790 enable LFS on GNU/Hurd
=C2=A0 =C2=A0 =C2=A0 =C2=A0 = DEBPKG:debian/hurd_test_todo_syslog - http://bugs.debian.org/650093 Disable failing GNU/Hurd tests in cp= an/Sys-Syslog/t/syslog.t
=C2=A0 =C2=A0 =C2=A0 =C2=A0 DEBPKG:fixes/hurd_skip_itimer_virtual - [<= a href=3D"http://rt.cpan.org">rt.cpan.org #72754] http://bugs.debian.org/650094 Skip interval timer = tests in Time::HiRes on GNU/Hurd
=C2=A0 =C2=A0 =C2=A0 =C2=A0 DEBPKG:debian/hurd_test_skip_socketpair - = http://bugs.debian.org/650186= Disable failing GNU/Hurd tests ext/Socket/t/socketpair.t
=C2=A0 = =C2=A0 =C2=A0 =C2=A0 DEBPKG:debian/hurd_test_skip_sigdispatch - http://bugs.debian.org/650188 Disable fa= iling GNU/Hurd tests op/sigdispatch.t
=C2=A0 =C2=A0 =C2=A0 =C2=A0 DEBPKG:debian/hurd_test_skip_stack - http://bugs.debian.org/650175 Disa= ble failing GNU/Hurd tests dist/threads/t/stack.t
=C2=A0 =C2=A0 = =C2=A0 =C2=A0 DEBPKG:debian/hurd_test_skip_recv - http://bugs.debian.org/650095 Disable failing GNU/Hurd= tests cpan/autodie/t/recv.t
=C2=A0 =C2=A0 =C2=A0 =C2=A0 DEBPKG:debian/hurd_test_skip_libc - http://bugs.debian.org/650097 Disab= le failing GNU/Hurd tests dist/threads/t/libc.t
=C2=A0 =C2=A0 =C2= =A0 =C2=A0 DEBPKG:debian/hurd_test_skip_pipe - http://bugs.debian.org/650187 Disable failing GNU/Hurd te= sts io/pipe.t
=C2=A0 =C2=A0 =C2=A0 =C2=A0 DEBPKG:debian/hurd_test_skip_io_pipe - http://bugs.debian.org/650096 Di= sable failing GNU/Hurd tests dist/IO/t/io_pipe.t
=C2=A0 =C2=A0 = =C2=A0 =C2=A0 DEBPKG:fixes/CVE-2012-5195 - avoid calling memset with a nega= tive count
=C2=A0 =C2=A0 =C2=A0 =C2=A0 DEBPKG:fixes/CVE-2012-5526 - [PATCH 1/4] C= R escaping for P3P header
=C2=A0 =C2=A0 =C2=A0 =C2=A0 DEBPKG:CVE-= 2013-1667.patch - [PATCH] Prevent premature hsplit() calls, and only trigge= r REHASH after hsplit()
=C2=A0 =C2=A0 =C2=A0 =C2=A0 DEBPKG:CVE-20= 12-6329.patch - http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=3D695224 [1= 735f6f] fix arbitrary command execution via _compile function in Maketext.p= m
=C2=A0 Built under linux
=C2=A0 Compiled at Feb =C2=A04 2014= 23:11:19
=C2=A0 @INC:
=C2=A0 =C2=A0 /etc/perl
=C2=A0 =C2=A0 /usr/local/lib/perl/5.14.2
=C2=A0 =C2=A0 /usr/loc= al/share/perl/5.14.2
=C2=A0 =C2=A0 /usr/lib/perl5
=C2=A0 =C2=A0 /usr/share/perl5
=C2=A0 =C2=A0 /usr/lib/perl/5= .14
=C2=A0 =C2=A0 /usr/share/perl/5.14
=C2=A0 =C2=A0 /u= sr/local/lib/site_perl

--089e01681318571be004faf8684d-- From nscott@redhat.com Tue Jun 3 20:46:07 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 4EC987F3F for ; Tue, 3 Jun 2014 20:46:07 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 36EDF8F8074 for ; Tue, 3 Jun 2014 18:46:04 -0700 (PDT) X-ASG-Debug-ID: 1401846359-04cbb050fa328840001-S8gJnT Received: from mx4-phx2.redhat.com (mx4-phx2.redhat.com [209.132.183.25]) by cuda.sgi.com with ESMTP id 74rueRoj36Fv7qlo for ; Tue, 03 Jun 2014 18:45:59 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.25 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx4-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id s541jwXN014206; Tue, 3 Jun 2014 21:45:58 -0400 Date: Tue, 3 Jun 2014 21:45:57 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: Marty Customs Cc: pcp@oss.sgi.com Message-ID: <175357119.19843518.1401846357840.JavaMail.zimbra@redhat.com> In-Reply-To: References: Subject: Re: [pcp] Unable to install MySQL PMDA on Ubuntu MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [pcp] Unable to install MySQL PMDA on Ubuntu Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: Unable to install MySQL PMDA on Ubuntu Thread-Index: LcF/30Sun/tWIrpS+OIADDWUrOTPXg== X-Barracuda-Connect: mx4-phx2.redhat.com[209.132.183.25] X-Barracuda-Start-Time: 1401846359 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6360 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Hi Marty, ----- Original Message ----- > [...] > Then from /var/lib/pcp/pmdas/mysql/ I attempt to install the agent but get a > message instead: > $ sudo ./Install > Perl PCP::PMDA module is not installed, install it and try again > This message is coming from checks in /usr/share/pcp/lib/pmdaproc.sh which is attempting to verify the pcp/perl setup - in particular, it runs a hunk of shell code alot like this: perl -e 'use PCP::PMDA' 2>/dev/null if test $? -ne 0 then echo 'Perl PCP::PMDA module is not installed, install it and try again' exit 1 fi So what does "sudo perl -e 'use PCP::PMDA'" print out? (and whats the exit code, cos thats ultimately preventing the Install from proceeding). > I try installing the missing module but it's already installed: > $ sudo apt-get install libpcp-pmda-perl > libpcp-pmda-perl is already the newest version. That's ... wierd. Have never come across this issue myself, testing a stock Debian install. But, the answer might come from the perl diagnostics above, hopefully - let us know what you find. cheers. -- Nathan From marty.customs@gmail.com Tue Jun 3 20:50:53 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,HTML_MESSAGE, T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 114FB7F3F for ; Tue, 3 Jun 2014 20:50:53 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id ED1828F8081 for ; Tue, 3 Jun 2014 18:50:52 -0700 (PDT) X-ASG-Debug-ID: 1401846647-04cb6c100a1f78d0001-S8gJnT Received: from mail-qg0-f52.google.com (mail-qg0-f52.google.com [209.85.192.52]) by cuda.sgi.com with ESMTP id MpFMUneRVT1JCgsL (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Tue, 03 Jun 2014 18:50:48 -0700 (PDT) X-Barracuda-Envelope-From: marty.customs@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.192.52 X-Barracuda-IPDD: Level1 [gmail.com/209.85.192.52] Received: by mail-qg0-f52.google.com with SMTP id a108so14452162qge.39 for ; Tue, 03 Jun 2014 18:50:47 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.192.52] X-Barracuda-IPDD: Level1 [gmail.com/209.85.192.52] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=n9X4DFyLTZFDBb/7NH4JNfOIxaykRGxf82oXB1xodY0=; b=SVT5RgOi7Nw2tGVy3cOyTal2Hi/sOpOXzwozYkmdnjq7sA4dJQTgWlawPa6zH4pQz8 X64kcRon0uKzO5ZiOsAdW7mZvcaWRwQCosdOFk2R6IiXz+DfXKFjq/vBszlo7+8yNQhc 5Mp7Chl4uBZIoOorrYv9FAk/yyd9L7rAGaL4F/C96auLYS1Xe/Bis5DUXMl2rPq9Dlhp L7NLo+BNJhii/P6h05Iw4LXXuni9nLrDChLny1ZUPuOiQpMQxAnxlYaDt60vFoZYdlqg IW5D8Yf8FmCrCqm9Jx6oXfaUo5iyceG6oF9HxszZYfE0OTfxrwDXyAPCgnyd8ALGJZz/ 9Fhg== MIME-Version: 1.0 X-Received: by 10.229.239.4 with SMTP id ku4mr65972026qcb.17.1401846647690; Tue, 03 Jun 2014 18:50:47 -0700 (PDT) Received: by 10.140.42.181 with HTTP; Tue, 3 Jun 2014 18:50:47 -0700 (PDT) In-Reply-To: <175357119.19843518.1401846357840.JavaMail.zimbra@redhat.com> References: <175357119.19843518.1401846357840.JavaMail.zimbra@redhat.com> Date: Wed, 4 Jun 2014 11:50:47 +1000 Message-ID: Subject: Re: [pcp] Unable to install MySQL PMDA on Ubuntu From: Marty Customs X-ASG-Orig-Subj: Re: [pcp] Unable to install MySQL PMDA on Ubuntu To: Nathan Scott Cc: pcp@oss.sgi.com Content-Type: multipart/alternative; boundary=001a11346b547734fd04faf8db10 X-Barracuda-Connect: mail-qg0-f52.google.com[209.85.192.52] X-Barracuda-Start-Time: 1401846648 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6361 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message --001a11346b547734fd04faf8db10 Content-Type: text/plain; charset=UTF-8 Hi Nathan and thanks for the prompt reply :-) Output below: $ sudo perl -e 'use PCP::PMDA' Can't load '/usr/lib/perl5/auto/PCP/PMDA/PMDA.so' for module PCP::PMDA: /usr/lib/perl5/auto/PCP/PMDA/PMDA.so: undefined symbol: pmProgname at /usr/lib/perl/5.14/DynaLoader.pm line 184. at -e line 1 Compilation failed in require at -e line 1. BEGIN failed--compilation aborted at -e line 1. $ echo $? 255 On Wed, Jun 4, 2014 at 11:45 AM, Nathan Scott wrote: > Hi Marty, > > ----- Original Message ----- > > [...] > > Then from /var/lib/pcp/pmdas/mysql/ I attempt to install the agent but > get a > > message instead: > > $ sudo ./Install > > Perl PCP::PMDA module is not installed, install it and try again > > > > This message is coming from checks in /usr/share/pcp/lib/pmdaproc.sh which > is attempting to verify the pcp/perl setup - in particular, it runs a hunk > of shell code alot like this: > > perl -e 'use PCP::PMDA' 2>/dev/null > if test $? -ne 0 > then > echo 'Perl PCP::PMDA module is not installed, install it and try again' > exit 1 > fi > > So what does "sudo perl -e 'use PCP::PMDA'" print out? (and whats the exit > code, cos thats ultimately preventing the Install from proceeding). > > > I try installing the missing module but it's already installed: > > $ sudo apt-get install libpcp-pmda-perl > > libpcp-pmda-perl is already the newest version. > > That's ... wierd. Have never come across this issue myself, testing a > stock > Debian install. But, the answer might come from the perl diagnostics > above, > hopefully - let us know what you find. > > cheers. > > -- > Nathan > --001a11346b547734fd04faf8db10 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Hi Nathan and thanks for the prompt reply :-)

Output below:

$ sudo perl -e 'use = PCP::PMDA'
Can't load '/usr/lib/perl5/auto/PCP/PMDA/P= MDA.so' for module PCP::PMDA: /usr/lib/perl5/auto/PCP/PMDA/PMDA.so: und= efined symbol: pmProgname at /usr/lib/perl/5.14/DynaLoader.pm line 184.
=C2=A0at -e line 1
Compilation failed in require at -e= line 1.
BEGIN failed--compilation aborted at -e line 1.
$ echo $?
255




On Wed, Jun 4, 2014 at 11:45 AM, Nathan = Scott <nathans@redhat.com> wrote:
Hi Marty,

----- Original Message -----
> [...]
> Then from /var/lib/pcp/pmdas/mysql/ I attempt to insta= ll the agent but get a
> message instead:
> $ sudo ./Install
> Perl PCP::PMDA module is not installed, install it and try again
>

This message is coming from checks in /usr/share/pcp/lib/pmdaproc.sh = which
is attempting to verify the pcp/perl setup - in particular, it runs a hunk<= br> of shell code alot like this:

perl -e 'use PCP::PMDA' 2>/dev/null
if test $? -ne 0
then
=C2=A0 =C2=A0 echo 'Perl PCP::PMDA module is not installed, install it = and try again'
=C2=A0 =C2=A0 exit 1
fi

So what does "sudo perl -e 'use PCP::PMDA'" print out? = =C2=A0(and whats the exit
code, cos thats ultimately preventing the Install from proceeding).

> I try installing the missing module but it's already installed: > $ sudo apt-get install libpcp-pmda-perl
> libpcp-pmda-perl is already the newest version.

That's ... wierd. =C2=A0Have never come across this issue myself,= testing a stock
Debian install. =C2=A0But, the answer might come from the perl diagnostics = above,
hopefully - let us know what you find.

cheers.

--
Nathan

--001a11346b547734fd04faf8db10-- From nscott@redhat.com Tue Jun 3 20:56:38 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id DD7A97F3F for ; Tue, 3 Jun 2014 20:56:38 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id B3CC38F8074 for ; Tue, 3 Jun 2014 18:56:38 -0700 (PDT) X-ASG-Debug-ID: 1401846995-04cbb050fc3291f0001-S8gJnT Received: from mx5-phx2.redhat.com (mx5-phx2.redhat.com [209.132.183.37]) by cuda.sgi.com with ESMTP id Ws1p9X5CFPo07LFl for ; Tue, 03 Jun 2014 18:56:35 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.37 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx5-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s541uYGV016969; Tue, 3 Jun 2014 21:56:34 -0400 Date: Tue, 3 Jun 2014 21:56:34 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: Marty Customs Cc: pcp@oss.sgi.com Message-ID: <1652263434.19845148.1401846994798.JavaMail.zimbra@redhat.com> In-Reply-To: References: <175357119.19843518.1401846357840.JavaMail.zimbra@redhat.com> Subject: Re: [pcp] Unable to install MySQL PMDA on Ubuntu MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [pcp] Unable to install MySQL PMDA on Ubuntu Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: Unable to install MySQL PMDA on Ubuntu Thread-Index: G8qdL9ffK+Ug+z3GmkdFTiucLpwAWQ== X-Barracuda-Connect: mx5-phx2.redhat.com[209.132.183.37] X-Barracuda-Start-Time: 1401846995 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6361 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... ----- Original Message ----- > Hi Nathan and thanks for the prompt reply :-) > > Output below: > > $ sudo perl -e 'use PCP::PMDA' > Can't load '/usr/lib/perl5/auto/PCP/PMDA/PMDA.so' for module PCP::PMDA: > /usr/lib/perl5/auto/PCP/PMDA/PMDA.so: undefined symbol: pmProgname at > /usr/lib/perl/5.14/DynaLoader.pm line 184. > at -e line 1 > Compilation failed in require at -e line 1. > BEGIN failed--compilation aborted at -e line 1. > $ echo $? > 255 Hmm, strange - that symbol should be coming from /usr/lib[64]/libpcp.so, its always been there (since day 1 in pcp). Does anything work in the PCP install there? (like "pminfo", and/or is pmcd running? - they also use that symbol) I assume they're working - if so looks like a linkage error in the way the perl interfaces were built, perhaps? If thats the case, I recommend building from source yourself I guess (and reporting the issue to the Ubuntu folks) - the latest release is a good, stable version to use (pcp-3.9.4 on www.performancecopilot.org downloads area, or the git tree). cheers. -- Nathan From marty.customs@gmail.com Tue Jun 3 21:01:13 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,HTML_MESSAGE, T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 690D57F3F for ; Tue, 3 Jun 2014 21:01:13 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id E67F3AC002 for ; Tue, 3 Jun 2014 19:01:09 -0700 (PDT) X-ASG-Debug-ID: 1401847267-04cbb050fb3295f0001-S8gJnT Received: from mail-qa0-f42.google.com (mail-qa0-f42.google.com [209.85.216.42]) by cuda.sgi.com with ESMTP id hYM7qggVZ3AKw2hT (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Tue, 03 Jun 2014 19:01:08 -0700 (PDT) X-Barracuda-Envelope-From: marty.customs@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.216.42 X-Barracuda-IPDD: Level1 [gmail.com/209.85.216.42] Received: by mail-qa0-f42.google.com with SMTP id j5so6195867qaq.29 for ; Tue, 03 Jun 2014 19:01:07 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.216.42] X-Barracuda-IPDD: Level1 [gmail.com/209.85.216.42] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=1E09c7wzYV3kYW0tTKFu+KlkVEm+FR1IP0Z2CWZBOgY=; b=0Q7eakZnJPOyAeA3+VgCwKZAhSTxyBk9PtGnfqBGUHAuLD3G3b3Bg9WYbiBWeA96XQ DrjCfqs/XekWaEOMIE7VUxR23GvFJGgcqJKXSeVlyrXgQl1UBfZ9/iVXPGPcLKwN5cqY p1QUBx3V4vvSSLe8LQL8Sosp0+EaqA9JZB1v6gzvfUF1jmVBzHzBQYSN0uBf6MX2tAe1 9QxvbNUujM+yAiUpAUJiSH3QOEcFbFp8adrTvSJgF9hCFP10Z8uLiwnMF0AHrmTeiBdW wC6l+dfG/KmMiokKl+WxFzNnaJFr7oLxXzWBCt4ltqQc+UMHHx1ISdwLws18CTGY3tmP mO+w== MIME-Version: 1.0 X-Received: by 10.224.46.66 with SMTP id i2mr19585492qaf.22.1401847267507; Tue, 03 Jun 2014 19:01:07 -0700 (PDT) Received: by 10.140.42.181 with HTTP; Tue, 3 Jun 2014 19:01:07 -0700 (PDT) In-Reply-To: <1652263434.19845148.1401846994798.JavaMail.zimbra@redhat.com> References: <175357119.19843518.1401846357840.JavaMail.zimbra@redhat.com> <1652263434.19845148.1401846994798.JavaMail.zimbra@redhat.com> Date: Wed, 4 Jun 2014 12:01:07 +1000 Message-ID: Subject: Re: [pcp] Unable to install MySQL PMDA on Ubuntu From: Marty Customs X-ASG-Orig-Subj: Re: [pcp] Unable to install MySQL PMDA on Ubuntu To: Nathan Scott Cc: pcp@oss.sgi.com Content-Type: multipart/alternative; boundary=001a11c29e0a68c58904faf900d6 X-Barracuda-Connect: mail-qa0-f42.google.com[209.85.216.42] X-Barracuda-Start-Time: 1401847267 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6361 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message --001a11c29e0a68c58904faf900d6 Content-Type: text/plain; charset=UTF-8 pminfo works and pmcd is running. Ok thanks for your help and I'll let Ubuntu folks know. Marty. On Wed, Jun 4, 2014 at 11:56 AM, Nathan Scott wrote: > > > ----- Original Message ----- > > Hi Nathan and thanks for the prompt reply :-) > > > > Output below: > > > > $ sudo perl -e 'use PCP::PMDA' > > Can't load '/usr/lib/perl5/auto/PCP/PMDA/PMDA.so' for module PCP::PMDA: > > /usr/lib/perl5/auto/PCP/PMDA/PMDA.so: undefined symbol: pmProgname at > > /usr/lib/perl/5.14/DynaLoader.pm line 184. > > at -e line 1 > > Compilation failed in require at -e line 1. > > BEGIN failed--compilation aborted at -e line 1. > > $ echo $? > > 255 > > Hmm, strange - that symbol should be coming from /usr/lib[64]/libpcp.so, > its always been there (since day 1 in pcp). Does anything work in the > PCP install there? (like "pminfo", and/or is pmcd running? - they also > use that symbol) > > I assume they're working - if so looks like a linkage error in the way > the perl interfaces were built, perhaps? > > If thats the case, I recommend building from source yourself I guess (and > reporting the issue to the Ubuntu folks) - the latest release is a good, > stable version to use (pcp-3.9.4 on www.performancecopilot.org downloads > area, or the git tree). > > cheers. > > -- > Nathan > --001a11c29e0a68c58904faf900d6 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
pminfo works and pmcd is running. Ok thanks for your help = and I'll let Ubuntu folks know.

Marty.


= On Wed, Jun 4, 2014 at 11:56 AM, Nathan Scott <nathans@redhat.com>= wrote:


----- Original Message -----
> Hi Nathan and thanks for the prompt reply :-)
>
> Output below:
>
> $ sudo perl -e 'use PCP::PMDA'
> Can't load '/usr/lib/perl5/auto/PCP/PMDA/PMDA.so' for modu= le PCP::PMDA:
> /usr/lib/perl5/auto/PCP/PMDA/PMDA.so: undefined symbol: pmProgname at<= br> > /usr/lib/perl/5.14/DynaLoader.pm line 184.
> =C2=A0at -e line 1
> Compilation failed in require at -e line 1.
> BEGIN failed--compilation aborted at -e line 1.
> $ echo $?
> 255

Hmm, strange - that symbol should be coming from /usr/lib[64]/libpcp.= so,
its always been there (since day 1 in pcp). =C2=A0Does anything work in the=
PCP install there? =C2=A0(like "pminfo", and/or is pmcd running? = - they also
use that symbol)

I assume they're working - if so looks like a linkage error in the way<= br> the perl interfaces were built, perhaps?

If thats the case, I recommend building from source yourself I guess (and reporting the issue to the Ubuntu folks) - the latest release is a good, stable version to use (pcp-3.9.4 on www.performancecopilot.org downloads
area, or the git tree).

cheers.

--
Nathan

--001a11c29e0a68c58904faf900d6-- From nscott@redhat.com Tue Jun 3 22:56:16 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id C3BC87F3F for ; Tue, 3 Jun 2014 22:56:16 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 640E5AC002 for ; Tue, 3 Jun 2014 20:56:13 -0700 (PDT) X-ASG-Debug-ID: 1401854168-04cb6c100c1fe280001-S8gJnT Received: from mx5-phx2.redhat.com (mx5-phx2.redhat.com [209.132.183.37]) by cuda.sgi.com with ESMTP id FixkbAFeV9Na1VZY for ; Tue, 03 Jun 2014 20:56:08 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.37 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx5-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s543u7gZ007147; Tue, 3 Jun 2014 23:56:07 -0400 Date: Tue, 3 Jun 2014 23:56:07 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: Marty Customs Cc: pcp@oss.sgi.com Message-ID: <115581243.19861436.1401854167089.JavaMail.zimbra@redhat.com> In-Reply-To: References: <175357119.19843518.1401846357840.JavaMail.zimbra@redhat.com> <1652263434.19845148.1401846994798.JavaMail.zimbra@redhat.com> Subject: Re: [pcp] Unable to install MySQL PMDA on Ubuntu MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [pcp] Unable to install MySQL PMDA on Ubuntu Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: Unable to install MySQL PMDA on Ubuntu Thread-Index: /0EJgxT4TeeWQpOXlII7+gNIkXlx9g== X-Barracuda-Connect: mx5-phx2.redhat.com[209.132.183.37] X-Barracuda-Start-Time: 1401854168 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6363 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... ----- Original Message ----- > pminfo works and pmcd is running. Ok thanks for your help and I'll let > Ubuntu folks know. Yeah, it sounds like an issue specific to the perl-wrapper. You can check that they are linked correctly via ldd(1) ... should see lines like: $ ldd /usr/lib64/perl5/vendor_perl/auto/PCP/PMDA/PMDA.so linux-vdso.so.1 => (0x00007ffffdfff000) libpcp_pmda.so.3 => /usr/lib64/libpcp_pmda.so.3 (0x00007effc4372000) libpcp.so.3 => /usr/lib64/libpcp.so.3 (0x00007effc40fd000) [...] That third library is the one which should resolve the pmProgname symbol. cheers. -- Nathan From nscott@redhat.com Tue Jun 3 22:57:47 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 0BFF17F3F for ; Tue, 3 Jun 2014 22:57:47 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id D442E8F8074 for ; Tue, 3 Jun 2014 20:57:43 -0700 (PDT) X-ASG-Debug-ID: 1401854261-04cbb050fd32fb90001-S8gJnT Received: from mx5-phx2.redhat.com (mx5-phx2.redhat.com [209.132.183.37]) by cuda.sgi.com with ESMTP id L6YXCbDMFydBEbkv for ; Tue, 03 Jun 2014 20:57:41 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.37 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx5-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s543vf7q007196 for ; Tue, 3 Jun 2014 23:57:41 -0400 Date: Tue, 3 Jun 2014 23:57:40 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: pcp@oss.sgi.com Message-ID: <1334253483.19861493.1401854260979.JavaMail.zimbra@redhat.com> In-Reply-To: <1485036797.19840311.1401844672412.JavaMail.zimbra@redhat.com> Subject: pcp updates: probing rejig, python pmcc, qa MIME-Version: 1.0 X-ASG-Orig-Subj: pcp updates: probing rejig, python pmcc, qa Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: pcp updates: probing rejig, python pmcc, qa Thread-Index: fltK0z85cWVDAzuMggFaPJYhSXz8lw== X-Barracuda-Connect: mx5-phx2.redhat.com[209.132.183.37] X-Barracuda-Start-Time: 1401854261 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6363 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Changes committed to git://git.performancecopilot.org/pcp.git dev qa/734 | 5 qa/979 | 4 qa/980 | 2 qa/src/test_pmcc.python | 20 + src/libpcp/src/check-statics | 5 src/libpcp/src/probe.c | 461 ++++++++++++++++++++----------------------- src/python/pcp/pmcc.py | 45 ++-- 7 files changed, 268 insertions(+), 274 deletions(-) commit bdef24031101e2f87c2056cda02d45475b9af22c Merge: 7446d0d 64a7394 Author: Nathan Scott Date: Wed Jun 4 11:13:16 2014 +1000 Merge branch 'brolley/dev' of ../pcpfans into brolley-merge commit 7446d0d46ab2d1c1d610d49b4d05511018d53878 Author: Nathan Scott Date: Wed Jun 4 10:59:03 2014 +1000 Ensure test qa/739 attempts to run without down-rev remotes Test 738 exercising context -> hostname issues in pmstat and libpcp can still do useful work without a downrev host with no pmcd.hostname metric. Provide a fallback for this case so that the test still runs even when no pre-3.8.4 hosts exist. commit a8a92b832de3ff943a7702ad62903fc032b1d0fd Author: Nathan Scott Date: Wed Jun 4 10:56:44 2014 +1000 Improve handling of archives and errors in python pmcc module Handling of errors in pmcc is much proved - previously it just printed a message to stdout for all caught exceptions and then continued right on its merry way (!). This typically resulted in promptly getting hit by a bus two or three lines on, due to some assumptions about earlier success in setting up some data structure. Particularly problematic was archive replay reaching the end of the archive, which is a natural and expected "error" condition. Adding to the dilemma is the way we have good context for doing error reporting at the initial exception catching site. Handle this by now printing to stderr, then raising SystemExit with an exit code indicative of normal(EOL) or abnormal failure. Then, we catch this in the top level run() interface and return that code to the script, which can deal with it as it will - usually simply by exiting with that code, I expect. Test qa/980 now passes. Updated test 979 (live mode) to use a shorter sampling interval while in that neck of the woods - to complete more quickly but also exercise interval setting. commit 64a7394458a66cf3d4a4559a7290b421a0994c07 Author: Dave Brolley Date: Tue Jun 3 15:54:21 2014 -0400 src/libpcp/src/probe.c: Ensure that mutexes are always initialized. Even if we're only using the main thread for probing. Also fixed a few typos. commit 0642129107c88820fe9924c0320cf3898008287e Merge: c8e9b3d fa5f6da Author: Dave Brolley Date: Tue Jun 3 12:03:52 2014 -0400 Merge remote-tracking branch 'origin/dev' into brolley/dev commit c8e9b3dc926d0285db06d94207ec36f29f8e3678 Author: Dave Brolley Date: Tue Jun 3 12:01:54 2014 -0400 Implement fche's threading algorithm for active probing. commit fa5f6daa4cd9fc4c9d34c71c864a8b572e7c0792 Author: Nathan Scott Date: Tue Jun 3 19:13:29 2014 +1000 Switch pmcc tests 979 and 980 to using regular pcp options From nscott@redhat.com Tue Jun 3 22:57:54 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id B7C0A7F3F for ; Tue, 3 Jun 2014 22:57:54 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 67512AC002 for ; Tue, 3 Jun 2014 20:57:54 -0700 (PDT) X-ASG-Debug-ID: 1401854272-04cb6c100c1fe410001-S8gJnT Received: from mx6-phx2.redhat.com (mx6-phx2.redhat.com [209.132.183.39]) by cuda.sgi.com with ESMTP id EhuXH6xXzovWeXYP for ; Tue, 03 Jun 2014 20:57:53 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.39 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx6-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s543vqPB016505; Tue, 3 Jun 2014 23:57:52 -0400 Date: Tue, 3 Jun 2014 23:57:52 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: Dave Brolley Cc: pcp@oss.sgi.com Message-ID: <421058401.19861494.1401854272445.JavaMail.zimbra@redhat.com> In-Reply-To: <538E28A5.2000104@redhat.com> References: <538DF862.603@redhat.com> <538E28A5.2000104@redhat.com> Subject: Re: [pcp] PCP Updates: Implement fche's Threading Algorithm for Active Probing MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [pcp] PCP Updates: Implement fche's Threading Algorithm for Active Probing Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: PCP Updates: Implement fche's Threading Algorithm for Active Probing Thread-Index: ij/0QJyY2vYeSXDrgtys+3mJEVZRIA== X-Barracuda-Connect: mx6-phx2.redhat.com[209.132.183.39] X-Barracuda-Start-Time: 1401854272 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.03 X-Barracuda-Spam-Status: No, SCORE=0.03 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA_TO_FROM_DOMAIN_MATCH, THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6363 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 0.01 BSF_SC0_SA_TO_FROM_DOMAIN_MATCH Sender Domain Matches Recipient Domain Hi Dave, Lookin' good - I guess HAVE_SEM_T can go the way of the dodo now? cheers. -- Nathan From nscott@redhat.com Tue Jun 3 23:35:29 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 53AE87F3F for ; Tue, 3 Jun 2014 23:35:29 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 41E02304071 for ; Tue, 3 Jun 2014 21:35:26 -0700 (PDT) X-ASG-Debug-ID: 1401856523-04cb6c100c200310001-S8gJnT Received: from mx6-phx2.redhat.com (mx6-phx2.redhat.com [209.132.183.39]) by cuda.sgi.com with ESMTP id ggGDx3WYYvahDffv for ; Tue, 03 Jun 2014 21:35:24 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.39 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx6-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s544ZNuO023723; Wed, 4 Jun 2014 00:35:23 -0400 Date: Wed, 4 Jun 2014 00:35:23 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: Dave Brolley Cc: pcp@oss.sgi.com Message-ID: <1641174918.19867904.1401856523424.JavaMail.zimbra@redhat.com> In-Reply-To: <421058401.19861494.1401854272445.JavaMail.zimbra@redhat.com> References: <538DF862.603@redhat.com> <538E28A5.2000104@redhat.com> <421058401.19861494.1401854272445.JavaMail.zimbra@redhat.com> Subject: Re: [pcp] PCP Updates: Implement fche's Threading Algorithm for Active Probing MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [pcp] PCP Updates: Implement fche's Threading Algorithm for Active Probing Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: PCP Updates: Implement fche's Threading Algorithm for Active Probing Thread-Index: ij/0QJyY2vYeSXDrgtys+3mJEVZRIKLh5e6s X-Barracuda-Connect: mx6-phx2.redhat.com[209.132.183.39] X-Barracuda-Start-Time: 1401856523 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.03 X-Barracuda-Spam-Status: No, SCORE=0.03 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA_TO_FROM_DOMAIN_MATCH, THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6363 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 0.01 BSF_SC0_SA_TO_FROM_DOMAIN_MATCH Sender Domain Matches Recipient Domain ----- Original Message ----- > Hi Dave, > > Lookin' good - I guess HAVE_SEM_T can go the way of the dodo now? > Also, we seem to always HAVE_SERVICE_DISCOVERY now (probe.c is always built in libpcp), which is giving some build fallout... nathans, I'm seeing a build error in libpcp, /usr/bin/ld: libpcp.so.3: hidden symbol `__pmAddDiscoveredService' isn't defined http://fpaste.org/107014/40185551/ mgoodwin, this should get ya going - i'm not convinced its the ideal fix though, i need to chat to dave a bit http://www.fpaste.org/107015/ I think we should probably ditch that macro from the configure-y also, right? (in libpcp/src/config.c SERVICE_DISCOVERY_ENABLED would become simply "enabled" only, I guess) cheers. -- Nathan From marty.customs@gmail.com Wed Jun 4 00:33:57 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,HTML_MESSAGE, T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id CB6937F51 for ; Wed, 4 Jun 2014 00:33:57 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id B24D9304075 for ; Tue, 3 Jun 2014 22:33:54 -0700 (PDT) X-ASG-Debug-ID: 1401860032-04cbb050fc334e90001-S8gJnT Received: from mail-qa0-f52.google.com (mail-qa0-f52.google.com [209.85.216.52]) by cuda.sgi.com with ESMTP id PMjcsI1FWDeH7oQy (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Tue, 03 Jun 2014 22:33:52 -0700 (PDT) X-Barracuda-Envelope-From: marty.customs@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.216.52 X-Barracuda-IPDD: Level1 [gmail.com/209.85.216.52] Received: by mail-qa0-f52.google.com with SMTP id cm18so6537767qab.11 for ; Tue, 03 Jun 2014 22:33:51 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.216.52] X-Barracuda-IPDD: Level1 [gmail.com/209.85.216.52] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=qAVPtK03llmU6XeowrBbYYcPpS9D2vhsKcW55NjNneM=; b=BgDv7a3eVEOMMnONDY/fPhnBbbouax3HC3uXvAMni9a5sb8ROcODlWXOB/qFbN4a+5 2Y7J4poPDyf+VwbjkbRC67MYlkwsGEvIDYbwFjCYSBhF15P/sFFsFsBL3psUEbVGASyO +ax+9pLJMKtTTCnqvVj9i5OkxuVi+2UZgs2LJVHD9SjB6jyY7Jl0NBMfDZkHHxdLRd9B K8KOZbH1opct4llhQPlyKg9bJMiT9s5TJk39hpvA37E+xAbbwjI9HUd0do1tneNjTnGx zGqehn1S5ni2ByZlvp/HuhOJWrAfeEyk6p0Tf+Af/cjRjkYHj/IB600eOKsqhyYhwUFp mbBQ== MIME-Version: 1.0 X-Received: by 10.140.86.178 with SMTP id p47mr63877710qgd.66.1401860031712; Tue, 03 Jun 2014 22:33:51 -0700 (PDT) Received: by 10.140.42.181 with HTTP; Tue, 3 Jun 2014 22:33:51 -0700 (PDT) In-Reply-To: <115581243.19861436.1401854167089.JavaMail.zimbra@redhat.com> References: <175357119.19843518.1401846357840.JavaMail.zimbra@redhat.com> <1652263434.19845148.1401846994798.JavaMail.zimbra@redhat.com> <115581243.19861436.1401854167089.JavaMail.zimbra@redhat.com> Date: Wed, 4 Jun 2014 15:33:51 +1000 Message-ID: Subject: Re: [pcp] Unable to install MySQL PMDA on Ubuntu From: Marty Customs X-ASG-Orig-Subj: Re: [pcp] Unable to install MySQL PMDA on Ubuntu To: Nathan Scott Cc: pcp@oss.sgi.com Content-Type: multipart/alternative; boundary=001a11c13d5c372d0004fafbf969 X-Barracuda-Connect: mail-qa0-f52.google.com[209.85.216.52] X-Barracuda-Start-Time: 1401860032 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6364 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message --001a11c13d5c372d0004fafbf969 Content-Type: text/plain; charset=UTF-8 Hit another bump I'm afraid. I've cloned from git:// git.performancecopilot.org/pcp.git and checked out the 3.9.4 tag. But when running Makepkgs --verbose the build stops with the warning below. Is it safe to override or do I need to install/update some libraries? dpkg-buildpackage: source package pcp dpkg-buildpackage: source version 3.9.4 dpkg-buildpackage: source changed by Nathan Scott dpkg-source --before-build pcp-3.9.4 dpkg-buildpackage: host architecture amd64 dpkg-checkbuilddeps: Unmet build dependencies: pkg-config debhelper (>= 5) libreadline-dev | libreadline5-dev | libreadline-gplv2-dev chrpath python-all python-all-dev libnspr4-dev libnss3-dev libsasl2-dev libmicrohttpd-dev libavahi-common-dev libqt4-dev autotools-dev dpkg-buildpackage: warning: Build dependencies/conflicts unsatisfied; aborting. dpkg-buildpackage: warning: (Use -d flag to override.) Cheers, Marty. On Wed, Jun 4, 2014 at 1:56 PM, Nathan Scott wrote: > > > ----- Original Message ----- > > pminfo works and pmcd is running. Ok thanks for your help and I'll let > > Ubuntu folks know. > > Yeah, it sounds like an issue specific to the perl-wrapper. You can > check that they are linked correctly via ldd(1) ... should see lines > like: > > $ ldd /usr/lib64/perl5/vendor_perl/auto/PCP/PMDA/PMDA.so > linux-vdso.so.1 => (0x00007ffffdfff000) > libpcp_pmda.so.3 => /usr/lib64/libpcp_pmda.so.3 > (0x00007effc4372000) > libpcp.so.3 => /usr/lib64/libpcp.so.3 (0x00007effc40fd000) > [...] > > That third library is the one which should resolve the pmProgname symbol. > > cheers. > > -- > Nathan > --001a11c13d5c372d0004fafbf969 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Hit another bump I'm afraid. I've cloned from git:= //git.performancecopi= lot.org/pcp.git and checked out the 3.9.4 tag. But when running Makepkg= s --verbose the build stops with the warning below. Is it safe to override = or do I need to install/update some libraries?

dpkg-buildpackage: source package pcp
dpkg-bu= ildpackage: source version 3.9.4
dpkg-buildpackage: source change= d by Nathan Scott <nathans@debian.= org>
=C2=A0dpkg-source --before-build pcp-3.9.4
dpkg-buildpackage= : host architecture amd64
dpkg-checkbuilddeps: Unmet build depend= encies: pkg-config debhelper (>=3D 5) libreadline-dev | libreadline5-dev= | libreadline-gplv2-dev chrpath python-all python-all-dev libnspr4-dev lib= nss3-dev libsasl2-dev libmicrohttpd-dev libavahi-common-dev libqt4-dev auto= tools-dev
dpkg-buildpackage: warning: Build dependencies/conflicts unsatisfied; = aborting.
dpkg-buildpackage: warning: (Use -d flag to override.)<= /div>

Cheers,
Marty.



On Wed,= Jun 4, 2014 at 1:56 PM, Nathan Scott <nathans@redhat.com> = wrote:


----- Original Message -----
> pminfo works and pmcd is running. Ok thanks for your help and I'll= let
> Ubuntu folks know.

Yeah, it sounds like an issue specific to the perl-wrapper. =C2=A0You= can
check that they are linked correctly via ldd(1) ... should see lines
like:

$ ldd /usr/lib64/perl5/vendor_perl/auto/PCP/PMDA/PMDA.so
=C2=A0 =C2=A0 =C2=A0 =C2=A0 linux-vdso.so.1 =3D> =C2=A0(0x00007ffffdfff0= 00)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 libpcp_pmda.so.3 =3D> /usr/lib64/libpcp_pmda= .so.3 (0x00007effc4372000)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 libpcp.so.3 =3D> /usr/lib64/libpcp.so.3 (0x0= 0007effc40fd000)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 [...]

That third library is the one which should resolve the pmProgname symbol.
cheers.

--
Nathan

--001a11c13d5c372d0004fafbf969-- From nscott@redhat.com Wed Jun 4 00:40:54 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 479777F51 for ; Wed, 4 Jun 2014 00:40:54 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 199CF8F8071 for ; Tue, 3 Jun 2014 22:40:50 -0700 (PDT) X-ASG-Debug-ID: 1401860448-04cb6c100c203920001-S8gJnT Received: from mx4-phx2.redhat.com (mx4-phx2.redhat.com [209.132.183.25]) by cuda.sgi.com with ESMTP id OAttt1JhaGqRc9ov for ; Tue, 03 Jun 2014 22:40:49 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.25 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx4-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id s545elD5011704; Wed, 4 Jun 2014 01:40:47 -0400 Date: Wed, 4 Jun 2014 01:40:47 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: Marty Customs Cc: pcp@oss.sgi.com Message-ID: <1186902996.19882335.1401860447845.JavaMail.zimbra@redhat.com> In-Reply-To: References: <175357119.19843518.1401846357840.JavaMail.zimbra@redhat.com> <1652263434.19845148.1401846994798.JavaMail.zimbra@redhat.com> <115581243.19861436.1401854167089.JavaMail.zimbra@redhat.com> Subject: Re: [pcp] Unable to install MySQL PMDA on Ubuntu MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [pcp] Unable to install MySQL PMDA on Ubuntu Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: Unable to install MySQL PMDA on Ubuntu Thread-Index: f985A84D8mr6rD/mJsXM4NMZ7O99EA== X-Barracuda-Connect: mx4-phx2.redhat.com[209.132.183.25] X-Barracuda-Start-Time: 1401860448 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6364 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Hi Marty, ----- Original Message ----- > Hit another bump I'm afraid. I've cloned from git:// > git.performancecopilot.org/pcp.git and checked out the 3.9.4 tag. But when > running Makepkgs --verbose the build stops with the warning below. Is it > safe to override or do I need to install/update some libraries? > dpkg-checkbuilddeps: Unmet build dependencies: pkg-config debhelper (>= 5) > libreadline-dev | libreadline5-dev | libreadline-gplv2-dev chrpath > python-all python-all-dev libnspr4-dev libnss3-dev libsasl2-dev > libmicrohttpd-dev libavahi-common-dev libqt4-dev autotools-dev > dpkg-buildpackage: warning: Build dependencies/conflicts unsatisfied; > aborting. You should "apt-get install" each of those packages, choosing one in the case where there are several options (e.g. libreadline-dev). cheers. -- Nathan From nscott@redhat.com Wed Jun 4 01:17:39 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id DFC517F47 for ; Wed, 4 Jun 2014 01:17:38 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 7D427AC003 for ; Tue, 3 Jun 2014 23:17:38 -0700 (PDT) X-ASG-Debug-ID: 1401862652-04cb6c100c2077a0001-S8gJnT Received: from mx5-phx2.redhat.com (mx5-phx2.redhat.com [209.132.183.37]) by cuda.sgi.com with ESMTP id QV4sVB8NGKDTBsie for ; Tue, 03 Jun 2014 23:17:33 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.37 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx5-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s546HWxR000994 for ; Wed, 4 Jun 2014 02:17:32 -0400 Date: Wed, 4 Jun 2014 02:17:32 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: pcp@oss.sgi.com Message-ID: <2098467369.19899584.1401862652254.JavaMail.zimbra@redhat.com> In-Reply-To: <1459568801.19892468.1401861961860.JavaMail.zimbra@redhat.com> Subject: pcp updates: --without-discovery build fix, qa MIME-Version: 1.0 X-ASG-Orig-Subj: pcp updates: --without-discovery build fix, qa Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: pcp updates: --without-discovery build fix, qa Thread-Index: BaPp15SAcIqxjACg1/EUT4AMxeclww== X-Barracuda-Connect: mx5-phx2.redhat.com[209.132.183.37] X-Barracuda-Start-Time: 1401862652 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6365 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Changes committed to git://git.performancecopilot.org/pcp.git dev qa/1001 | 2 +- qa/1002 | 2 +- qa/1003 | 2 +- qa/1004 | 2 +- qa/1005 | 2 +- qa/1006 | 2 +- qa/1007 | 2 +- qa/1008 | 2 +- qa/1009 | 2 +- qa/1010 | 2 +- qa/1011 | 2 +- qa/1012 | 2 +- qa/1013 | 2 +- qa/1014 | 2 +- qa/1015 | 2 +- qa/1016 | 2 +- qa/1017 | 2 +- qa/1018 | 2 +- qa/1019 | 11 ++++------- qa/1020 | 9 +++------ qa/1021 | 2 +- qa/1022 | 2 +- qa/1023 | 2 +- qa/1025 | 2 +- qa/1026 | 11 +++-------- qa/1027 | 2 +- qa/1028 | 2 +- qa/1029 | 2 +- qa/GNUmakefile | 2 +- qa/common.qt | 10 ++++++++++ qa/common.test | 10 ---------- src/libpcp/src/avahi.h | 7 ++++++- src/libpcp/src/discovery.c | 29 ----------------------------- 33 files changed, 52 insertions(+), 87 deletions(-) commit 549d56f35d6ea59345418f710ffb826f72ee59cc Author: Nathan Scott Date: Wed Jun 4 16:03:54 2014 +1000 Resolve a discovery-related build failure Mark Goodwin reported a build failure due to a missing symbol, __pmAddDiscoveredService. This is because discovery was turned off in his build as a result of missing Avahi headers/libraries and nothing defining that symbol for that case, even though we now unconditionally call that routine (due to "probe" mechanism always being available). This change makes the --without-discovery configure option a bit fuzzy (it now means "without Avahi or any other future, optional forms of discovery). But, maybe thats OK. commit e2675b311dbeffaaedb4ea08f6b201fdbae0c730 Author: Nathan Scott Date: Wed Jun 4 14:15:05 2014 +1000 Update several QA tests from pcp-gui merge Some of the Qt tests (pcp-gui) were still using locations for things like the getpmcdhost script in an absolute path, which was due to sharing with pcp-testsuite packages. Update 'em to not rely on an installed testsuite anymore. Rename the common source qt script to something more appropriate now. From brolley@redhat.com Wed Jun 4 10:17:11 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 193467F3F for ; Wed, 4 Jun 2014 10:17:11 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id D939C8F8040 for ; Wed, 4 Jun 2014 08:17:07 -0700 (PDT) X-ASG-Debug-ID: 1401895026-04bdf059a05979e0001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id 2Payl5bPHm0QYHmc for ; Wed, 04 Jun 2014 08:17:06 -0700 (PDT) X-Barracuda-Envelope-From: brolley@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s54FH6ev019876 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Wed, 4 Jun 2014 11:17:06 -0400 Received: from [10.15.16.212] ([10.15.16.212]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s54FH54k028957; Wed, 4 Jun 2014 11:17:05 -0400 Message-ID: <538F3908.8070201@redhat.com> Date: Wed, 04 Jun 2014 11:19:36 -0400 From: Dave Brolley User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0 MIME-Version: 1.0 To: Nathan Scott CC: pcp@oss.sgi.com Subject: Re: [pcp] PCP Updates: Implement fche's Threading Algorithm for Active Probing References: <538DF862.603@redhat.com> <538E28A5.2000104@redhat.com> <421058401.19861494.1401854272445.JavaMail.zimbra@redhat.com> X-ASG-Orig-Subj: Re: [pcp] PCP Updates: Implement fche's Threading Algorithm for Active Probing In-Reply-To: <421058401.19861494.1401854272445.JavaMail.zimbra@redhat.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.24 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1401895026 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On 06/03/2014 11:57 PM, Nathan Scott wrote: > Hi Dave, > > Lookin' good - I guess HAVE_SEM_T can go the way of the dodo now? > Yeah -- easy to add again if we ever need it. From brolley@redhat.com Wed Jun 4 12:42:00 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 752E87F3F for ; Wed, 4 Jun 2014 12:42:00 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 46F568F8040 for ; Wed, 4 Jun 2014 10:41:57 -0700 (PDT) X-ASG-Debug-ID: 1401903712-04cb6c78c601820001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id 1UoJXuSD5iYAx6v7 for ; Wed, 04 Jun 2014 10:41:53 -0700 (PDT) X-Barracuda-Envelope-From: brolley@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s54Hfq7I002537 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Wed, 4 Jun 2014 13:41:52 -0400 Received: from [10.15.16.212] ([10.15.16.212]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s54HfpdT017148 for ; Wed, 4 Jun 2014 13:41:52 -0400 Message-ID: <538F5AF6.9050808@redhat.com> Date: Wed, 04 Jun 2014 13:44:22 -0400 From: Dave Brolley User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0 MIME-Version: 1.0 To: pcp@oss.sgi.com Subject: Re: [pcp] PCP Updates: Active Probing for __pmDiscoverServices() / pmfind References: <5373D0D2.5090902@redhat.com> X-ASG-Orig-Subj: Re: [pcp] PCP Updates: Active Probing for __pmDiscoverServices() / pmfind In-Reply-To: <5373D0D2.5090902@redhat.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.26 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1401903713 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Some build fallout from the active probing stuff. Pushed to brolley/dev in pcpfans. Dave ---------------------------------------------------------------------------------- commit a1a1f2ce4f82b587e5506c3eadc67f6e9fe85d74 Author: Dave Brolley Date: Wed Jun 4 13:39:59 2014 -0400 Active service probing: Fix build problems for non-threaded builds. commit 9766da5402b8dc360b28d08232a7840ed3779ae1 Author: Dave Brolley Date: Wed Jun 4 11:45:05 2014 -0400 Remove configure test for and sem_t. From aather@netflix.com Wed Jun 4 19:23:52 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: * X-Spam-Status: No, score=2.0 required=5.0 tests=HTML_IMAGE_ONLY_16, HTML_MESSAGE,T_DKIM_INVALID,T_REMOTE_IMAGE autolearn=no version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 3E91B7F3F for ; Wed, 4 Jun 2014 19:23:52 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 10A328F804B for ; Wed, 4 Jun 2014 17:23:52 -0700 (PDT) X-ASG-Debug-ID: 1401927827-04cbb0752423650001-S8gJnT Received: from mail-qa0-f46.google.com (mail-qa0-f46.google.com [209.85.216.46]) by cuda.sgi.com with ESMTP id NaEmFNlyWTeL2BbE (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Wed, 04 Jun 2014 17:23:48 -0700 (PDT) X-Barracuda-Envelope-From: aather@netflix.com X-Barracuda-Apparent-Source-IP: 209.85.216.46 Received: by mail-qa0-f46.google.com with SMTP id w8so363881qac.19 for ; Wed, 04 Jun 2014 17:23:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=netflix.com; s=google; h=mime-version:date:message-id:subject:from:to:content-type; bh=HXXs3TDi5iz9eoGa31fVgX0oYrC3MY6bB0ZTw/Xdr1M=; b=qioxGL7V5aWJwN7w2wVPMsUsWNRgNIvCbyhcGtsbREGF1D/o+v1QPMddr1V86gSP9U /zcolD2HJAiLe+dgFe5x92Po3NX41A1XvVr+sAKjNbFNXgtt4imSVz2GXuyCQIP1OA1X fEhzc1W5fm+dGm1Kj0j6sh4tHuoW8t1PHTZNQ= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:date:message-id:subject:from:to :content-type; bh=HXXs3TDi5iz9eoGa31fVgX0oYrC3MY6bB0ZTw/Xdr1M=; b=YfTBcUNdCd/e3ICBe8aozy20RDFPZymtbH+atRzM/EYpSu6w87vmv2qoWn/6kSQGr0 JPtma9xm6GIBR+2SRK3kSvVJcpPmSCpeC7voXsbVKuxoJgVOZJMCESPDurP8PYYhTrdf BzNP/OgB34wrFAwPQcIyOzB9X9s5OC9StscwQndRXPvJeEvHOpWHJsjce9hUBCFuGX29 TsorcAj3qoUfJZVrjPum2naD7po4K/UFF7OvtDP0JgrHGLzFPf637rRxak1aubVzcMRT 35vCRZSP9wYIE1siWWuZ9JD8KClazoBa+4UjYqlgBpjTsTSVxtB7Qvf/oCXoN2q5Dx6t Uk3g== X-Gm-Message-State: ALoCoQkoO5r7jKKM3I0ua+YWRH2LHaYveGWev4jkf0W1t4HbEDYHPXo3+PP30Oc28nrXCPkdJfrO MIME-Version: 1.0 X-Received: by 10.224.19.131 with SMTP id a3mr79139966qab.3.1401927826247; Wed, 04 Jun 2014 17:23:46 -0700 (PDT) Received: by 10.229.241.6 with HTTP; Wed, 4 Jun 2014 17:23:46 -0700 (PDT) Date: Wed, 4 Jun 2014 17:23:46 -0700 Message-ID: Subject: PCP web client on different domain From: Amer Ather X-ASG-Orig-Subj: PCP web client on different domain To: pcp@oss.sgi.com Content-Type: multipart/alternative; boundary=001a1132e96615bd4b04fb0bc207 X-Barracuda-Connect: mail-qa0-f46.google.com[209.85.216.46] X-Barracuda-Start-Time: 1401927827 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.63 X-Barracuda-Spam-Status: No, SCORE=0.63 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, HTML_IMAGE_ONLY_16, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6390 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.63 HTML_IMAGE_ONLY_16 BODY: HTML: images with 1200-1600 bytes of words 0.00 HTML_MESSAGE BODY: HTML included in message --001a1132e96615bd4b04fb0bc207 Content-Type: text/plain; charset=UTF-8 Our client application is running on a different instance than the one serving PCP. That means for all JavaScript API requests to PCP server we need to include an extra header in order for our browser client to accept the response: Access-Control-Allow-Origin: * This is fairly standard on any API that is meant to be used by external clients. Do we need to enable some configure option in PCP in order to make it work? -- Thanks, Amer Ather Cloud Performance Engineering My Location --001a1132e96615bd4b04fb0bc207 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Our client application is running on a different instance= than the one serving PCP. That means for all JavaScript API requests to PC= P server we need to include an extra header in order for our browser client= to accept the response:

<= span style=3D"font-family:arial,sans-serif;font-size:12.727272033691406px">= Access-Control-Allow-Origin: *

This is fairly standard on any API that is meant to be used by ex= ternal clients.

Do we need to enable some configure option in PCP in order to mak= e it work?

--
Thanks,

Amer Ather
Cloud Performance Engineering
--001a1132e96615bd4b04fb0bc207-- From mgoodwin@redhat.com Thu Jun 5 00:41:42 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 7A1967F3F for ; Thu, 5 Jun 2014 00:41:42 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 389CC304071 for ; Wed, 4 Jun 2014 22:41:39 -0700 (PDT) X-ASG-Debug-ID: 1401946894-04bdf0566637fc0001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id 88bHG1cLTt8AECDc for ; Wed, 04 Jun 2014 22:41:34 -0700 (PDT) X-Barracuda-Envelope-From: mgoodwin@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s555fYXL019621 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Thu, 5 Jun 2014 01:41:34 -0400 Received: from [10.64.50.15] (vpn1-50-15.bne.redhat.com [10.64.50.15]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s555fVNw027032; Thu, 5 Jun 2014 01:41:32 -0400 Message-ID: <5390030A.2000303@redhat.com> Date: Thu, 05 Jun 2014 15:41:30 +1000 From: Mark Goodwin User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0 MIME-Version: 1.0 To: Nathan Scott CC: pcp Subject: Re: [pcp] pmcc.py bug? References: <5386E607.2020007@redhat.com> <631390734.19335445.1401783604765.JavaMail.zimbra@redhat.com> X-ASG-Orig-Subj: Re: [pcp] pmcc.py bug? In-Reply-To: <631390734.19335445.1401783604765.JavaMail.zimbra@redhat.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1401946894 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On 06/03/2014 06:20 PM, Nathan Scott wrote: [ ... ] > > ... with as much common code pushed into pmcc as I sensibly could. I > think there's still a little work that the script is doing that could > be pulled into pmcc as well, but for now this should keep you moving. > thanks, I'll use this as the basis for pcp-iostat.py and will update pmcc with any further commonality as it emerges (e.g. rate calculations, group fetch time deltas, etc). Hopefully I'll get some time this week-end to hack for a bit .. Cheers -- Mark From nscott@redhat.com Thu Jun 5 00:59:12 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id A12DE7F3F for ; Thu, 5 Jun 2014 00:59:12 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 0FFEFAC002 for ; Wed, 4 Jun 2014 22:59:11 -0700 (PDT) X-ASG-Debug-ID: 1401947949-04cbb0752837a40001-S8gJnT Received: from mx5-phx2.redhat.com (mx5-phx2.redhat.com [209.132.183.37]) by cuda.sgi.com with ESMTP id lsezPtddUiTwxxNJ for ; Wed, 04 Jun 2014 22:59:09 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.37 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx5-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s555x9ng007721; Thu, 5 Jun 2014 01:59:09 -0400 Date: Thu, 5 Jun 2014 01:59:09 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: Mark Goodwin Cc: pcp Message-ID: <2116488220.20638292.1401947949230.JavaMail.zimbra@redhat.com> In-Reply-To: <5390030A.2000303@redhat.com> References: <5386E607.2020007@redhat.com> <631390734.19335445.1401783604765.JavaMail.zimbra@redhat.com> <5390030A.2000303@redhat.com> Subject: Re: [pcp] pmcc.py bug? MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [pcp] pmcc.py bug? Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: pmcc.py bug? Thread-Index: fTJfvwbrhIDDC6QxcZAGC4CLCTgLgQ== X-Barracuda-Connect: mx5-phx2.redhat.com[209.132.183.37] X-Barracuda-Start-Time: 1401947949 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.03 X-Barracuda-Spam-Status: No, SCORE=0.03 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA_TO_FROM_DOMAIN_MATCH, THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6396 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 0.01 BSF_SC0_SA_TO_FROM_DOMAIN_MATCH Sender Domain Matches Recipient Domain Hi Mark, ----- Original Message ----- > On 06/03/2014 06:20 PM, Nathan Scott wrote: > [ ... ] > > > > ... with as much common code pushed into pmcc as I sensibly could. I > > think there's still a little work that the script is doing that could > > be pulled into pmcc as well, but for now this should keep you moving. > > > > thanks, I'll use this as the basis for pcp-iostat.py and will update > pmcc with any further commonality as it emerges (e.g. rate calculations, OK, great. > group fetch time deltas, etc). I snuck that in already when you weren't looking (well, --interval support anyway, fair bit more work to allow different groups with different deltas but that may be overkill for the kinds of tools that'd use this?) The run method on the MetricGroupManager class does provide a typical fetch loop, anyway, automating --interval/--samples/--start/--finish handling. cheers. -- Nathan From nscott@redhat.com Thu Jun 5 04:25:15 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 962107F3F for ; Thu, 5 Jun 2014 04:25:15 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 4FB488F8039 for ; Thu, 5 Jun 2014 02:25:12 -0700 (PDT) X-ASG-Debug-ID: 1401960306-04bdf0566740940001-S8gJnT Received: from mx3-phx2.redhat.com (mx3-phx2.redhat.com [209.132.183.24]) by cuda.sgi.com with ESMTP id 4zAJ86DFHUNvClOb for ; Thu, 05 Jun 2014 02:25:06 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.24 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx3-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id s559P4si024185; Thu, 5 Jun 2014 05:25:04 -0400 Date: Thu, 5 Jun 2014 05:25:03 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: Amer Ather , "Frank Ch. Eigler" , mspier@netflix.com Cc: pcp@oss.sgi.com Message-ID: <1717887824.20744079.1401960303984.JavaMail.zimbra@redhat.com> In-Reply-To: References: Subject: Re: [pcp] PCP web client on different domain MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [pcp] PCP web client on different domain Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: PCP web client on different domain Thread-Index: 5ZP2MCw9cmh/W154MbX1beDhDk8l6g== X-Barracuda-Connect: mx3-phx2.redhat.com[209.132.183.24] X-Barracuda-Start-Time: 1401960306 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.52 X-Barracuda-Spam-Status: No, SCORE=0.52 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC, WEIRD_PORT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6398 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 0.50 WEIRD_PORT URI: Uses non-standard port number for HTTP Hi Amer, ----- Original Message ----- > Our client application is running on a different instance than the one > serving PCP. That means for all JavaScript API requests to PCP server we > need to include an extra header in order for our browser client to accept > the response: > > Access-Control-Allow-Origin: * > > This is fairly standard on any API that is meant to be used by external > clients. > > Do we need to enable some configure option in PCP in order to make it work? Following up on some IRC chat today ... there's no way to set specific headers currently with pmwebd. I've made a modified version of pmwebd which adds in a -r option for the daemon, allowing additional headers to be set via a config file. You can find it in my development branch: git://git.performancecopilot.org/nathans/pcp.git dev commit 84fab331bce01d737a95dfe245cfbbc082bdcdfa Author: Nathan Scott Date: Thu Jun 5 19:10:59 2014 +1000 Provide a pmwebd mechanism for user-specified response headers The Netflix folks have come across a case where they need to be able to set a specific HTTP header in the pmwebd JSON response; in particular, the "Access-Control-Allow-Origin" header. Add in a -r/--headers option to pmwebd, which provides a config file containing user-specified headers that should be set in the responses. This simply sits in front of the libmicrohttpd API for adding response headers, and should be future-proof. $ grep headers /etc/pcp/pmwebd/pmwebd.options # allow additional response headers to be set, e.g. -r /etc/pcp/pmwebd/pmwebd.headers $ ps -ef | grep pmwebd pcp 1129 1 0 18:52 ? 00:00:00 /usr/libexec/pcp/bin/pmwebd -r /etc/pcp/pmwebd/pmwebd.headers $ cat /etc/pcp/pmwebd/pmwebd.headers Access-Control-Allow-Origin: * # Cache-Control: no-cache Cache-Control: private Connection: keep-alive Pragma: no-cache $ curl -s -S "http://localhost:44323/pmapi/context?local=anything" --dump-header - HTTP/1.1 200 OK Content-Length: 23 Pragma: no-cache Connection: keep-alive Cache-Control: private Access-Control-Allow-Origin: * Content-Type: application/json Date: Thu, 05 Jun 2014 08:52:47 GMT { "context": 16726391 } There's still some discussion about whether we should hard-code all headers, or whether the headers should be configurable (clearly, I favour the later!) ... but, one way or the other, this will be resolved in pcp-3.9.5 which is scheduled to release in just under two weeks. Amer/Martin, if you guys could try the above code out & verify it meets your needs, that would be great (please let me know). Frank, could you review the above please and see if the generalised header specification mechanism is sufficiently light-weight? Thanks! I imagine some possible future header values might need more state than a static file can give; those we'd have to tackle on an as-needed basis, I guess, using wildcards or something else that expands at runtime? Either way, hardcoding all of this stuff certainly makes no sense to me (some people may not want/ need this or other headers at all of course ... so configure 'em I say!). If the above commit looks OK, I'll go ahead and automate the above test and add in more error-handling tests. And possibly add a pwmebd valgrind test, since that appears to be missing, if time permits before the weekend. cheers. -- Nathan From fche@redhat.com Thu Jun 5 06:54:56 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id A90FE7F3F for ; Thu, 5 Jun 2014 06:54:56 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 1247CAC002 for ; Thu, 5 Jun 2014 04:54:52 -0700 (PDT) X-ASG-Debug-ID: 1401969291-04cbb0752845530001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id V2uRcqctQlxoehL3 for ; Thu, 05 Jun 2014 04:54:51 -0700 (PDT) X-Barracuda-Envelope-From: fche@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s55Bsmx0020068 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 5 Jun 2014 07:54:49 -0400 Received: from fche.csb (vpn-59-213.rdu2.redhat.com [10.10.59.213]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s55Bsm00026910; Thu, 5 Jun 2014 07:54:48 -0400 Received: by fche.csb (Postfix, from userid 2569) id D8B4C5811B; Thu, 5 Jun 2014 07:54:47 -0400 (EDT) Date: Thu, 5 Jun 2014 07:54:47 -0400 From: "Frank Ch. Eigler" To: aather@netflix.com, mspier@netflix.com Cc: pcp@oss.sgi.com Subject: Re: [pcp] PCP web client on different domain Message-ID: <20140605115447.GC11474@redhat.com> X-ASG-Orig-Subj: Re: [pcp] PCP web client on different domain References: <1717887824.20744079.1401960303984.JavaMail.zimbra@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1717887824.20744079.1401960303984.JavaMail.zimbra@redhat.com> User-Agent: Mutt/1.4.2.2i X-Scanned-By: MIMEDefang 2.68 on 10.5.11.27 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1401969291 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Hi - On Thu, Jun 05, 2014 at 05:25:03AM -0400, Nathan Scott wrote: > [...] > ----- Original Message ----- > > Our client application is running on a different instance than the one > > serving PCP. That means for all JavaScript API requests to PCP server we > > need to include an extra header in order for our browser client to accept > > the response: > > > > Access-Control-Allow-Origin: * > > > > This is fairly standard on any API that is meant to be used by external > > clients. > > [...] Thanks Nathan for prototyping something far more flexible than called for this by request. aather, mspier, et al., I'd like to hear your opinions about whether the extra configurability is needed or helpful, or whether simply hard-coding "A-C-A-O: *" is sufficient for forseeable purposes. (For example, the caching pragmas in nathans' sample may be positively counterproductive: pmwebd may be in a position to know that some data (metadata, help texts, historical archived metrics) are not going to change, and therefore would prefer to encourage clients to cache those but not live data.) - FChE From aather@netflix.com Thu Jun 5 10:25:48 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HTML_MESSAGE,T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id EE5717F3F for ; Thu, 5 Jun 2014 10:25:48 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id D50CB30407A for ; Thu, 5 Jun 2014 08:25:45 -0700 (PDT) X-ASG-Debug-ID: 1401981940-04cbb0752459720001-S8gJnT Received: from mail-qa0-f52.google.com (mail-qa0-f52.google.com [209.85.216.52]) by cuda.sgi.com with ESMTP id UN9jVrLBUXUW3HIp (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Thu, 05 Jun 2014 08:25:40 -0700 (PDT) X-Barracuda-Envelope-From: aather@netflix.com X-Barracuda-Apparent-Source-IP: 209.85.216.52 Received: by mail-qa0-f52.google.com with SMTP id cm18so1615381qab.11 for ; Thu, 05 Jun 2014 08:25:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=netflix.com; s=google; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=KuElFaCsRKgHLj2NPdLDOdlvglpf4msF44uh+ZQsR3k=; b=rh8JWG/6vTapqq3hdFECr1P40nCCIG73SQmYpIWElpRzLTz11n3v0cR+5nYViY2Ufc DU6tzIyir+40c2mrjYI2n5wMVbw2SMKe3N5gA20D01M68/huLKQpmrtj93k5hg5a6G4Z 1cDUmAZaHxIXW7b47Ehx8WGbosqx3pHEyPqh0= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:date :message-id:subject:from:to:cc:content-type; bh=KuElFaCsRKgHLj2NPdLDOdlvglpf4msF44uh+ZQsR3k=; b=DJQBTlaDDmBKnV0kTZEwy87aooJfsSYg9xjXzhqbKekuEUMvLJQsKB74awl7QVM5Vb Y+j/nTGFiSuFUMWPx6sHZy3JyC38pF5LRhBC6V0bk2oYMIou0y993fQR0mWunGnOy0Vt ZV3h2i1Mmf3MvYfvlQZSwCICIrdKAIo8DsBQ1Be50SW9YY+W/17ZyiRKG6Set0UTDoaZ HAR+uKPIT1DI6MdUHoev98XTX7IvtmRBYPDeWIYTd5hCnxdTjSaZzqf3YxaTyO9HRNuZ /x/aar1L/Wxrc9ruZx56UAmDP64ToOthXY/dmYLlGzmf1uVLtMWSs1HGbAcB50ZvOWPU d/pA== X-Gm-Message-State: ALoCoQlTByLWngzpbPmZtx/Behp3cVKAAoidINjDCm76c8fyzoSsbEMbzfQ28gwdbv1n00EPfVTr MIME-Version: 1.0 X-Received: by 10.229.171.193 with SMTP id i1mr82952914qcz.15.1401981939976; Thu, 05 Jun 2014 08:25:39 -0700 (PDT) Received: by 10.229.241.6 with HTTP; Thu, 5 Jun 2014 08:25:39 -0700 (PDT) In-Reply-To: <20140605115447.GC11474@redhat.com> References: <1717887824.20744079.1401960303984.JavaMail.zimbra@redhat.com> <20140605115447.GC11474@redhat.com> Date: Thu, 5 Jun 2014 08:25:39 -0700 Message-ID: Subject: Re: [pcp] PCP web client on different domain From: Amer Ather X-ASG-Orig-Subj: Re: [pcp] PCP web client on different domain To: "Frank Ch. Eigler" Cc: Martin Spier , pcp@oss.sgi.com Content-Type: multipart/alternative; boundary=001a11c3066883bb1704fb185ba8 X-Barracuda-Connect: mail-qa0-f52.google.com[209.85.216.52] X-Barracuda-Start-Time: 1401981940 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, DKIM_SIGNED, DKIM_VERIFIED, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6398 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message --001a11c3066883bb1704fb185ba8 Content-Type: text/plain; charset=UTF-8 Hi Frank and Nathan, Thanks for quick turn around. I will use the latest pcp build: git://git.performancecopilot.org/nathans/pcp.git dev and test it. I will let Martin comment on whether such features should be configurable or hard coded. Do we know how other applications serving web clients are setting it? Any standard? Amer. On Thu, Jun 5, 2014 at 4:54 AM, Frank Ch. Eigler wrote: > Hi - > > On Thu, Jun 05, 2014 at 05:25:03AM -0400, Nathan Scott wrote: > > [...] > > ----- Original Message ----- > > > Our client application is running on a different instance than the one > > > serving PCP. That means for all JavaScript API requests to PCP server > we > > > need to include an extra header in order for our browser client to > accept > > > the response: > > > > > > Access-Control-Allow-Origin: * > > > > > > This is fairly standard on any API that is meant to be used by external > > > clients. > > > [...] > > Thanks Nathan for prototyping something far more flexible than called for > this by request. aather, mspier, et al., I'd like to hear your opinions > about whether the extra configurability is needed or helpful, or whether > simply hard-coding "A-C-A-O: *" is sufficient for forseeable purposes. > > (For example, the caching pragmas in nathans' sample may be positively > counterproductive: pmwebd may be in a position to know that some data > (metadata, help texts, historical archived metrics) are not going to > change, and therefore would prefer to encourage clients to cache those > but not live data.) > > - FChE > -- Thanks, Amer Ather Cloud Performance Engineering My Location --001a11c3066883bb1704fb185ba8 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Hi Frank and Nathan,

Thanks for quick t= urn around. I will use the latest pcp build:


and test it. I will let Martin comment o= n whether such features should be configurable or hard coded. Do we know ho= w other applications serving web clients are setting it? Any standard?

Amer.



On Thu, Jun 5, 2014 at 4:54 AM, Frank Ch= . Eigler <fche@redhat.com> wrote:
Hi -

On Thu, Jun 05, 2014 at 05:25:03AM -0400, Nathan Scott wrote:
> [...]
> ----- Original Message -----
> > Our client application is running on a different instance than th= e one
> > serving PCP. That means for all JavaScript API requests to PCP se= rver we
> > need to include an extra header in order for our browser client t= o accept
> > the response:
> >
> > Access-Control-Allow-Origin: *
> >
> > This is fairly standard on any API that is meant to be used by ex= ternal
> > clients.
> > [...]

Thanks Nathan for prototyping something far more flexible than called for this by request. =C2=A0aather, mspier, et al., I'd like to hear your op= inions
about whether the extra configurability is needed or helpful, or whether simply hard-coding "A-C-A-O: *" is sufficient for forseeable purp= oses.

(For example, the caching pragmas in nathans' sample may be positively<= br> counterproductive: pmwebd may be in a position to know that some data
(metadata, help texts, historical archived metrics) are not going to
change, and therefore would prefer to encourage clients to cache those
but not live data.)

- FChE



--
Thanks,

Amer Ather
Cloud Performance Engi= neering
--001a11c3066883bb1704fb185ba8-- From nscott@redhat.com Thu Jun 5 17:11:04 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 632E87F3F for ; Thu, 5 Jun 2014 17:11:04 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id EE32FAC007 for ; Thu, 5 Jun 2014 15:11:03 -0700 (PDT) X-ASG-Debug-ID: 1402006257-04cb6c78c377af0001-S8gJnT Received: from mx6-phx2.redhat.com (mx6-phx2.redhat.com [209.132.183.39]) by cuda.sgi.com with ESMTP id VQz9DxfA96WDNKo6 for ; Thu, 05 Jun 2014 15:10:58 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.39 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx6-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s55MAt9Z003086; Thu, 5 Jun 2014 18:10:55 -0400 Date: Thu, 5 Jun 2014 18:10:55 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: "Frank Ch. Eigler" , aather@netflix.com, mspier@netflix.com Cc: pcp@oss.sgi.com Message-ID: <1295610433.21793898.1402006255252.JavaMail.zimbra@redhat.com> In-Reply-To: <20140605115447.GC11474@redhat.com> References: <1717887824.20744079.1401960303984.JavaMail.zimbra@redhat.com> <20140605115447.GC11474@redhat.com> Subject: Re: [pcp] PCP web client on different domain MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [pcp] PCP web client on different domain Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.12] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: PCP web client on different domain Thread-Index: lyyHtor2O3K+u3YmTNkSBjcMNDRvUA== X-Barracuda-Connect: mx6-phx2.redhat.com[209.132.183.39] X-Barracuda-Start-Time: 1402006257 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.03 X-Barracuda-Spam-Status: No, SCORE=0.03 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA_TO_FROM_DOMAIN_MATCH, THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6409 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 0.01 BSF_SC0_SA_TO_FROM_DOMAIN_MATCH Sender Domain Matches Recipient Domain Hi guys, ----- Original Message ----- > [...] > git:// git.performancecopilot.org/nathans/pcp.git dev > > and test it. I will let Martin comment on whether such features should be > configurable or hard coded. Do we know how other applications serving web > clients are setting it? Any standard? >From a bit of reading, it is a standard (optional) header. Other http daemons will certainly allow its use to be configured. Client tools usually allow for custom headers to be sent to servers (e.g. --header options to curl(1), wget(1), and so on), and servers usually would have similar configurability. Franks point though is that pmwebd is not a general purpose web server, so hard-coding any/all headers now-and-forever maybe OK. Or it may not; its not a decision we have to enforce on users - making it customisable is evidently trivial, coding-wise. ----- Original Message ----- > [...] > Thanks Nathan for prototyping something far more flexible than called for > this by request. No problem at all, it's always good to think ahead. > aather, mspier, et al., I'd like to hear your opinions (yes, please do chime in guys - certainly I could be convinced hard-coding is OK for pmwebd, I'm not tied to this approach if noone else wants it) > about whether the extra configurability is needed or helpful, or whether > simply hard-coding "A-C-A-O: *" is sufficient for forseeable purposes. Other than dealing with the potential problems (like * not being the only valid value for Access-Control-Allow-Origin, or people not wanting that header at all, or the dazzling array of other standard http headers folks might want to set), another potential situation where this flexibility might help would be the use of custom headers for a custom webapp. Maybe identifying something about the machine that isn't available as a metric, perhaps helping locate it within a data centre - that kind of thing. Given this lack of flexibility has caused a problem once, it'll probably come up again. cheers. -- Nathan From wwwrun@oss.sgi.com Sat Jun 7 21:06:05 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HTML_MESSAGE,NO_RELAYS autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: by oss.sgi.com (Postfix, from userid 30) id 651137F4E; Sat, 7 Jun 2014 21:06:05 -0500 (CDT) From: bugzilla-daemon@oss.sgi.com To: pcp@oss.sgi.com Subject: [Bug 1057] New: memory leak & increasing slowdown in pdubuf.c buf_pin / interp.c update_bounds Date: Sun, 08 Jun 2014 02:06:04 +0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: new X-Bugzilla-Watch-Reason: None X-Bugzilla-Classification: Unclassified X-Bugzilla-Product: pcp X-Bugzilla-Component: pcp X-Bugzilla-Keywords: X-Bugzilla-Severity: major X-Bugzilla-Who: fche@redhat.com X-Bugzilla-Status: NEW X-Bugzilla-Priority: P5 X-Bugzilla-Assigned-To: pcp@kenj.com.au X-Bugzilla-Target-Milestone: --- X-Bugzilla-Changed-Fields: bug_id short_desc product version rep_platform op_sys bug_status bug_severity priority component assigned_to reporter cc classification Message-ID: Content-Type: multipart/alternative; boundary="1402193165.0B5d5c1.31451"; charset="us-ascii" X-Bugzilla-URL: http://oss.sgi.com/bugzilla/ Auto-Submitted: auto-generated MIME-Version: 1.0 --1402193165.0B5d5c1.31451 Date: Sat, 7 Jun 2014 21:06:05 -0500 MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8" http://oss.sgi.com/bugzilla/show_bug.cgi?id=1057 Bug ID: 1057 Summary: memory leak & increasing slowdown in pdubuf.c buf_pin / interp.c update_bounds Product: pcp Version: unspecified Hardware: All OS: Linux Status: NEW Severity: major Priority: P5 Component: pcp Assignee: pcp@kenj.com.au Reporter: fche@redhat.com CC: pcp@oss.sgi.com Classification: Unclassified While working on the graphite-integrated pmwebd, it was found that the daemon responded to identical queries slower and slower and slower (going from 20ms to 800ms in the space of a few minutes' operation), despite all pmcontexts being destroyed & recreated anew for each operation. perf top / systemtap pf* indicated a bigger and bigger amount of time spent in the __pmPinPDUBuf & __pmUnpinPDUBuf functions, with pdubuf.c line 178 showing up highly: 00167 int 00168 __pmUnpinPDUBuf(void *handle) 00169 { 00170 bufctl_t *pcp; 00171 bufctl_t *prior = NULL; 00172 [...] 00177 for (pcp = buf_pin; pcp != NULL; pcp = pcp->bc_next) { 00178 if (pcp->bc_buf <= (char *)handle && (char *)handle < &pcp->bc_buf[pcp->bc_size]) 00179 break; 00180 prior = pcp; 00181 } It's a linked list traversal, as the pcp->bc_next list grew and grew and grew and grew and grew and grew and grew and grew some and grew and grew and grew and grew and grew some more and grew and grew and so on. Suspecting a memory leak, another systemtap script was used to track any pdubufs that were pinned but not promptly unpinned: % stap -e 'global pins probe process("/usr/lib64/libpcp.so.3").function("__pmPinPDUBuf").call { pins[$handle] = sprint_ubacktrace() } probe process("/usr/lib64/libpcp.so.3").function("__pmUnpinPDUBuf").call { delete pins[$handle]} probe timer.s(10) { foreach (s in pins) { println(s,"\n",pins[s]) }; delete pins }' \ -v -t -x `pgrep pmwebd` -d PATH/TO/pmwebd -g --suppress-time-limits which pinpointed the call site for the leaking PDUbufs: 47554733567564 // <--- the PDU handle/pointer __pmPinPDUBuf+0x0 [libpcp.so.3] update_bounds.isra.1+0x536 [libpcp.so.3] // <---- the guilty party __pmLogFetchInterp+0x1a84 [libpcp.so.3] __pmLogFetch+0x68f [libpcp.so.3] pmFetch+0xb6 [libpcp.so.3] _Z23pmgraphite_fetch_seriesP14MHD_ConnectionRKSslll+0xc36 [pmwebd] _Z30pmgraphite_respond_render_jsonP14MHD_ConnectionRK11http_paramsRKSt6vectorISsSaISsEEb+0x7b5 [pmwebd] _Z18pmgraphite_respondP14MHD_ConnectionRK11http_paramsRKSt6vectorISsSaISsEE+0x283 [pmwebd] _ZL11mhd_respondPvP14MHD_ConnectionPKcS3_S3_S3_PmPS_+0x53f [pmwebd] The guilty party is this block in interp.c: 444 if (pcp->valfmt == PM_VAL_INSITU) 445 icp->v_prior.lval = logrp->vset[k]->vlist[i].value.lval; 446 else { 447 if (icp->v_prior.pval != NULL) 448 __pmUnpinPDUBuf((void *)icp->v_prior.pval); 449 icp->v_prior.pval = logrp->vset[k]->vlist[i].value.pval; 450 __pmPinPDUBuf((void *)icp->v_prior.pval); // <<<< here! 451 } It does not necessarily appear to be the case that every call at that spot generates a leak, but all the leaks appear to come from that spot. A gdb pdubufdump() inferior call after the pmDestroyContext indicates a growing list of pinned pdubuf[]s, each with pincnt=3 in my particular case. (gdb) p pdubufdump() free pdubuf[size]: 0x555555808000[28672] 0x5555558fa000[28672] 0x5555558db000[28672] 0x5555558cb000[28672] 0x555555819000[17408] 0x555555814000[17408] pinned pdubuf[pincnt]: 0x555555852000[3] 0x555555842000[3] 0x55555586e000[3] 0x55555582a000[3] 0x55555588d000[3] 0x55555584a000[3] 0x555555862000[3] 0x555555832000[3] 0x5555558a4000[3] 0x555555885000[3] 0x5555558c3000[3] 0x55555583a000[3] 0x55555589c000[3] 0x5555557fb000[3] 0x5555558bb000[3] 0x5555558d3000[3] 0x55555585a000[3] 0x5555558f2000[3] $7 = void A variant of this leak can probably be demonstrated with plain pmval. With a some random pcp archive (one available on request): gdb -args -args pmval -t 2344 -S '@Thu May 8 21:34:56 EDT 2014' -T '@Sat Jun 7 21:34:56 EDT 2014' -a /PATH/TO/FOO.meta -i '1' 'kernel.all.load' (gdb) break pmval.c:ALMOST_LAST_LINE_NUMBER // basically, end of main() (gdb) run (gdb) p pdubufdump() free pdubuf[size]: 0x640000[28672] 0x648000[28672] 0x62b000[17408] 0x619000[17408] 0x626000[17408] pinned pdubuf[pincnt]: 0x638000[1] 0x61e000[1] 0x650000[4] 0x630000[4] where one might expect a null pinned-pdubuf[] list. With pmval being limited to a single traversal of a single archive, it may not be an exact match, and of course the leak is not significant. With pmwebd traversing dozens of archives numerous times, the leak is crippling. -- You are receiving this mail because: You are on the CC list for the bug. --1402193165.0B5d5c1.31451 Date: Sat, 7 Jun 2014 21:06:05 -0500 MIME-Version: 1.0 Content-Type: text/html; charset="UTF-8"
Bug ID 1057
Summary memory leak & increasing slowdown in pdubuf.c buf_pin / interp.c update_bounds
Product pcp
Version unspecified
Hardware All
OS Linux
Status NEW
Severity major
Priority P5
Component pcp
Assignee pcp@kenj.com.au
Reporter fche@redhat.com
CC pcp@oss.sgi.com
Classification Unclassified

While working on the graphite-integrated pmwebd, it was found that the
daemon responded to identical queries slower and slower and slower
(going from 20ms to 800ms in the space of a few minutes' operation),
despite all pmcontexts being destroyed & recreated anew for each
operation.

perf top / systemtap pf* indicated a bigger and bigger amount of time
spent in the __pmPinPDUBuf & __pmUnpinPDUBuf functions, with pdubuf.c
line 178 showing up highly:

00167 int
00168 __pmUnpinPDUBuf(void *handle)
00169 {
00170     bufctl_t    *pcp;
00171     bufctl_t    *prior = NULL;
00172 [...]
00177     for (pcp = buf_pin; pcp != NULL; pcp = pcp->bc_next) {
00178         if (pcp->bc_buf <= (char *)handle && (char *)handle <
&pcp->bc_buf[pcp->bc_size])
00179             break;
00180         prior = pcp;
00181     }

It's a linked list traversal, as the pcp->bc_next list grew and grew
and grew and grew and grew and grew and grew and grew some and grew
and grew and grew and grew and grew some more and grew and grew and so
on.

Suspecting a memory leak, another systemtap script was used to track
any pdubufs that were pinned but not promptly unpinned:

% stap -e 'global pins
probe process("/usr/lib64/libpcp.so.3").function("__pmPinPDUBuf").call
    { pins[$handle] = sprint_ubacktrace() }
probe process("/usr/lib64/libpcp.so.3").function("__pmUnpinPDUBuf").call
    { delete pins[$handle]}
probe timer.s(10)
    { foreach (s in pins) { println(s,"\n",pins[s]) }; delete pins }' \
-v -t -x `pgrep pmwebd` -d PATH/TO/pmwebd  -g --suppress-time-limits

which pinpointed the call site for the leaking PDUbufs:

47554733567564  // <--- the PDU handle/pointer
__pmPinPDUBuf+0x0 [libpcp.so.3]
update_bounds.isra.1+0x536 [libpcp.so.3]   // <---- the guilty party
__pmLogFetchInterp+0x1a84 [libpcp.so.3]
__pmLogFetch+0x68f [libpcp.so.3]
pmFetch+0xb6 [libpcp.so.3]
_Z23pmgraphite_fetch_seriesP14MHD_ConnectionRKSslll+0xc36 [pmwebd]
_Z30pmgraphite_respond_render_jsonP14MHD_ConnectionRK11http_paramsRKSt6vectorISsSaISsEEb+0x7b5
[pmwebd]
_Z18pmgraphite_respondP14MHD_ConnectionRK11http_paramsRKSt6vectorISsSaISsEE+0x283
[pmwebd]
_ZL11mhd_respondPvP14MHD_ConnectionPKcS3_S3_S3_PmPS_+0x53f [pmwebd]

The guilty party is this block in interp.c:

444     if (pcp->valfmt == PM_VAL_INSITU)
445         icp->v_prior.lval = logrp->vset[k]->vlist[i].value.lval;
446     else {
447         if (icp->v_prior.pval != NULL)
448             __pmUnpinPDUBuf((void *)icp->v_prior.pval);
449         icp->v_prior.pval = logrp->vset[k]->vlist[i].value.pval;
450         __pmPinPDUBuf((void *)icp->v_prior.pval);   // <<<< here!
451     }

It does not necessarily appear to be the case that every call at that
spot generates a leak, but all the leaks appear to come from that spot.
A gdb pdubufdump() inferior call after the pmDestroyContext indicates
a growing list of pinned pdubuf[]s, each with pincnt=3 in my particular
case.

(gdb) p pdubufdump()
   free pdubuf[size]: 0x555555808000[28672] 0x5555558fa000[28672]
0x5555558db000[28672] 0x5555558cb000[28672] 0x555555819000[17408]
0x555555814000[17408]
   pinned pdubuf[pincnt]: 0x555555852000[3] 0x555555842000[3] 0x55555586e000[3]
0x55555582a000[3] 0x55555588d000[3] 0x55555584a000[3] 0x555555862000[3]
0x555555832000[3] 0x5555558a4000[3] 0x555555885000[3] 0x5555558c3000[3]
0x55555583a000[3] 0x55555589c000[3] 0x5555557fb000[3] 0x5555558bb000[3]
0x5555558d3000[3] 0x55555585a000[3] 0x5555558f2000[3]
$7 = void


A variant of this leak can probably be demonstrated with plain pmval.
With a some random pcp archive (one available on request):

gdb -args  -args pmval -t 2344 -S '@Thu May  8 21:34:56 EDT 2014'
    -T '@Sat Jun  7 21:34:56 EDT 2014' -a /PATH/TO/FOO.meta -i '1'
'kernel.all.load'

(gdb) break pmval.c:ALMOST_LAST_LINE_NUMBER // basically, end of main()
(gdb) run
(gdb) p pdubufdump()
   free pdubuf[size]: 0x640000[28672] 0x648000[28672] 0x62b000[17408]
0x619000[17408] 0x626000[17408]
   pinned pdubuf[pincnt]: 0x638000[1] 0x61e000[1] 0x650000[4] 0x630000[4]

where one might expect a null pinned-pdubuf[] list.  With pmval being
limited to a single traversal of a single archive, it may not be an
exact match, and of course the leak is not significant.  With pmwebd
traversing dozens of archives numerous times, the leak is crippling.


You are receiving this mail because:
  • You are on the CC list for the bug.
--1402193165.0B5d5c1.31451-- From kenj@internode.on.net Sun Jun 8 09:19:02 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HTML_MESSAGE autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 126327F3F for ; Sun, 8 Jun 2014 09:19:02 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 8C87FAC005 for ; Sun, 8 Jun 2014 07:19:01 -0700 (PDT) X-ASG-Debug-ID: 1402237131-04cb6c78c4f4100001-S8gJnT Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id PMV3oloNyi8vRivz; Sun, 08 Jun 2014 07:18:52 -0700 (PDT) X-Barracuda-Envelope-From: kenj@internode.on.net X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AjdLACpwlFPJNvlyAGdsb2JhbAANTIckwSoDAgEZgQANEgIIGIQuCgEBBCNmCwMBAjUHAgICVQe2ZnefBBeOcxaCX4FMBKVJihmBUg Received: from 201-54-249-114-corp-bre.linktel.net.br (HELO [10.1.4.54]) ([201.54.249.114]) by ipmail06.adl2.internode.on.net with ESMTP; 08 Jun 2014 23:48:49 +0930 Date: Mon, 9 Jun 2014 00:14:24 +1000 From: Ken McDonell To: pcp@oss.sgi.com,bugzilla-daemon@oss.sgi.com Message-ID: <5a879acf-42b8-4640-b3bd-bf03baeac33f.maildroid@localhost> In-Reply-To: References: Subject: Re: [pcp] [Bug 1057] New: memory leak & increasing slowdown in pdubuf.c buf_pin / interp.c update_bounds MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [pcp] [Bug 1057] New: memory leak & increasing slowdown in pdubuf.c buf_pin / interp.c update_bounds Content-Type: multipart/alternative; boundary="----=_Part_5_1095282024.1402237129312" X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1402237131 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6477 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message ------=_Part_5_1095282024.1402237129312 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: base64 RnJhbmssCgpJJ2xsIGJlIGJhY2sgaW4gYSBmZXcgZGF5cyBhbmQgY2FuIHN0YXJ0IHRvIGxvb2sg YXQgdGhpcyB0aGVuLgoKSSBtYWRlIHNvbWUgY2hhbmdlcyBpbiBpbnRlcnAuYyByZWNlbnRseSB0 aGF0IHdlcmUgc3VwcG9zZWQgdG8gbWFrZSBubyBmdW5jdGlvbmFsIGNoYW5nZSAocmVhZHkgdG8g Zml4IHlvdXIgZWFybGllciBwZXJmb3JtYW5jZSBwcm9ibGVtKSBidXQgaXQgaXMgcG9zc2libGUg dGhhdCBJIGludHJvZHVjZWQgYSByZWdyZXNzaW9uIHdpdGggdGhlc2UgY2hhbmdlcy4gIFN1Z2dl c3QgeW91IGVpdGhlciB3YWl0IHRpbGwgSSdtIGJhY2sgaW4gT3osIG9yIHJldmVydCBhbnkgaW50 ZXJwLmMgY2hhbmdlcyBJJ3ZlIG1hZGUgb3ZlciB0aGUgbGFzdCBjb3VwbGUgIG9mIG1vbnRocyBh bmQgc2VlIGlmIHRoZSBwcm9ibGVtIGlzIG5ldyBvciBhbmNpZW50LgoK ------=_Part_5_1095282024.1402237129312 Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: base64 RnJhbmssPGJyLz4KPGJyLz4KSSdsbCBiZSBiYWNrIGluIGEgZmV3IGRheXMgYW5kIGNhbiBzdGFy dCB0byBsb29rIGF0IHRoaXMgdGhlbi48YnIvPgo8YnIvPgpJIG1hZGUgc29tZSBjaGFuZ2VzIGlu IGludGVycC5jIHJlY2VudGx5IHRoYXQgd2VyZSBzdXBwb3NlZCB0byBtYWtlIG5vIGZ1bmN0aW9u YWwgY2hhbmdlIChyZWFkeSB0byBmaXggeW91ciBlYXJsaWVyIHBlcmZvcm1hbmNlIHByb2JsZW0p IGJ1dCBpdCBpcyBwb3NzaWJsZSB0aGF0IEkgaW50cm9kdWNlZCBhIHJlZ3Jlc3Npb24gd2l0aCB0 aGVzZSBjaGFuZ2VzLiZuYnNwOyBTdWdnZXN0IHlvdSBlaXRoZXIgd2FpdCB0aWxsIEknbSBiYWNr IGluIE96LCBvciByZXZlcnQgYW55IGludGVycC5jIGNoYW5nZXMgSSd2ZSBtYWRlIG92ZXIgdGhl IGxhc3QgY291cGxlJm5ic3A7IG9mIG1vbnRocyBhbmQgc2VlIGlmIHRoZSBwcm9ibGVtIGlzIG5l dyBvciBhbmNpZW50Ljxici8+Cjxici8+Cg== ------=_Part_5_1095282024.1402237129312-- From fche@redhat.com Mon Jun 9 11:41:26 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 950907F57 for ; Mon, 9 Jun 2014 11:41:26 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 7F0E1304075 for ; Mon, 9 Jun 2014 09:41:23 -0700 (PDT) X-ASG-Debug-ID: 1402332082-04cb6c78c6129eb0001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id vbigYFl0CeWdCoVB for ; Mon, 09 Jun 2014 09:41:22 -0700 (PDT) X-Barracuda-Envelope-From: fche@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s59GfJkv013321 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 9 Jun 2014 12:41:20 -0400 Received: from fche.csb (vpn-59-213.rdu2.redhat.com [10.10.59.213]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s59GfJ5M009851; Mon, 9 Jun 2014 12:41:19 -0400 Received: by fche.csb (Postfix, from userid 2569) id B20FD58543; Mon, 9 Jun 2014 12:41:18 -0400 (EDT) To: Nathan Scott Cc: aather@netflix.com, mspier@netflix.com, pcp@oss.sgi.com Subject: Re: PCP web client on different domain References: <1717887824.20744079.1401960303984.JavaMail.zimbra@redhat.com> <20140605115447.GC11474@redhat.com> <1295610433.21793898.1402006255252.JavaMail.zimbra@redhat.com> X-ASG-Orig-Subj: Re: PCP web client on different domain From: fche@redhat.com (Frank Ch. Eigler) Date: Mon, 09 Jun 2014 12:41:18 -0400 In-Reply-To: <1295610433.21793898.1402006255252.JavaMail.zimbra@redhat.com> (Nathan Scott's message of "Thu, 5 Jun 2014 18:10:55 -0400 (EDT)") Message-ID: User-Agent: Gnus/5.1008 (Gnus v5.10.8) Emacs/21.4 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1402332082 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 nathans wrote: > [...] >> aather, mspier, et al., I'd like to hear your opinions > > (yes, please do chime in guys - certainly I could be convinced hard-coding > is OK for pmwebd, I'm not tied to this approach if noone else wants it) > >> about whether the extra configurability is needed or helpful, or whether >> simply hard-coding "A-C-A-O: *" is sufficient for forseeable purposes. mspier advised on IRC that in his opinion, it was sufficient. > Other than dealing with the potential problems (like * not being the > only valid value for Access-Control-Allow-Origin, or people not > wanting that header at all, or the dazzling array of other standard > http headers folks might want to set) That's what the forseeability question is about. So far, the configurability seems unnecessary. > another potential situation where this flexibility might help would > be the use of custom headers for a custom webapp. Maybe identifying > something about the machine that isn't available as a metric, > perhaps helping locate it within a data centre - that kind of thing. I haven't ever heard of such site data being provided as webapp ajax response headers, or indeed webapps pulling in response headers for such metadata. pmwebd already has a basic file server, where fixed information can be easily provided, with more structure and capability. - FChE From mspier@netflix.com Mon Jun 9 13:32:05 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HTML_MESSAGE,T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 86B4F7F59 for ; Mon, 9 Jun 2014 13:32:05 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 5366B304071 for ; Mon, 9 Jun 2014 11:32:02 -0700 (PDT) X-ASG-Debug-ID: 1402338719-04bdf05668132110001-S8gJnT Received: from mail-wg0-f44.google.com (mail-wg0-f44.google.com [74.125.82.44]) by cuda.sgi.com with ESMTP id yxlE7EtqGurT2AP2 (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Mon, 09 Jun 2014 11:32:00 -0700 (PDT) X-Barracuda-Envelope-From: mspier@netflix.com X-Barracuda-Apparent-Source-IP: 74.125.82.44 Received: by mail-wg0-f44.google.com with SMTP id x13so3457744wgg.15 for ; Mon, 09 Jun 2014 11:31:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=netflix.com; s=google; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=TsL+mfCXdYFuKQPF6/gQKTMQK4V4W6gjzEPGgpSswdM=; b=Dg2RhxpE12D1A2hqC37zl15piCeK/v31aF2SV+L1zOwvKrATVN3ND/ZO3dtHZbSOCi HqN7gXg9nuz3ZURb9KrxCeirHmN27ETekZyjlHhhnhsF4RYnrjE4/G8N1Jc9EGuC+6I0 cdOoMsW66OV0Y910tSodAnwc8lcuLG7jhIS5I= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:date :message-id:subject:from:to:cc:content-type; bh=TsL+mfCXdYFuKQPF6/gQKTMQK4V4W6gjzEPGgpSswdM=; b=iytVv4fOcoo8QQdaWZeikSkycCqpvnyjKgoMVCdIF7fupWDSZsITza6hsTWj7xs5mm hW09pn2ZH7atiMDA7y8aKJbg91grlerR76bLHV951CU/mSzI5SjuLlhK2mRoc8vwzxyW gBSRyEdnyeY9X/SQTPeB6Wrge0N3iVyUiSnMmopPGmC5yVcQhrUrrdsa8ODt1YVxdv0X YjBFSPaU5BOV0JgNrzK5tOlJrLHV5qY6BkAkoHbmvK/aL0UT9halslBCzIwXg/sMsTU5 BH5UozF0QBKklLciDsyu/tB96kg4z25DBO1NHvQosxUvdhIv1hYSfQrqi8u2T8Zt124k uFew== X-Gm-Message-State: ALoCoQksTLwyTb/U2c+vU3z4zUEn4aNPfEslS/IRtIgmFlwpSQ2SNAQNZIbQFr6qvSt162QhBeAb MIME-Version: 1.0 X-Received: by 10.194.161.168 with SMTP id xt8mr34425623wjb.35.1402338718756; Mon, 09 Jun 2014 11:31:58 -0700 (PDT) Received: by 10.180.104.68 with HTTP; Mon, 9 Jun 2014 11:31:58 -0700 (PDT) In-Reply-To: References: <1717887824.20744079.1401960303984.JavaMail.zimbra@redhat.com> <20140605115447.GC11474@redhat.com> <1295610433.21793898.1402006255252.JavaMail.zimbra@redhat.com> Date: Mon, 9 Jun 2014 11:31:58 -0700 Message-ID: Subject: Re: PCP web client on different domain From: Martin Spier X-ASG-Orig-Subj: Re: PCP web client on different domain To: "Frank Ch. Eigler" Cc: Nathan Scott , Amer Ather , pcp@oss.sgi.com, Martin Spier , Coburn Watson Content-Type: multipart/alternative; boundary=089e01419c6a2fbb7504fb6b6da6 X-Barracuda-Connect: mail-wg0-f44.google.com[74.125.82.44] X-Barracuda-Start-Time: 1402338719 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, DKIM_SIGNED, DKIM_VERIFIED, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6511 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message --089e01419c6a2fbb7504fb6b6da6 Content-Type: text/plain; charset=UTF-8 Just finished testing the UI I'm developing with the patched version Nathan sent us last week and it's working well. We just included the ACAO header and that was all. As I mentioned to fche on IRC, for the foreseeable future, that's the only header I see us requiring, so both configurable and static solutions should work just fine. On Mon, Jun 9, 2014 at 9:41 AM, Frank Ch. Eigler wrote: > > nathans wrote: > > > [...] > >> aather, mspier, et al., I'd like to hear your opinions > > > > (yes, please do chime in guys - certainly I could be convinced > hard-coding > > is OK for pmwebd, I'm not tied to this approach if noone else wants it) > > > >> about whether the extra configurability is needed or helpful, or whether > >> simply hard-coding "A-C-A-O: *" is sufficient for forseeable purposes. > > mspier advised on IRC that in his opinion, it was sufficient. > > > > Other than dealing with the potential problems (like * not being the > > only valid value for Access-Control-Allow-Origin, or people not > > wanting that header at all, or the dazzling array of other standard > > http headers folks might want to set) > > That's what the forseeability question is about. So far, the > configurability seems unnecessary. > > > > another potential situation where this flexibility might help would > > be the use of custom headers for a custom webapp. Maybe identifying > > something about the machine that isn't available as a metric, > > perhaps helping locate it within a data centre - that kind of thing. > > I haven't ever heard of such site data being provided as webapp ajax > response headers, or indeed webapps pulling in response headers for > such metadata. pmwebd already has a basic file server, where fixed > information can be easily provided, with more structure and > capability. > > > - FChE > --089e01419c6a2fbb7504fb6b6da6 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Just finished testing the UI I'm developing with the p= atched version Nathan sent us last week and it's working well. We just = included the ACAO header and that was all. As I mentioned to fche on IRC, f= or the foreseeable future, that's the only header I see us requiring, s= o both configurable and static solutions should work just fine.


On Mon, Jun 9= , 2014 at 9:41 AM, Frank Ch. Eigler <fche@redhat.com> wrote:

nathans wrote:

> [...]
>> aather, mspier, et al., I'd like to hear your = opinions
>
> (yes, please do chime in guys - certainly I could be convinced hard-co= ding
> is OK for pmwebd, I'm not tied to this approach if noone else want= s it)
>
>> about whether the extra configurability is needed or helpful, or w= hether
>> simply hard-coding "A-C-A-O: *" is sufficient for forsee= able purposes.

mspier advised on IRC that in his opinion, it was sufficient.


> Other than dealing with the potential problems (like * not being the > only valid value for Access-Control-Allow-Origin, or people not
> wanting that header at all, or the dazzling array of other standard > http headers folks might want to set)

That's what the forseeability question is about. =C2=A0So far, th= e
configurability seems unnecessary.


> another potential situation where this flexibility might help would > be the use of custom headers for a custom webapp. =C2=A0Maybe identify= ing
> something about the machine that isn't available as a metric,
> perhaps helping locate it within a data centre - that kind of thing.
I haven't ever heard of such site data being provided as webapp a= jax
response headers, or indeed webapps pulling in response headers for
such metadata. =C2=A0pmwebd already has a basic file server, where fixed information can be easily provided, with more structure and
capability.


- FChE

--089e01419c6a2fbb7504fb6b6da6-- From nscott@redhat.com Mon Jun 9 15:57:34 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id D057B7F5E for ; Mon, 9 Jun 2014 15:57:34 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id BAAFC8F8065 for ; Mon, 9 Jun 2014 13:57:31 -0700 (PDT) X-ASG-Debug-ID: 1402347447-04cb6c78c4134370001-S8gJnT Received: from mx3-phx2.redhat.com (mx3-phx2.redhat.com [209.132.183.24]) by cuda.sgi.com with ESMTP id WY557uQ52CBYVE8A for ; Mon, 09 Jun 2014 13:57:27 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.24 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx3-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id s59KvODq008712; Mon, 9 Jun 2014 16:57:25 -0400 Date: Mon, 9 Jun 2014 16:57:24 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: Martin Spier , "Frank Ch. Eigler" Cc: Amer Ather , pcp@oss.sgi.com, Coburn Watson Message-ID: <878364148.23139544.1402347444401.JavaMail.zimbra@redhat.com> In-Reply-To: References: <1717887824.20744079.1401960303984.JavaMail.zimbra@redhat.com> <20140605115447.GC11474@redhat.com> <1295610433.21793898.1402006255252.JavaMail.zimbra@redhat.com> Subject: Re: PCP web client on different domain MIME-Version: 1.0 X-ASG-Orig-Subj: Re: PCP web client on different domain Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: PCP web client on different domain Thread-Index: ngCPxSSg+bhvuFemjxnJ/xZdQWQGRQ== X-Barracuda-Connect: mx3-phx2.redhat.com[209.132.183.24] X-Barracuda-Start-Time: 1402347447 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6514 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Hi guys, ----- Original Message ----- > Just finished testing the UI I'm developing with the patched version Nathan > sent us last week and it's working well. We just included the ACAO header > and that was all. As I mentioned to fche on IRC, for the foreseeable > future, that's the only header I see us requiring, so both configurable and > static solutions should work just fine. Okie dokie, thanks Martin. > > > (yes, please do chime in guys - certainly I could be convinced > > hard-coding > > > is OK for pmwebd, I'm not tied to this approach if noone else wants it) > > > > > >> about whether the extra configurability is needed or helpful, or whether > > >> simply hard-coding "A-C-A-O: *" is sufficient for forseeable purposes. > > > > mspier advised on IRC that in his opinion, it was sufficient. > > Sounds good - could you send through a tested variant of that approach, Frank, or shall I code it up today? cheers. -- Nathan From scox@redhat.com Mon Jun 9 16:15:41 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 6F4697F62 for ; Mon, 9 Jun 2014 16:15:41 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 0D132AC010 for ; Mon, 9 Jun 2014 14:15:37 -0700 (PDT) X-ASG-Debug-ID: 1402348533-04bdf05667137750001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id qZrmAEvigKeWQDeR for ; Mon, 09 Jun 2014 14:15:33 -0700 (PDT) X-Barracuda-Envelope-From: scox@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s59LFXqF018916 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Mon, 9 Jun 2014 17:15:33 -0400 Received: from [10.13.129.207] (dhcp129-207.rdu.redhat.com [10.13.129.207]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s59LFXUY004547 for ; Mon, 9 Jun 2014 17:15:33 -0400 Message-ID: <539623F5.1050902@redhat.com> Date: Mon, 09 Jun 2014 17:15:33 -0400 From: Stan Cox User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0 MIME-Version: 1.0 To: PCP Subject: [PATCH] Improve pmatop value fitting Content-Type: text/plain; charset=ISO-8859-1; format=flowed X-ASG-Orig-Subj: [PATCH] Improve pmatop value fitting Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1402348533 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Despite the size of the patch it is conceptually simple. The atop command by and large does not depend on anything but simple use of printf formatting. Instead it rolls its own so it can more predictably do tight fitting of values into a maximum sized field. This patch does something similar. It adds a routine valstr that fits values for situations like: 7.37682e+06, length 7, = 7376820 7.37682e+06, length 5, = 738e4 3.66211e-05, length 7, = 3.66e-5 It also adds memstr which does something similar, but specifically for memory units: 1.23457e+08, length 4 = 117M Then it changes every use of put_value to use one of the above. git://sourceware.org/git/pcpfans.git scox/dev 55de60ddb953a42f55f27212bf4c66f6f50ae269 Stan Cox (1): Improve pmatop value fitting. From nscott@redhat.com Mon Jun 9 22:27:05 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id EB3B07F6D for ; Mon, 9 Jun 2014 22:27:04 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id E32758F808F for ; Mon, 9 Jun 2014 20:27:04 -0700 (PDT) X-ASG-Debug-ID: 1402370820-04cb6c78c613fc60001-S8gJnT Received: from mx4-phx2.redhat.com (mx4-phx2.redhat.com [209.132.183.25]) by cuda.sgi.com with ESMTP id MbLvPrx5WBCvEZgp for ; Mon, 09 Jun 2014 20:27:00 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.25 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx4-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id s5A3R0jQ030596; Mon, 9 Jun 2014 23:27:00 -0400 Date: Mon, 9 Jun 2014 23:26:59 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: Dave Brolley Cc: pcp@oss.sgi.com Message-ID: <1896810420.23212457.1402370819966.JavaMail.zimbra@redhat.com> In-Reply-To: <1847964481.23206323.1402368934163.JavaMail.zimbra@redhat.com> Subject: Secure sockets builds have high daemon memory utilisation MIME-Version: 1.0 X-ASG-Orig-Subj: Secure sockets builds have high daemon memory utilisation Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: Secure sockets builds have high daemon memory utilisation Thread-Index: 6mNlgiod+A4WNgyXcV2spFjnIq3Jdw== X-Barracuda-Connect: mx4-phx2.redhat.com[209.132.183.25] X-Barracuda-Start-Time: 1402370820 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.03 X-Barracuda-Spam-Status: No, SCORE=0.03 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA_TO_FROM_DOMAIN_MATCH, THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6523 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 0.01 BSF_SC0_SA_TO_FROM_DOMAIN_MATCH Sender Domain Matches Recipient Domain Hi Dave, I was staring at some memory stats this morning, thinking to myself... hmm, ya know, I don't remember pmcd taking up quite this much memory - what gives? So, I tried a few different build combos, enabling/disabling certain PMDAs and so on, but the biggest hit seems to be from simply enabling secure sockets in the build. This covers a fair bit of territory (nspr, nss, ssl, sasl), so not sure if its any particular one of them or the combination of all yet. For comparison, first line below is a pmap memory summary for a secure-sockets build, the second is --without-secure-sockets - both measured just after pmcd startup: [PID] /usr/libexec/pcp/bin/pmcd Address Kbytes RSS Dirty Mode Mapping ---------------- ------ ------ ------ total kB 262760 11704 1728 total kB 112868 2276 552 So, secure sockets gives a ~5x resident set size. In the case of pmproxy, its closer to 10x... :( [PID] /usr/libexec/pcp/bin/pmproxy Address Kbytes RSS Dirty Mode Mapping ---------------- ------ ------ ------ total kB 249560 12652 3324 total kB 99848 1284 228 Which is pretty disappointing, given that most people wont be using encryption/non-af_unix authentication at all. I wonder if we could get crafty and load the secure sockets support in an "on-demand" fashion? We do have both forms of networking still there in the code of course - could we find a way to bootstrap in the security libs only if they are actually needed? (i.e. run time linking, via dlopen(3) trickery, instead of compile time linking). Thoughts? cheers. -- Nathan From alerts@google.co.uk Tue Jun 10 05:51:57 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id D6A157F6F for ; Tue, 10 Jun 2014 05:51:57 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id C2B9C30406B for ; Tue, 10 Jun 2014 03:51:54 -0700 (PDT) X-ASG-Debug-ID: 1402397509-04cb6c78c414d270001-S8gJnT Received: from eros.elinuxservers.com (mail1.eros.elinuxservers.com [72.34.55.100]) by cuda.sgi.com with ESMTP id URwqCXmEd0bY4ggQ (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 10 Jun 2014 03:51:50 -0700 (PDT) X-Barracuda-Envelope-From: alerts@google.co.uk X-Barracuda-Apparent-Source-IP: 72.34.55.100 Received: from localhost ([127.0.0.1]:49104 helo=www.nngallery.com.my) by eros.elinuxservers.com with esmtpa (Exim 4.80) (envelope-from ) id 1WuJaw-00064w-BR; Tue, 10 Jun 2014 03:47:58 -0700 Received: from 41.216.50.102 ([41.216.50.102]) (SquirrelMail authenticated user nora@nngallery.com.my) by www.nngallery.com.my with HTTP; Tue, 10 Jun 2014 03:47:58 -0700 Message-ID: <4bb7535cb24f347250c426c936c9822b.squirrel@www.nngallery.com.my> Date: Tue, 10 Jun 2014 03:47:58 -0700 Subject: Google Award Notification Letter........ From: =?iso-8859-1?Q?=22Google_InCorporation=AE=22?= X-ASG-Orig-Subj: Google Award Notification Letter........ Reply-To: david.drummond.guk007@googlemail.com User-Agent: SquirrelMail/1.4.22 MIME-Version: 1.0 Content-Type: multipart/mixed;boundary="----=_20140610034758_14713" X-Priority: 3 (Normal) Importance: Normal X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - eros.elinuxservers.com X-AntiAbuse: Original Domain - oss.sgi.com X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - google.co.uk X-Barracuda-Connect: mail1.eros.elinuxservers.com[72.34.55.100] X-Barracuda-Start-Time: 1402397510 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.21 X-Barracuda-Spam-Status: No, SCORE=1.21 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=MISSING_HEADERS, TO_CC_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6524 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 1.21 MISSING_HEADERS Missing To: header 0.00 TO_CC_NONE No To: or Cc: header To: undisclosed-recipients:; ------=_20140610034758_14713 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 8bit Google UK Ltd Dear Google User, Attached to this e-mail is your official Google+ Awareness Award Promotion notification for being an active user of Google Services. Best Regards, Matt Brittin. CEO Google UK. 2014 Google Corporation ------=_20140610034758_14713 Content-Type: application/pdf; name="Google 2014.pdf" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="Google 2014.pdf" JVBERi0xLjUNJeLjz9MNCjg2IDAgb2JqDTw8L0xpbmVhcml6ZWQgMS9MIDE2MDIwOS9PIDg4L0Ug MTU0Nzk1L04gMS9UIDE1OTg5OS9IIFsgNTA0IDE4Nl0+Pg1lbmRvYmoNICAgICAgICAgICAgICAg DQoxMDUgMCBvYmoNPDwvRGVjb2RlUGFybXM8PC9Db2x1bW5zIDUvUHJlZGljdG9yIDEyPj4vRmls dGVyL0ZsYXRlRGVjb2RlL0lEWzw2QUJDMzQ5NDEwMzgxQzQwQTFBNjBGNjY2RkI3MjRGNj48QjFB OUJENTAxQjVGNUU0Nzk4MUE5RDFCQjJEQTc3NEQ+XS9JbmRleFs4NiA0MF0vSW5mbyA4NSAwIFIv TGVuZ3RoIDk3L1ByZXYgMTU5OTAwL1Jvb3QgODcgMCBSL1NpemUgMTI2L1R5cGUvWFJlZi9XWzEg MyAxXT4+c3RyZWFtDQpo3mJiZGAQYGBiYGBaBCIZK8DkKhDJwgwm+8GkHZh8ByZngkjmbDC7HMyu B5O/QOSCWrAJ6kCSUbcKRIpJgUQ0wLL8PEDy34ENDExAe5+CRIBq6UT+Z2Cc/w4gwADDUhBLDQpl bmRzdHJlYW0NZW5kb2JqDXN0YXJ0eHJlZg0KMA0KJSVFT0YNCiAgICAgICAgIA0KMTI1IDAgb2Jq DTw8L0MgMTAyL0ZpbHRlci9GbGF0ZURlY29kZS9JIDEyNS9MZW5ndGggOTkvUyAzOD4+c3RyZWFt DQpo3mJgYBBkYGAqYAASkY0MqIARiFkYOBqQxQShmIFRHUg7Nmxn8GUwLBCz4DzB0sEUwKjDUHL5 1AEGzqQZwWd8l/E+5U2Am8WyYwLETJaZYJqxAWw8y+kVUKtuAgQYABorEt8NCmVuZHN0cmVhbQ1l bmRvYmoNODcgMCBvYmoNPDwvTGFuZyhlbi1VUykvTWFya0luZm88PC9NYXJrZWQgdHJ1ZT4+L01l dGFkYXRhIDIgMCBSL1BhZ2VzIDg0IDAgUi9TdHJ1Y3RUcmVlUm9vdCA2IDAgUi9UeXBlL0NhdGFs b2c+Pg1lbmRvYmoNODggMCBvYmoNPDwvQW5ub3RzWzEwNiAwIFJdL0NvbnRlbnRzWzkwIDAgUiA5 MSAwIFIgOTIgMCBSIDkzIDAgUiA5NCAwIFIgOTUgMCBSIDk2IDAgUiA5NyAwIFJdL0Nyb3BCb3hb MCAwIDYxMiA3OTJdL0dyb3VwPDwvQ1MvRGV2aWNlUkdCL1MvVHJhbnNwYXJlbmN5L1R5cGUvR3Jv dXA+Pi9NZWRpYUJveFswIDAgNjEyIDc5Ml0vUGFyZW50IDg0IDAgUi9SZXNvdXJjZXM8PC9Gb250 PDwvRjEgMTA5IDAgUi9GMiAxMTIgMCBSL0YzIDExOCAwIFIvRjQgMTIxIDAgUi9GNSAxMjQgMCBS Pj4vUHJvY1NldFsvUERGL1RleHQvSW1hZ2VCL0ltYWdlQy9JbWFnZUldL1hPYmplY3Q8PC9JbWFn ZTUgMTAyIDAgUi9JbWFnZTcgMTAzIDAgUi9JbWFnZTggMTA0IDAgUj4+Pj4vUm90YXRlIDAvU3Ry dWN0UGFyZW50cyAwL1RhYnMvUy9UeXBlL1BhZ2U+Pg1lbmRvYmoNODkgMCBvYmoNPDwvRmlsdGVy L0ZsYXRlRGVjb2RlL0ZpcnN0IDE2NC9MZW5ndGggOTMwL04gMTkvVHlwZS9PYmpTdG0+PnN0cmVh bQ0KaN7EVmtvm0gU/SsjrSol2sbzAgaqKlo/4q2l9KE4rStZ+UAM64xqgwW4bf59zx2MjfOo2Gqr FRpmmPuYy7nnXpAiYIJJYZj0A8wh04GHOWKh8JmUgkW+xiwxDBSlogVJsKs1bUNdh6SD3QAOpISj QDlFJk1AOtg1zjxiMjS4KcGUCKGjJC2gCAOlFIk0U54HC+VhgdNfv+Z9jCn/eDXh1/eblPcXlc0z ej5Zx3ZV5a9eKJHEX23SS4rtep1nSW+5/SKE+WuZ58tVSlq9RX56fs4HU/iaMYHlmHn8Kl1U89D0 lB8xLaKeh3iM6AEWrWi64dOq2C6qD3GRZhWTfLq9rSiGS5t9OT+n2MoFSSLh8/7X5cwm1R3zTMSH 8eZNapd3FTMq5KO0VjtTUvDxKl6WOICP86waDPLv87NAhU4GNIQgixsnfBev8bqFjVcvB/kqcXuz nVch+KSKV3bRz/CKTPDLNE5stmRa87fx9zoSBcd4hXT9CUHV6JEPCqewmyov+OddlMoHJnNlQAGt QQq6wjBCLAor2mv2Gx2aafigTpdx8CtYAEpFIBJ5b48gME5m4Jeeyb+oJdgN4cFpYpc0G6291W4d eR6dgZU4uigK0mvPFBWtabTfiGZ6/0bWDI29th2tTRsF5I90mvt/dZHvw5PRpr2+AREHcZlSbtt8 ucgWOXGCz2zWz0q7fx7boqyGd3HR0PDACNcOBLvil/FORRqPOyaOD/y/Lrapo9OeU9wxrnRdBObt 4ggj2SoOIVvFEUS6XRzBU8XhB644gro4YNEqjmu7Tss/lHiXfsP9Kl/HWbtKvGerxFOtKsEJTZWI LlXiiyPEnwri16CX4hh6qNTIqy7Ig44N8u+LJC1w3MkkAbS2uj9Fr1vasiruT/pJfpuewuFmg95I yIvf38rGdpUqFjlu/D+9TcwN8ubNUbk3zxXMcDKa3pfwOcn+yd1njsLF7nX+92T0Nt7wBk8+moHq CPRRCj1n06QLtqRB4al2ytwX02VrTp9MrJ6LqQY8iYEhJKX7sNIJe0Y1IZ29OZAENzA5/5hZKKUs ipzJ/vzn8+3Jf5vvwP/5p6tbPR5nNvCbzHodMove+Bi8LhUY+Y/TFx1XIFTqCvS6VKASD3sfOHdA 11dH6EJ0QNd/El1faCej/yFBFu1qAv8elNNgOLq4+HMIgG8L+3Pg92ijvesd2r7q0v3UA7SPD/21 xuf+Mp5qfH4n2HUN+w8BBgA2ixshDQplbmRzdHJlYW0NZW5kb2JqDTkwIDAgb2JqDTw8L0ZpbHRl ci9GbGF0ZURlY29kZS9MZW5ndGggODQxPj5zdHJlYW0NCkiJlFZtb9owEP6OxH+4j/ZUTGzHb1VV adDSsbb0jaqaqn2IIG3RCmhAO+3f786BNjBlzYScOHfnx+fnXgy0L+HgoH3e7R9BcngInaMu/Gw2 pNJCG0jwl3owTngDTqIMRtNmo92fZo+5gaM5XDUbcHzeBSjhyHecoEQaUQgPrBQKpLfCqxKOq8JR JRwpQsSxVgRTAHkjnHclIF8FpNdAnSGa9iTIRBgLwwc8ZwRFSTAiwSNqJ5IUhgiJciEVUiC0s7B4 3JVcnzQb9+yEGzafc8sen3PgLc0+cxXYbMZbKZug7pVLyfLFMlvwlme/uVIMzUxh9ou3pGXZYgw8 ZV0EyXGdYiuu2SLn32H4tdk4RpcLt5E5teWzRi4St+1zdDN6BiWAvwhJS4Rs4EwQeCynlfAF2gcY ZodUV8WpMgRMiIWGuCxmBYcd7ln+zFtIIs6QKMcyjsS85lw6osuxL6iY43jBscz3eCjEzr5ZdNba 0Q8STUg0w09CfMKRTQEXXWZxm4g+eke/RoMxDkEfUXK23m+21mzmUXlDy+9oJrlWxSwqwpCrlF3t bQxv6ZOWRXdW+XijOCXFlo+bTabi47in3mEtlWitHXZbHXbp6sTc7cQ8COwOZd9sAi6xIlX/UUPf qG7mmPQvlPhUAbCb/Rt4H4RJ0/IW96xVYYutx9od22k2eYYMy04h4zqOuGG+XFJ+YEFqySZYvhaf j/iEcb6KKTN5Xu5/HBqFQVFhm4KasfHVsUmUML5OeEKN8NigN2j1woOtyq6ZoS5WsAadbDV6wgYH A4rcPnU3OCGmbk/bPWxnl2R5ExtcnLaPru+oKaq0nRDjvgaZGnu93na4JpkyqcOEV3ip1CfiuCLR sA1rbJnvcNU5aTF/k21TqDB1Ssh02xSpTt+oNrtM6zXRMnVEsGoHSW+DMUCpkjUYlyGI4LaIqUu4 rExf6zTe03XSV6o6UbNaKPWP6+QCy7aHOUmj3+0jB3TdIgdnlLd3dPv2B4P+AHmReH9jjQ9iQ6B1 QyK33+t3eSsUiV9ILpDuAUQzQjkmoqMmPuLndelk745FhyW2axm8SFGO/15CCLDIm42HT9Wpb6J1 6az1I6GrI4EvHSMBfwQYABy3AQgNCmVuZHN0cmVhbQ1lbmRvYmoNOTEgMCBvYmoNPDwvRmlsdGVy L0ZsYXRlRGVjb2RlL0xlbmd0aCAxMDE1Pj5zdHJlYW0NCkiJfFbbbts4EH034H/gIwXYNKm7gKLA Nk2KLhC02BpdLNJ9UGU65kaRjVBqkX5Uv3FnhpRkuVERODaHwzOXczjS4o6z4F+2/XO5uN4uF+z6 9oqxzUf26tXm9ur9W6bi16/Zm7dX7A3sbm4UK0Scs+1+uVBMwp9iqWRpIkUWs+3jcgE2ocIE/kdZ yp7uLy1/vVsu7vjfwTrmmgXrRPHvwVrl3NgDLFPF2yDmxyDiuIp4dWyClN/D+ilYh7wE34hcOjDV ZYsYWcyfjx24uSPHYJ3zb4EKuYYzBJQl/BkNtNX1YM7ddlWlrcVFwk2D3xIigOMBHBE/dQntISp+ TGXK2p8H4BNsIeRXTMhUkGDMy9ZAqJQ3Qx09gFtBeJVwbbu6DRJupzEcLNZ4lsD1GUfIRN/8OFci Tc8JuOPrWd9YFFPXx9LUGAB6VesKi8K4Lj3MBwugmqKJSs5Rkf5Yijj0kP2x2jSYe55xCwxHEEGf LKKXD2gvFHkSEUhv2ZgfyJbe4aEU2gkMEGm4zvk77CeewA8eqPUKYSQ3kF7Ytxo8nWT+I2vnk6kG 3TjvPknXa8xPcdOC4TDAnBOQF/wmiEb54NEdLi6IhmN7ki9s9RL7Feoj1knbmMYjeDu6DSUOPkqq czUAwic8QrBoawOV+aRLkrh2fZonKCxEkXuCpuF3M6dQV2E8PYmlVy3KVQGtXzikgm0RhCgoR/f7 S+AyV1Bt2QBLECbqDdURDY2vz1ABj3oHF8E7TKhHwy/X1sO8nHmYpqKIppnPXYkwk0ImU197wvx6 hVjKlgJT4SC4z5ixseXPza277bbVT1fIREJ1/vQNet+0QeaHEEKRWJxWylqAUyhj0HUva6jR6ZrC KK4RMXZJ+MgkUfs7olWB48AVcgrOeKZet8M8govfQMdrug19r1PnNkoTbHHmh+7uYqySYi1tmebe CTeRRJM1ZG78TXUb40g1VJeLNwCqdEgDnDG6E3gzAIydisZGJUCLdq2vDsiU89WU0TgZaFaAL00R qB3vGK9X7gGEwGVd0ipyV83szzWIgLMzNRVq2vb58VuIKJ76+vkbF1AFNiFzDTGVJmXZVaDUby+2 JEwHNiMlGXKv05NdkUG+NE39kF8r+PojgH8onxNC+VMh/wABSBwPXYsd96PKHvGJSEedXHUL3IX5 OOAfUCEvFxHJSCTRtJC5giOZCXXhWza7cWj+M4zJzs8bMG779Vc/gjHNb2anwTEbajigiGDDaXnl zU6DB3oK4vtJUfQT17ekrKlwGU1eEdwNgZnmBIlIJH/3XjPLZlIUQvbP0fGhceqQLf9+wfak3aG1 sPa/tBYX0JubkKkQX9bY/wIMALcfLh4NCmVuZHN0cmVhbQ1lbmRvYmoNOTIgMCBvYmoNPDwvRmls dGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCA5MzY+PnN0cmVhbQ0KSImsVttu2zgQfTeQf+AjCdQMKZKS BRQF1rl1CwQIFn5L+6DatCNElgtL7mJ30a/pj+7MkJJlt2paoAisy8xw5vDM4SgTzRT8aaZtInPL XJ5LlbDF9mKi2AYvdxeTR87EB7Z4dzG5WVxM2M39FWOXD+z168v7qz+vmXZv3rD59RWbg7fL53KZ pXBV0swo3UtJ0kGSy1vNcmlh4fqYMVXMZTmCDOiU1ImDq4E6+8255S/CvRDTGX8ShpcNE1OX9PdW WL5DJ74qXtZruIPF8L2YJnwL5lTxf4ROQtjhGItLMWUhptrQGwabk2ATYwvIZrjHFx0XbHdYqYaQ TQhLTZ/SU8SQpyGlSTqTNh+SEDy4+fA02LSvIbWd8fcccmvKq96LkcxGOWndr9M7htSomXTZMN8j rw7LZ4ChA0+Bnr+BHQ3k1yLlnqhqAlXYiDUxO1JglkmjX6biqmiR1o2Y5qE1UEQ7gJDYCGE+UsEa 2MJvpMRaLdMzSooaca16tbSdWgMXfr0DXkiPnTAwytctmEuwBBlXfgXPaqDOKOzvA8FjBELKZqO0 wX6UyjVMgeUj/zpz6pVSaGJY0vI7kfH5A71k/L8bUBkvN8IBcAvVHSeP428J1AGMNfxW8Nv7FfkM bTwjWwy+hcdyDYtbdIBCTOdZoOEpbCqjdM03q+f7ErddNk/H8g+7A7DURzZfRpWkSUlHSn6mz7AU yZFYzOT8D5GkoXDK56Grz13H0Ha9L7Cha2IowAZnVH9VCTgVMfKjCOMCuS2b5uCjOtBX1lQuDfLt J81+ZGfOJVK/1OtxwaJOXCbT5BfEj1Ot2CL+NIGtAMDusMOQGwCedrZbYY5D14OMUDN1PxcfkLUw NinR1tekkW7kzmmg9Dl9cUA7TNp6JdIYU1QNRFkqEy14s3xJecNRa4P+4DuxLNqIn/Cu+1qfuirl v/BOTcIkVVFuT4ZZhUCrsKbrJgQ2eGxdj2nX7xS/Ak25wrDMnn1EBkyFrRb184/6ZVNpuuFyprkg Vf7W10vPAlQfTKvYA1JZgFyV/rPIu6kD0TrnJU7SpxCXuE6D5gQnrD+n6RWGp92+QjjVT1D5jFqz 7JzIB7WCjtChOwsmTrUTjMFRLNuSqPyMOaKRDkqSnH++z1AW7X6HH55iQ8v0ScMh5g58ZNrFLlU+ wO3VBTQQK82PemKc1C725NNYnIMzak9jCS2WXkXWlj0TjTzLc3mbMJzXg/+WtDKohWNK9r8AAwCN zBgXDQplbmRzdHJlYW0NZW5kb2JqDTkzIDAgb2JqDTw8L0ZpbHRlci9GbGF0ZURlY29kZS9MZW5n dGggODUxPj5zdHJlYW0NCkiJjFZfb9owEH9H4jv40ZmEiR07iauqUkvLtGl0VcfL1O0hBQOREuhI 2LR9+t3ZgYSWlKii2Pf/fne+o+eTZb/nk4/93hMl3k8y/dzv3U37PXI3GREyfCCXl8PJ6NMt4dHV Fbm5HZEb4HLiwx8nSrMoJEpIFigyzc8biRtGhmNONJMxmS5qi6FPFA+YcuaAxrhQ8D8AP9vla8qj jfu7NwjoxgvoDj5bbyAgiAEPNH3Z39N/3iCkBskion9AntM0y/AuffoMYqY6W3GTmQS/CzO3liJa ehI8DGJrWXH61+OiclkRwR26f8E7MtbwqYRzY0pP0RS9W/qy5qHhFeocB/Br54U03WJiJjfA4VYR pStF9LGor85OlYcSdeo26nwD5lAkhas+xAYxJwiGoIl1Na/piAm6eMNIdqU3UC7mzQHfEq8WlGb9 m62ChfU5i3TVJ+CXxzbkdLYC2zKm6XqW7QAo9GYKoIUKbAr5prbKp0WZlFjTnUWljoVXKk4KiZhJ htg73JMyRQj2JSoYSorjHnLKLnUEFPBN5r89DvgVWAy5BwSkXGfsb7PNGqNCYjIrXVonoh8foWfS 5RrSdqwHdJrYcC2euUFeVXjg3+zg6NQSG0oVcHDo6xIIq0Z8PHKdYW2+Ux6p4Wntn7GtQZmkWUGe TQaqCCYPKx+krNqDLLCAmWve5qvYpzuyTZ8laV5cvHI9HAvCxdHrF37EYt2MpPt80q3zSUaacd5l Pgm/w3ySYcwCZ85RcS65k5tHD20Yh0z5sqn/RK89Ebrmm1gI7/B4P7VTZfQFv6zEp4lt7W/IJeOv nqaPk4aXOg4bX8gCTTgPGY9hUGqltSZb0+8tPrQizyMr3YitM/KCtyMfSiajTsiLc8hXFpXa75ou ywGOvq8x19kT5T+8tsrEkLxsGgcyqrQ9lyhm+ljh5Boa4xiHPXPvnmpu4BEMolarHHN8ZfV91IJ2 6KVkYVTl0gBBnAWhqdgJhFrhJAgjN2uhleuxCOPk2uO4WIA8PwzCAvGBXdcKUKyYHx57fB8g2Q5Q EDCt3wIUnAWoqdgJoFrhJEBTXEjwm+NlVe0SXExmiE8+PKwwHLL3O4tc/gxdZex2unA/P067FwKm KW+4J/8FGADVlxLSDQplbmRzdHJlYW0NZW5kb2JqDTk0IDAgb2JqDTw8L0ZpbHRlci9GbGF0ZURl Y29kZS9MZW5ndGggODA1Pj5zdHJlYW0NCkiJvJVbb9owFMffK/U7eA+T7AeML3EuVcVUWjptWtVq Q5omtocUDI0UEsSl2779zrHDJZQATxNKFOxzy+9/fHIxoIT9Iv3Plxe9/uUF6T3cEtJ+ItfX7Yfb T3dEmU6HdO9uSRd2JRHwk8QkPApJoDQPNOlPwU1wIRKpSH84oMFPthNx1y+MuYyDuqNzIQ0OUcyT usOAPrKQDoerGTM0ZS2p6ZIFNCsLWG4T1lKG3jBYnTBNbdsZfIQtW4zwPmctTa9YK25MKZOQK1NP eZxQ2ExIKh4eIGROEtp1PIvQ1mFAn/Al4U0VzV6ZlDRdWtKbplkOeGTg8YyQwYhVdnaxAChg2kgl NlyE9TTHqUTNVITkJnlLJTxJZdfxLCpbhwHtIRXgoaouIN9Zy9ASEBRwIRrl0RSuPR5ZK3Q7eVZY 8oW1ImeLzYYXxpAh/YvxPjj/w5UoqbnR9UqOg4t3wLXvFUE6432GOjFcShdPkAnePp6OnNQiS5Lw IK7FDgXRILSKXGC/Op+sn766FHiYEESJlPCQ5RbYJcKjTfOVXcD/OPZonNVq3WawEZmqMycvEAhJ euslGpZeCLCZrV0yp4uPPXTt6+K+845g+QO1RMe9LN4RBRyDbbnenEKtcCCyci1vZY1FRxGVQoCf oe8ZiOu3Fna4mlvMMtqY+8GD7tu132AiaZZjeXjSopA+4wzyj1jdwo7wDzTPn2GOxbjFzMV6tfn2 7XzAWt1+yVF68VEbjgpIGClsOd9rs10yM+ZRLayfBGVFh2ziAoeUSVG9TDrfvLabr7lj6krke/kP dKqMofV3qzm7U7VoHB46NDw5awJpeU67m5CbqKpOcAmTX3ANeeaT/RXf/t+QiP+YkDTPyRyHiF3M ShwQhWe7LOHb5AdKvTHvsfk2ktpsUqChG9e+oxzaKTQbSFBU04Z0NwFs6mRbOUHGmHmMwmVD68og zzYvmYwr9a5OS6SN4EFUp3CuRqpZI6N4dJ5GuqaRPqxRoHlYzTrQQ4EeKg7hHiRepv1Fp9S1EDfd Y1cH9HljdHDxf3l2TuoVSPiMmBqR03qRfwIMANwdDSoNCmVuZHN0cmVhbQ1lbmRvYmoNOTUgMCBv YmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCA4MTc+PnN0cmVhbQ0KSIm8Vltv2jAUfkfi P3hv9jSML3ESTxXaCmzatK5Vi/aC9hCFwKJCUoXSaf9+59hcEsptL1OF5Ryf6+dzPrd70/8yIDro 9cj1oE+uR+1W95MklgcxGU3bLUkE/EkSCqK14laT0aLdAhmXysCqo5BUs33J/ed2a0wHyQuTkuas IxWdME3JoGIdRVewXbCOpYuShbRgnRhOf5LR13ZrCPF9DopI1chAasuVambhArtYpOaADG/6hHTv yNVV15dn9st7VZtSPJT/UNtDxjqaFjmuZUV+uE2KS8YsJXdVhpUuUZBPQOLVnwnrBDRxe4RmQnDb Z9LQX7k3hmVKvqGa289QzRnMne4tM3Q6zVMW+fOK7CFXL0rKDVReisX4nS9iuEAXzns+x/U9k/oQ lA9PSbFDM6yhuQkXW26CoB7Sy9f4we7+1T3V7a3iImzYj+kEMjP0BdADCCE77tZq5bJ2S4noFBNE i89QsELB45EYMtY8VPUYcKVCh2SUjqkQ0TEzG/Moapo5kw8ziC9oOcP48wyTXUCyNTw5ppP6THfO d8hsUYM8IFAU8yCEnKyx1pIqa7embw+1c3TgAlQYo4+DFzCGvM7Ol4oMWjYcXDpf8Tn6sJrbGAoV gofmRHsgS+yzBp9UK8cWC2CLEtmiAKk7cTozph2lHL12KxDWWmy8dmGx/pMXr0TItW4a+ouHuHCv SeXGNM1KnpYXIaxdI9VBuBRh20BYHyRoBe1ko8tJ7EqIj9enfj2A95XSQeH/suydBTmA/jWmicWF IAfiwFwZywEvFUsu7JqXTjuRFzylKhLYCceZ+fst9PoIe32I7PGGBdvfUQYFloIRq7m+7CX7hFFK mB/3NuMjE9Fllq6qHL+f8fQPk5sTp5Qly9KNAA7i8h2cGOWVyvUseuXk2GApGARdT3W8dox2MU0m OO8v6DBfAq/KwP/74Jw+Awbl9usxw3NDn7zEiGYem5qUob9BH2ilKADZvJjB6j3kxRSZe4vAInlG DUctW7bxqmmJxlNIYMdOWYG5YlJ54p7o9cd83oAF/KyaGKfzJF8sjyBkjOLyfJucePyViblyHUv+ CjAA+RsIPg0KZW5kc3RyZWFtDWVuZG9iag05NiAwIG9iag08PC9GaWx0ZXIvRmxhdGVEZWNvZGUv TGVuZ3RoIDgyNT4+c3RyZWFtDQpIiZRWTWvbQBC9G/wfppeihXqt3dUnhEBtJ6EFl5Aaeig9yPba EVhysJSW/vvOzEqOVOpGOSiRdmdm5715M+uRD75UOsS/Jo7gtB+P+isPd+PRdy87iYnxLIhJknpP wnj4rb0jvmxsVfHeljYjLxMTZbwSd7b44JrylfdbKLKeJN5z69vsFGKSchzysOzLxhQscZa2yMnW q0XAj92SjzOgb47bP8jwORLX2kgrMnrExbzChdQ//ycwDh3FasJQhF3/s5s4xjtzYDeEOOR9ipAf KTtC45g48e5voYPGkxHbrHo+WTq1xYHpHUX76Vx/tmByBrI9b29bazp0jc+BDbA8P2D1eTy6WY1H M3wUYC1BQeSDDkKZKFgVVM3NIcuLvNyLyIO/6vXssleR9wuzUw01jDQra3TAOmdrxElHVxYQrVKO qxpXzgyroC+TffuRFUwqpo0YXKkrToGsCksJxJxOtUF7d85TA9XBbIFXYA+kmAjdSjGJmP5KXiIh MKFMVZ+IewJ3wGJwJWF9kcEg0dIkXWe3Q/3i3lyffMN8Yu+jQDwPX24WzMM70X368ae3GpSG1e7l qNDEMtHdo3zgruQDugnCzXIOML2Hq6vpcv5pAYG+vobZYg7d1MNUYhtrE8g4bmD/P4jpBJneKkhl kPQyJDnpQBrTZDdkgMyPiL7sCaEmqXFZs9p1eDsHKtidXjSBwpqErCwLX0kSVOdstxMxGr6HJUvA FmsRepbVWrEqfafKO1IGxWlVeHBTBlhLXKmyOda1GXddE4jUj/VsJxI76H5rcNesXE8X8vXyBlrL MO0TOLS8weXyqkAqM6i84eUgPgYJBgWJLgZRSTo0SDxAaCqOpY7eILQl99wCqLDuPatrlArMWHV5 3c7p8sPrxVLGl1r3kxharOQyRbGRgR5EUTqEogil9JZWfKT+yXm6FlmJbQPnudoM8uautDA7Zqct 3xG6uSPorl3ynZaV2R6dm3tkkbufCJv6iIvM9QCCdezLKOxBGMhv6A+hJjQy0m/g5k60wwJxumnh LrNmUODqK5PC3fM6/NekwDkFc8vXqPvtMGBeaBVjfn0kQylSDUXwR4ABANiVFSENCmVuZHN0cmVh bQ1lbmRvYmoNOTcgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCA2OTI+PnN0cmVh bQ0KSInUVV1r2zAUfS/kP2hv1kMVS7ZkB0phSbvQQaGUvK1jeLGdBvKF7WbLT9q/3L2SJdsZbtzH ESSk66tzP86RMl2Mrjjx4ceJnLBIER4GLCCL7ejqm0fod7L4Orq6By9y/zgjZPxEbm7Gj7OHOyLF 7S2Z3s3I9F+MADDCQSBBP4gImFCDQMJ+ED60GtmP4Q+uRvWCxBM28YeBRC2Q8ZcQamBSkEXeQCqf RIoJYfDAxriQMAcQqFidW57nGPMHDVvjWr1n6N84w/sA/z9iQ5ChQYAeOxxIHoKyOjTozs8vExz3 qiQSTA5UyaSjEk4iJtW5SJRkMvyISP7QyJvR2NvDOMA4Ua68gl5H3hqnFZheYVQEd8LnIeWxpzfz fX1sRUXobdCUETrxHnC1A/tyjx801qF2LWAklUbGLXoxWuN9hsWmHtqAzt0kSkzOfcvKjPLIBDhm KRUSwC6yKCJoQtRt1EAald9Lo4IHIx5Eo+IDaJSKRfFHaFzULdL9KgkqO8NmbROctdX19ReakhK5 KrMdzJVra14YaoC3LUGuNNKuZq9yWPka+dU4XTZJs7GiODn0DLNBYcXmi46QwpRqaaBHiQ4lg6T0 CVuWFtbaCiuHBANzwNR3nkNsfSEHjVO90lrQjYR6+7NNTpiFXv/E4O7I0obIzSmTeYYWk4JGq2vD 7U672CwwQoZiTjZQTrs5XdW2hBDGLV0dbJt0rKPNwVw9xM1Sd6Ficw8r14ym8Fb7bHNgnzWi+b3E +jXsGxwv1/hFhzNOb1hRadZ7242mz02/HGNaOdnONiytUzScL40o6mdCL0xLXzzKpVe+UDzNrGKe Ni7RpNTCcLSYTFPLWWGPmLTQVQMf17Aq2pLZmoCfLj8fIf43yzYvw58P0bn5Ev/m8enPzx+TQDGM 2vOW/BVgAGhKDzINCmVuZHN0cmVhbQ1lbmRvYmoNOTggMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVj b2RlL0xlbmd0aCA0MDc0Mi9MZW5ndGgxIDE3NzM3Mj4+c3RyZWFtDQp4nOydCXwURdr/n6ruOXNN AuQkTIchARICIQQSIJLJiRKRYKJOENYEEgXPKAEUFfBANHjA6rK6HkQUVFDpTFDDtURd9/Vc8EbX Iy7gCYsHoouQfn9dCWjehSUR55/P/qlvqF9VV9VT9XR1dc3UzDBDjIiiICrVFJSeNvaTf6YUEr+/ ApnXjC0oLLrlX7edRuztaCL+3NiSCaUPBS9/mti7HxA99texpWflfbLLl0j8uoeJ4u4bV1pWdEny DCvsvWi1z+llpafOGhS6kiixhShkyoTSIenhU+a9RMR+RHlFSf7pZe4tuWOJvYVyGnF2wXjf2Zaa +UTDYB9+17RLKmtuXnzVJGILr4GNf9rsWu2nMQ+9T+wB9G+bdH7NBZfYP98wgNiiNCLLuxdUzqyh cHKgvW1oz3XBxVedP3jGTUHEVmWZ9adXXXLlnmUfTSIqeIuY99Hp1ZVVH/larGj7GrP/6ciImBeS geN1OO43/ZLaKwveU5DkPiLPzRdfNq0ya86oYmJP3EUUu+6SyitrerZGaKi/HZW0SysvqX5m9WeM 2IunEgWfX3PZzFojmd6FP7pZXnNFdc0343ZFErvNjvN7g8yxt/S8+rPk/HHnhWV/b49BNlixIzve jF8aVzjhwIGDh1xk74e6DlHfBLFtTOsZlO+iAwcOzHXRkZJ21IvMnJByiidFZHBy0RA6C3bZ6NdE Ud7im8hCdsufLMPQQFxbrLxO5/MIu4UH2VRuorZQstFMV+bDxmEalo3P10ijBC3J8mbrRDbMNob5 vcQMw0C/SZYN5pmSam13iY9s84ivpiblFaqh/xKsq2lpoNpWd1DZr7FT4mnRb+2LhAh33Uvd7YNE IpFIJBJJd8OWGRu624fOon763+OrRCKRdCeMjA12BBcZG7vbF4lEIpFIJBKJRCKRSCQSyYkSUm5j jPbbOm8x++jZCR2OPCfg0rFhx68ikfxnujCJBgbOi5MOxuTdK5FIJBKJ5ORAIYWZWBSFcTwHirbs DmqmH+0G2clutJKDHFAnOaFBFGQcomAKhoZQCDRUaBiFGgfJRWHQcKERFA7tQRHQntTD+Il6CY2k XtAoioRGU5RxgGIoGhorNI5ijH9Rb4qFxlMctA/1hropHqpRH2gCuaF9STN+xC5OM36gftQXmkge aBL1g/YXOoASoQMpCZpM/Y39lEIDjO9pkNBUSoYOphToEBoETaNU6FCh6TTE2EfDKA2aQUOhw6Hf 0QhKh2bSMGgWZUBH0nDoKOi3NJoyodmUBT2FRkLHQL+hHBoF9VI2NJdOMb6mPBoDzRdaQDnQQvJC iygXOlboqZRv7KXTqMD4J42jQmgxFUFPFzqexkLPoNOgE2gctISKoROhu+lMOt3YQ6U0HlpGZ0DP Eno2lUDPoYlQH52JmuVUCp0k9Fwqg06ms42vaAqdA/2d0PPIB62gcuNLqqRJ0Kl0LnSa0CqaAq2m 30HPp/OML+gCodOpwvicZlAl9EKaBr2IqqAXC72EqqGX0vnQy+gC4zOqoenQy2kG9Aq60PiUZtJF 0Fq6GDpL6Gy6BDqHLjV20ZVUA72KLofOFXo1XQG9hmYaO+laqoXOEzqfZhs7aAHNgV5HV0Kvp6ug Nwi9keZCF9LVxj/oJroWugj6Cd1M86C30HxoHS2ALqbroLcKvY1ugN5ONxotdActhC6hm6BLhf6e Fhkf0510M/QuqoP+AfoRLaPF0D/Srci5m26D3kO3Q/8k9F5aAr2PlkLvp98bH9IDQpfTndB6ugv6 IC2DrqA/op2HhD5MdyNnJd0DXUV/gj4C/YAepfuMv9NjdD/Sq+kB6BpaDn0c+nd6guqhT9KD0LX0 EFSnh6ENQv200nifGmkVdB09YrxHTwl9mh6DPkOroU20BrqeHodugG6njfQEdBM9Cd1MuvEu/Vno FmqANpMf+iw1Qp+jddDnoe/QX+hp6Av0DPSv1AT9H6Ev0nrjbXqJNkBfpo3QV2iz8Ra9KvQ1+jP0 b7QFupWaodvoWejr9JzxJr1Bz0PfpL8Yb9Bb9AL0baHoAfou/Q90O70EfY9ehr4PfZ3+Tq9AP6BX oR/Sa8Y2+kjox7QV2kLboJ/Q69B/0BvGVtohdCe9Cd1Fb0E/pXegnwn9nN41/kZf0Hbol/Se8Rp9 Re9Dd9PfoXvoA+g/6UPoXvoI+jV9DP0G+ip9Sy3Q7+gT4xXaRzug3wvdTzuhP9Au6I/0KfRf9Jnx Mh2gz6E/0RfQg/Ql9BB9BW2FvkQG7YbKNf1oa/o+sabvE2v6vn9b078Ta/p3/7amfyvW9G/Fmv6t WNO/EWv6N2JN/0as6d+INf2bf1vTvxZr+l6xpu8Va/pesabvFWv6XrGm7xVr+l6xpu8Va/oeuab/ qjV9xwmv6Z+INf0Tsaa3iDW9RazpLWJN/1is6R/LNf1XrOmb/ovX9Nfkmh7QNX2/WNP3izV9v1jT 94s1fb9Y0/fLNf3/uzV9h1zT5Zou13QirLgUMjko0m6+OGPp/Es5zqNnd3zvvAvtdYGggLQqOang na/ahc+DSI4DC4rsbhckEolEIpFIAk1wtMPcW1k7b9GNe6vggLQqOamQe6tugQdHd7cLEolEIpFI JIEmJNZJqvkV6p3mGG8e2TscBWZvFRKQViUnFUrnq9qPX0XSSXhIbHe7IJFIJBKJRBJowvoEmXur LrxCf4wNjqPDURf2al0gLCCtSk4qurC3chy/iqST8LA+3e2CRCKRSCQSSaBxacHm3qoLr9AfY2/V 8aOCgdlbuQLSquSkogt7q2N8/FXyK+AurbtdkEgkEolEIgk04X1DyELW33pvFZj/qRIekFYlJxVy b9Ut8PC+3e2CRCKRSCQSSaDpkRSKvZWlC59+OsYGp+P3TATmf6r0CEirkpMKtfNV5Xen/HbwHknd 7YJEIpFIJBJJoOmV7CIr2brwCv0x9lYd384KzN6qV0BalZxUdGFvJb875bdD6ZXc3S5IJBKJRCKR BJrotAiyka0Lvxx1jA1Ox++ZCMy3AMhvcZacMF34Ckv53Sm/HUp0Wne7IJFIJBKJRBJo4kb0NH8W vguv0B9jb9Xx7azA/MpvXEBalZxUdGFvJf9/32+HEjeiu12QSCQSiUQiCTTxoyLNvVVo5y1ijp4d 0eEoMHur+IC0Kjmp6MJXWEYcv4qkk6jxo7rbBYlEIpFIJJJAo3mjyUHOLnz66RhvHnX8nonA/E8V LSCtSk4qurC36hk4L046VM3b3S5IJBKJRCKRBJqEvBjsrYJcnbc4xptHHZ+HBmZvlRCQViUnFV34 eQC5t/rtUBPyutsFiUQikUgkkkCTOK43OSmoC59+ch89O6rDURc+Y9gFEgPSquSkogt7q6jjV5F0 EkviuO52QSKRSCQSiSTQJJdpFEyhXXiF3nP07NgOR65f79F/QH6Ls+SE6cLPA8Qev4qkk1iSy7rb BYlEIpFIJJJAM3iyh0IoNLLzFsd486h3h6PAfAvA4IC0Kjmp6MLPA/Q+fhVJJ7EOntzdLkgkEolE IpEEmvSqJAqlsC78ctTAo2d3/Khgj6NXOkHSA9Kq5KSiCz+TfYyPv0p+Bdb0qu52QSKRSCQSiSTQ jLh4IIVReBc+/ZR69OyO3zNxjB/BOkHkL+RITpgu/DyA/O6U3w7biIu72wWJRCKRSCSSQDOqdhC5 KKILn34aevTsjv8NKzDfAiB/IUdywgR3vmq/wHlx0mEbVdvdLkgkEolEIpEEmvyb0qkH9dI6bzHy 6NkdPyoYmG8ByA9Iq5KTii78PMAxPv4q+RXY82/qbhckEolEIpFIAk3xsizqRdFdeIU+5+jZHb9n 4hg/gnWCFAekVclJRRd+Jlt+d8pvh6N4WXe7IJFIJBKJRBJoSleNoSiK7d95i7FHzx7W4Uj79R79 B0oD0qrkpMLV+arDjl9F0kmcpau62wWJRCKRSCSSQDO5qZBiKX5Q5y3GHz07q8NRYP6nivwWZ8kJ 04WfB8g6fhVJJwme3NTdLkgkEolEIpEEmqoXi6k3aUM6b3GMN49O6XDUhffBuoD8FmfJCdOFn8k+ 5fhVJJ0kpOrF7nZBIpFIJBKJ5P8BSnvoTUwcV+EIKXYhqXQqjkPJTpys1JfGo+wKq1dLMgwyv6H6 F8fGjra/g3rLwvZ2fgGz0pFMxjmhvf9TAUG1dN7ntKNnd/y84lmdb68rrPmVdr/ZaHpzy7w5Y07J Hj1qZFbm8Ixh6UPThgxOHZSSPHBA/6TEfp6+CZq7T3zvuNiY6KjIXj17RIS7wkJDgoOcDrvNalEV zmhQoaeoQtOTKnQ1yXPqqanmsacSGZW/yKjQNWQVdayjaxWimtaxphc1z/8/Nb1tNb1HajKXlk3Z qYO0Qo+mv1bg0ZrYpIk+pG8r8JRr+h6RHi/SS0Q6BOmEBBhohdHTCzSdVWiFetHs6XWFFQVoriHI me/Jr3amDqIGZxCSQUjpUZ6aBhY1hokEjyoc1cDJHgKn9FhPQaEe4ykwPdCVxMLKKr1koq+wIC4h oTx1kM7yp3mm6uTJ08NSRBXKF93o1nzdJrrRZphnQ4u1hkHNdbc2uWhqRUpwlaeqcrJPVyrLzT7C U9BvgR41d2f0z4doPCLft+iXpXFKXWH0DM08rKtbpOnNE32/LE0wtbwcbcCWJxZV1BWh61sxiMWl GnrjC8t9OluILjXzTMyzaju/ak+hmVNxoaY7PHme6XUXVuDSxNbpdOZVCf7YWO96o4ViC7W6Mp8n Qc+J85RXFvRu6El1Z17VGOPVYjqWpA5qcIW3DWxDaFh7Ijjkl4nqI2UiJaqbqeIzj4wsMz3ynIYJ oWvTNHji8+CcskypzqK6aVmoBsoZrPQqXJEZuiO/os41ysw37XVLosuj1X1PmAGePbs75lS251gT Xd+TmTTnyZGphvLDaT0lRU9ONqeILR/XFD6OEcfDUwfNbuIjPDUuDRGGj0owtpXlo4Zg+BMSzAu8 uMlLU3GgL5joazvWaGqcn7xDUsp1XmGWNB8u6XWWWbLgcMkR8woPZvI6cTv30u1JR/6FuSJ7FE4f pbPI/1Bc3VZeXOopnjjJpxXWVbSPbXFZh6O28qwjZe0pvUe+T4nj7Skep4hSTMrJRyqbB75gXU3E P6uY1FW6gkkpMphWpLsqTm3TcmdCwjFtmmz2Xxg1GV+bViL62azdS31USsfj0R2OO3gXXKfAXzWJ F5dNqqtzdigrwgJUV1fk0YrqKuoqm4wFUz2ay1O3nj/CH6mrKaw4fEGbjA2L4/SiW8txEtPZKExW TnkNHnbzxAYvu7l0km+9i0i7uczn54znV+SVN/RDmW+9hiVX5PIjueaRZh5RMcNE93O7KIpb7yVa IEpVkSGOpzUxEnn2w3mMpjXxtjyXyAOp1FC2IDdEeZzWInByQTWEegSFvMrjjbaQdG8T4oieIvZH pqSvN5qRGDVM5Kfelb5gk7KGzqNhyF7jP8vMXtPoLUgX8bDRbfGQoSL229uKbT3T3bmxMBuCwCms PTUB4Q6E5QhbEKxwaA19jGAgKMqjygp/kRstrERDYbk9lZU4Ky90K4KBoMD7lTiXlbS3PUeFVw81 OoLN7h8SVnHKQ7AKg7oQFiCsRdiKYKHLoMsRDAQFqRUoW0FcWaE86He5XblO5QGaj8CVP1EYY+RG 63c3usTY3NMY1iPdm+tS/kAlCJx0ZTw1I3A0uxRmS4mjerE/dagYwuJGZ2i6C/UXw+nFcGQxuqyH MnHsRTDrL27sEWk2f4M/LFzYXe1Py2hLNLqi00swClcSU6qVS8lDbmUe4j6IpyGORzxVqaIQ4ae3 McyVvgD95aB6jtKLBqI4V4mkdMQFSizFiWqz/KFt/czyD0hOxxnnK9GiSpgSQhmI7YrNn+7WNipe Mfg3NzqCTP9u9rt6pW9WFio26olaC1Aryh22WXHiyjrFmZQ1OkLSl+QGK2U4zTIMixs+MozypaKh S/1oKDdcKVR6UyTKLlLiqRfiIqWPiB9RHqQixPc3JvV2N29U7hRWvzcbRfdj2qbWmMaQ0PTmXIcy BqW6cjsuwO2i8yWNSVnplJukDKA0BI4xno/UfDHp65Cqw1Wrw5Wqw5Wqg1N1mH2k3IKSW1BniDKX apQ5tARhOdLmtOrlx4CuF4l+A9LXKzFKNAbGtRFDyZAb2+gINT2L9kf0ENWiG4ND03M2KzMxz2ei Ta9S2xgVnX7ZRiVZnMqgxug406DGj+m6WYlquzQwjDQvyWalNwbCHJh4pY+/l1vPdePYnMhuPL19 mW8zB4m/yd82LzffimMzfqU9fq09/ltbbDTzbW03BX/DjFtye/NdaOw8/iEtR4rzjfx5POF18/d5 k+kFf4+vpxzE23FchXg94mGIN/gTXnQ38aZGRPD9Xn9IpHmy/Hl/ypD2hDuxPREV156IiEzPTeTP 8Wfx/N/N30XcD/GzvBnPUN18C+JoxM28ll5E/BQfTqMRr2uP/8I3mVOcP8OfpizEjf5Q0wXdbzOj tX6rGT3pp7ajkiHuTfxJvoZiUfUJf1Isch9tTOrnDtuI9hhfyWv98e6IXCd/kPnYPlSqp+1mTBF8 hT/TbGSJf5PmXs+X8CXe6ExvojfVu0pJS0xLTVulaIlaqpaprdJyXfx2LCDLOe5fvhiaSRrH7EHw Iizht/jVTD33EM7JPC9OC6D1IlUBrREpgrqOlH4tUjl8IU1A4GhjHsJ8hAUI1+G5/RI+F+FqhGsQ rhU5tQizEOZgNamBRQ0samBRIyxqYFEDixpY1AiLGtH7LATTogIWFbCogEWFsKiARQUsKmBRISxM fytgUSEsSmBRAosSWJQIixJYlMCiBBYlwqIEFiWwKBEWXlh4YeGFhVdYeGHhhYUXFl5h4YWFFxZe YZEGizRYpMEiTVikwSINFmmwSBMWabBIg0WasNBgocFCg4UmLDRYaLDQYKEJCw0WGiw0YeGChQsW Lli4hIULFi5YuGDhEhYucX1mIZgWLbBogUULLFqERQssWmDRAosWYdECixZYtPA5Dcq23Bdgsg0m 22CyTZhsg8k2mGyDyTZhsg0m22Cyrf3Ua8VgcEybeQjzERYgmLbNsG2GbTNsm4Vts5hesxBMWx0W Oix0WOjCQoeFDgsdFrqw0GGhw0IXFvWwqIdFPSzqhUU9LOphUQ+LemFRLybuLATTouuTssuXhl/H fHY81vIFbKCI59NuEc+j7SK+lhpEfA2tEvHVdL2I51KmiOdQkojRnohryW1nfndmWG4kloAJCOch XIawHGEtwhYEm0htRfgYweDDvX3VMNsE23LbWtsWm2WtrcXGw6wTrMuta61brJa11hYr13LjeIhY R7G00B1C50P3IuBBBJojUjk8A/1mYJ0djr8MnuEN36PtTWZbk9mWZLY2md2RzHIdfCxTxUqnUSb2 z27m8wYnjXFvR8hM6j8GK9PtT++OcvuTRrib2Ka2aKA3BfFuhAaEVQjXI2QipCOkIiQiuEVeMur7 vH3bm9yE0B8hAUEzu6DISOwLIsLt3vU8hK1qfCGEHGY//QfAbqO/fxqiJn//CYie8fef6s51sKep v/msiD2FK7cG8Vq/eyeKn2iLHve7NyJ61O/OQDTF338wonP9/V9z54aws8itmqZl7XEpztuMz/S7 z0a1iX73QEQp/v5JZu1kdJSI0oHMRzsRJ7Zb9WvryeN3j0bU1+8eada2U3/zwjMrpQr3LAhmrDTC ob3rmU9l3iD3Hved7t0w/woDi+nxntakItqa2MTO9jrdm1IfQOVctz/XadbH40NDe6yb8VPuVYm3 uO9FWyzxafc97sHu21Ob7Mi+DX7fIrrwu6/HXm+Nt4d7gTvNXZu60z3TPc5d6T7TPSUR+X73ZPcm 000qZz6+5ml3CRo8DWeR6HePTWwSLha5r3J73f3dI7VN5vhSVlu7mambzBGg9LbeB2F8kxObzDl+ VmYTC/cm2762LbGda8uzjbZ5bH1tfWzxtp72CLvLHmoPtjvtdrvVrtq5new9m4wWb4r52lhPq8uM rKqpqki7uKnmy2jYMHJm5zSO9B5KMS8uzWPFevM0Kp6q6ftLPU3Mia2UxZPH9IhiKi7L07NSipts xpl6Zkqxbis519fA2O3lyNX5zdiolPmamGFmLYwzX7NoYLTwtrj1xFjMwtvKyyk6cnZOdE7EmPCR RQVHkYp2TfmZ6F8m4/VlxaU+fXV8uZ5uJoz48mL9OvMVjfU8jIcUFqznoWZU7luv1vCwwjPNfLWm oBzVdopqmM2hqEb9zQjV7HmkmdWwnuSZ1XCN2uolwRz1EswI9ZwhlCTqJTlDRD2VmfUatmuFBQ2a JuokEm0XdbYn0i/qYMbAtqAhKUnU8mjMZ9ZiPo8mHBsoGnK7USXVLaowPK8TDbmZ6Ewf8nOVxPYq w49UGS76UtjPddxtdXoOOFyn5wDUSTlBqvNSWOPQWfOeN18kqvAUViNU6ItnT4/WF0zVtIZ5s9pf PUqqmDptuhlXVuuzPNUF+jxPgdYw9PmjFD9vFg/1FDTQ84VlvobnvdUF/qHeoYWeyoLyxpxsX26H vm450pcv+yiNZZuN+cy+cnKPUpxrFueYfeWafeWafeV4c0RfhTPMeV/ia7BTXnn+5La4kQc5MYcr 4hLK8yJdNWPMCb1+dEL0vLgNKrFHKSilXA/25OkhCGZRam5qrlmE+8wsCjVfCWwvip43OiFuA3u0 vciF7HBPHh0eWjIrFevDJxbrCaWTfOZU0b2VR79mM01EcTQVzijAPxzXioC/X9akmUel9mjMmjVr pimzUmYSFevJpcX6iInwxGZDVxUF5cgbfDhPUUReg8NR2GQ0ozAFTrBaszszlcJSMIJeJ3ZdNl5v rbdxc6tQ2xgbn37ZZjyCz0fAPo7P8Q8R22c+p7Fvorl/qW0cMrwtxnbVjP2xCenooTETpmac2BZ7 w1ORWJK4JHVJZn1ifWp9phW5T69CpnuV+VDqH7JKodqUmYcHAsnacgw23DL7e9DfO150XG8mUlLK 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 Nc7LGudlffOyvnlZ17yMlTBrm5e1rQ9jJcz65iX/i8j/IvK/iPwvIv8ryP8K8l8j/zXWv2TWv2Ty P0zOF5HzGjkfZg30sv55Wf+8rH9eI99lA1o3sD97Sj6EAzcwn1cwny/BiRtw4o/cfYJsv1Y5yE6q SP6gBMVs070QT5fxVCkr5lNyFWezqXuQul9xdTx1n6LuF9SdRN0i6v1a2OPj6Fc8GeTJIp6cZO6v jJx5y2zpDu6P4/5+7hdzfzQtPcrd92jpaloqoKVLzOe/NveJh81PXSRazhM9LbPgXrgPfg/zYQEs hMXwGCt9B0uu8PArD9J6Ju3sNvdGr4uuysfiMuVT/K8UvVm1b2aXmMzK3Y1dYm+lmpnhOD2Icu0b cRnr+UL5KTW6sKfsZazp1L9XTGQFm0XO3yImKreau6+JIomedadn3elZd3rWnZ51p2fd6Vl3etad nnWnZ92p2Yma86jZiZrzzJoeanqo6aGmh5oeanqo6aGmh5oeanqo2Y+al1KzHzUvNWu6qemmppua bmq6qemmppuabmq6qemO1xwRrzmCSG4RA/k20NTYb+4RmlArZPybbbgJpsHN8EuRyN4tkb1bInu3 RPZuiQnGf6e1oXBH6qTHdxp5pkcVosjSX1ZaBsBAGASD4WIYAkPhErgUhsFwGAGXweUwEq6AX8Ao GA1XwhgYC+NgPFwFV8M1MAGuhevgergBJsIkmAxT4EZIg6nwErwMr8Cr8Bq8Dm/AJngTNsMfYQu8 BVvhT7AN3oZ34M+wHd6F9+AvsAP88Fd4n91aLsdPZZllJ3wGefA57OL6FzJoyYfdUAB7YK88ZtkH ++FLdhCzeFu5VRbaPmcnsQu+gHzYDQWwB/bCPhm07YcvZbBdB1nZrhN0hi7QFVIgVVba18GLgAb2 V+Ux+xZ5wv4WbIU/wTb4K9c/48hu0/453wtl0P4Vz5fyXZeVjvPhAugJF4JXnnD0gt7QB/pCPxl0 XAT9ZZljAJALDnLBge+OYZwP595oecxxJcdp8oTTKiudCtigHdjBAU5IgERwgRs8kATnQXsgXmcy dATidhK3k7idxO0kbidxO7tBd+gB9N9J/53030n/nV7oBb2hD/SFfvRpmDzmHA6/kEHnKBjNtfFw HVwPt/HcbI53cu8unrsbfDAXlnAvC1bBasiGdVx/k+ff4vmtssz5J863QQPXNFmZYAFiTegogwnE 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 bYzFLDRdRXavEUmoXYXalah9QsxH4wAaB8j0ap7MR+sqtK6yruA8Sx6nVgOZr5L5KpmvkvkqPnyP DwF8COBDvfUp+QUjoIQRUMIIKGEElDCW9jI37MKjIB4F8SiARwE8CuBRAI8CeBTAowAeBfAogEcB PArgUQCPAngUwKMAHgXwKIBHATwK4FEAjwJ4FMCjAB4F8CiARwE8CuBRAI8CeBTAowAeVeFRFR5V 4VEVHlXhURUeVeFRFSNEZYSojBCVEaIyQlRGiMoIURkhKiNEZYSojBCVEaIyQlRGiMoIURkhKh4H 8DiAxwE8DuBxAI8DeBzA4wAeB/E4iMdBPA7icRCPg3gcxOMgHgfxOIjHQTwO4nEQj4N4HMTjIB4H 8TiIx0E8DuJxEI+DeBwUPhwM42AYB0/i905cPIFzZTj3Dc7V4lwtztXiXC3+u/F/B+6puKdaH+fa kzi9Tv4ZB6txsBoHq3GwGgdrcLCePPkHLpbjYjkuqrio4qKKiyouqrio4mIYF8O4GMbFMC6GcTGM i2FcDONiGBfDuBjGxTAuhnExjIthXAzjYhgXw7gYxsUwLoZxMYyLYVwM42IYl2pxqRaXanGpFpdq cakWl2pxqRaXanGpFpdqcakWl2pxqRaXanGpFpdUXFJxScUlFZdUXFJxScUlFZfKcakcl8pxqRyX ynGpHJfKcakcl8pxqRyXynGpHJfKcakcl8pxqRyXynGpHJfKcakcl8pxqRyXysUluKTjkm6OxhYX GnGhHhfqcUDHAeO9qR5161G3HnXrUbcedetRV0ddHXV11NVRV0ddHXV11NVRV0ddHXV11NVRV0dd HXV11NVRV0ddHXV11NVRV0ddHXV11NVRV0edetSpR5161KlHnXrUqUedetSpFwOZGU4xM5xi9Kus 54nWx4niCaIwe8/3DbCR9f5F1u3u7Op6wPlwAfSEC8ELvWAOz9wBd8JdcDewg0TrJrRuQusmtG5C 6ya0bkLrJrRuQusmtG5C6ya0bkLrJrRuQusmtG5C6yZxN1pXo3U1PVbpscooiDIKooyCKKMgaup/ egSg+48ynx281fjLxr/P9mr8qMaPavyoxo9q/KjGj2r8qMaPavyoxo9q/KjGj2r8qMaPavyoxo9q /KjGj2r8qMaPavyoxo9q/KjGj2oUVFFQRUEVBVUUVFFQRUEVBVVGQ5TREGU0RBkNUUZDlNEQZTRE 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 iqiXiqbDRdPhoulw0XS4aDpcNM2IphnRNCOaZkTTjGiaEU0zomlGNM2Iphl5t0nebZJ3m+TdJnm3 Sd5tknebouL3HXPwKB7D81E/kbef/BvLv7H8G8u/sfwby7+x/BvLv7H8G8u/sfwby7+x/BuL1mNF 67Gi9dhoo1p2E1rQis1owxbEaMdWdOC9cLfIPltkny2yzxbZZ4vss0X1CaL6BFF9gqg+QVSfQNPn afo8TZ+n6fM0fZ6mz9P0eZo+T9Pnafo8TZ+n6fM0fZ6mz9P0eZo+T9Pnafo8TZ+n6fM0fZ6mz9P0 eZo+T9Pnafo8TZ+n6fM0fZ6mz9P0eZo+T9Pnafo8TZ+n6fM0fZ6mz9P0eZo+X/b1qE/Z2fgGvolv 4d6Qk4lyMlFOJsrJRDmZKCcT5WSinEyUk4lyMlFOJsrJRDmZKCcT5WSinEyUk4lyMlFOJsrJRDmZ KCcT5WSinEyUk4lyaon5aomFaomFaomFaomFaomFaon5aon5aon5aon5aon5ZX+JMmW1WIwlUUYW y8piWVksWz60+H9UHb/oeHqYIpudJZudVcpm54e28osxUnb7UFYrHxPaZLZTZbZRMtupMtsotfjN icvDE4kF4dXEi1GPxCuy3xL1fL06vSHqK8u1ynKJxAr1/QeZrkKmG1T6jclW1zfLPOOirCyXleWy slxWlsvKcllZLivLZWW5rCyXleWyslyWkm6lpFsp6VZKupWSbqWkWynpVkq6lZJupaRbKelWSrqV km5N3h3i5HTcg3sxA/dhJn6L+8NwmXO4zDlc3TVf3TVf3TVfFs3IohlZNCOLZmTRjCyakUUzsmhG Fs3IohlZNCOLZujMmM6M6cyYzozpzJjOjOnMmM6M6cyYzozpzJjOjOnMOLk9tCV3YCd2YTf2YC/2 wZ6QmSfIzBNk5ktk5pzMPFb9l1f/5dV/efVfXv2XV//lVQkFVUJBldCqSijI4MMr1oVYpVBQKRRk 8ktk8ksqjKnCmGT04TJ6VtVQqOhyHkKcilCGciSirEyfVVEUVBQFFUVBRVGQ+bMyf1ZlUVBZFFKH ePYjGOjaYOdDINaqMgqUwXDKIJs6zn0+SB0coOooUAjDKYSsyqOg8iioPAoqj4LKo6DyKFAOl1AO l1AOl1AOl6TE0ZQ4mhJHU5djHMaHkdTESGriUmriUipiuHo2T0nkKIlc6relX2Tqk5qHP5Z+lalP 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 L+YtaCHvyB+gxbwLf5iW8EF8KC3jE/gEWsVf4VNoNZ/Kp9Em/gH/gH7nH/KZtIV/zmfTH3wOn0M7 +Hf8e9rJ5/IfaTefx+fRXr6AL6B9QouQ9otkkUIHrYc5Ms7DHDkPc76oLCoz5TzMBc6rXIKoL+qz 0HmVS3Re5ZKdV7kU508uVbQSrVmauFG0ZaXst3Is3Xp9Y5nW6xs7zZvmzWStrNc3drP19MZus57e 2O1+sl+CtffT/Ax2p/X3xu7zl/grWWfr7411s/7eWHfr7431sP7e2KPW3xt70t/lH2BPWR9v7Bnr 440Ntz7e2Bjr442NtT7e2ATr441Ntj7e2Ezr443Nsj7e2FzZRj7JFlrvbpxZ727cs97duG+9u3Fl vbvxQI6V43mi9evGU6xfN55q/brxstavGz/J+nXjVeUcuYhXtx7d+FnWoxtvKNfJTbyx9ejGm1mP bvwy69GNX249uvG7rEc3/rD9Po73CHjAec9ABoo/GiQECbx3kBQk88eCtCCNPxGkBxn8ySAryOJ9 gopBJd7Xelzj/a3HNT7AelzjA4PaQW0+2Ppd40Os3zU+1Ppd488FTYNmfLj1u8aft37X+Cjrd42/ aP2u8THW7xp/Kbg9aM/HW79rfGLQKejEX7Xe1/gk632Nv2a9r/HJQd+gL58SDAgG8DeCgcEg/qb1 vsbftt7X+DvW+xr/wHpf4zOCd4KZ/MPg42Ae/ypYECzkS4Jfgl/5smBpsI6vDDYEO/hm65WN77Fe 2fjewEQY32e9svGD1isbP2S9sgkWyYiUE6H1xyZSI5Ui1URapEbkNFEmUidSR5SPnBE5Q1SINIg0 EhUjTSLniiqR5pHmombkgshF4tTIJZEWolbkskhLUSdybeQ6cUbk3khH0SBaIVpZNLbe3UQz691N XGy9tYlLrLc2cb/11iYett7aRC/rrU30Tbgq4RYx2X61J2ZYb23iM610kvjW+mkT83VrfYfYZv20 icPWT5vnWT9tnrJ+2ryo9dPmJVg/bV5J66fNK2v9tHlZ1k+bV8H6afNq6Al6slfT+mnz6lk/bV5D 66fNO8f6afOaWj9tXjPrp8272Ppp8y63ftq8K6yfNu8qvVKv8lpZL2veDdbLmtfGelnzbrZe1rw7 rJc1727rZc3rkMgTA+/eRJ2Y6D2YmJKY5nWxntW8RxL3JO7xeiRREvN6EmergHqJsPiSKJkYlcAu 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 ORuFvpPWDucNohaxB+T6n6jNLloDXJ0FsT2sMxTbrm7C7y7ag7pSRZy50oUfeR5dGfLeIGljmKjl Ltojumh/6OLaQ/sxF+3DXLSvctF+yqUJ/7qCso7R+F0ReY2LeHDRXshFeyAXrRGupXfih2s37wdc tBdy0V7ItU7KZc110X7AtUnY5zxxkY9ctAdw7W4Tq4lzQGKNIt61T+i4aoWM/2uMrnu77v/nf43x j/StTM1U9/FfVI21yq8VpVMaUX+iLKJsohyiUW2uuUQ2oglEk4kKiYqI/ERhoijRXKL5RIuIlhAt J1pFtJZoA1GVpC1E24lqiPYSHSKqIzpOdJqonuiCfGfj51yvEN2QxPotipKkCnlSZ6Jusm+N8kpj SOpBlEqULuSt1wyiQaKvScPujDlpBNEYojwih7CTNFG8L2kK0TQiTcqDRBGiuLCbNI9oIVE50VKi FUSridYRbSTaJK9b21wT+juIdsvrOvnc7jb39xHVEh0hOkF0hujcnSv7J6mBqOnvuCZ8cU348e8l zEFbmiCI7WO+6qVuQzu6Kf6384lr4vmE3fssRF3kfJP8vu53rvf1Iuqr/Nqeb3fZJ9mn2t12L2iG fZZ9jr3UXmZfbK+wr7Svsa+3V9o327fZq+177Afsh+3HqJ2yn7Wft1+0X7Y32285jI4kh9WR7EgB pTn6499Z1LIdOUSjHLkOm2OCY7K9wlFor3QUOfyOMCjqmOuY71jkWOJY7ljlWOvY4KhybKF/b3fU OPY6DjnqHMcdpx31jguORscVxw1Hi1N1dnZ2c/ZwpjrTnRnOQc5hzhHOMc48p4Pvk3yic4pzmlNz Bp0RZ9w5z7kQVO5c6lzRIa12rnNutM9wbpJtK7WO+B3Udjv3OWuJPyLbCecZ0DlqDdSanNecN12K ywLq4upOa0LvDn9xQZG/uJCEX1zojF9c6IJfXLDiFxe64RcXuuMXF5Lxiws98IsLPfFbC72tadYh ykPWodZcZaDVY/Uro60zrDOVp61R64uK3VpqfUl5xlpmfVn5jnWZ9V3lWesu625lvvWQ9ZKyEL++ sPH/454ZDN0NEfz3KtX8f5NPz5ZElSV9lKRcSbY2PBNlTfpkybNeoeSLJPklUdVNp6qbTlU3napu +iKpu0Tqs2x5m3+vkte1kja0eWeV/PcWZYCtltoR2wnbGds5ag3Ac7YmatdsN+2K3WLvIpqt1t7d 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 0BnrOdAF67kQgHUBq08Y1NcA682sOPPxQY6GQU3Rq1FPKdZlcuQbqKNMXM0k18C6Ri7HulauSRjU DdmPvBWxw1EVjvE2CePsCDKWTCTTyVyyiJSSDWQHxrGj5Cy5ipn/Exzbn+/noScZoa/boi8J4AFe 6E0dIAARMgz1jkMtlmNvzcEeWkFlHyilMgJWUtkXVlHZD1ZTGQVrqIyGtVRGwjoqY2A9lbGwgco4 ubkoUUcLUaKW9aksk1tSuVNuRWW13JrKGrkNlbVyW1Gixg2obAXzqf0WUMsVUssVUcsVU8stpDZb RG1WQq24mFpuCbXcUmq5ZaI95Pq0xw1ojxvSHq9He9yI9rgx7XET2uOmtMfNaI8DkWoTuqpbQrGC 0JEO2uJPNMQn+QbQNfWNiQvG4s8zUWBIfa0e9REj8dziUcD4a6u/6Eki9iKezKS+QmvxDhnoIEIR MMCcBigSMRRfxJhmRCZADwiFXtATQqA/1xOjT9ineWFmCPMjM56ZIZkjWSZZx3/kq/kavhbxdR43 n1vAFXJFXDG3kFuEWLuH28vt4/ZzB7hfud+4g3wlz/ASXsqzvIzX4OXce66K+8B95Kq5Gq5WgbCn +EUxVTFNMV0xQzFTMUuRr5it2KTYrNii2KrYptiu2KEoU+xUXFZcVVxT3FDcUtxR3FM8UDxSPFFU KJ4rXio1lHKlppJTKpRKpZaSV2ormygdlI5KJ6WzUlCqlS5KV6Wb0l3poWyq9FQ2UzZXtlB6Kb2V LZWtlK2VbZQ+Sl9lW6Ufr+S1eJ7X41W8Pv+Of89X8aa8GS/eg2xIsz5CMz0WmYM/xrREJgmjdjpm dEomCzM6Lbr6maf5mzbNynTo3KuuZK1kLdGTrZatISrZZtlmYiCrlFUib8NchdQTcxXkN9e4u8RO zFiQzYzH2N0cc/aNxBez7UukM2bcV0gXGrsDaOwOpLG7K43d3Wjs7k5jdxCN3cE0dvegsTuExu5Q Grt7KmowavdS6mCkjqKROotG6lG8AUbqMajnNhL2Vyz6r1nw32KnLxbiaG8S2puatB/1aD+a0n60 pZo7Us09qObdqObBlKOEfsr8WPqmP2x3IuK8rg+xqOv/f/TiP/fHT76DR9ClnkKop0iohWXUnjy1 pza1pw61py61px61p4raU5/a04Da05Dasx61pxG1pzG1pwnarR4x/Xz1Cpavc/U88s3PI1Yc89RP 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 cCOHW17zIW7L6mEv5D0Lx7fJzbN22Ra0UXFw/arTkw/677BJnV++UNJhzTkL3xGW9y4bzNzWUV6e GWdvGnTvTqf4wePyjy/eFdVv/eWWdzWvrqpJnyvRWjrthwz2nf+dVW8vvbkxs3bIo1czNxSW2faF 26sODz+ReWz1r/m1tnnHbJYRwV/If3IofZdfu9OhJhohTUwfd/fO+knRbOHgksCOy/IGXvTJyRIc P071fZLIRxlvezOxR8NDl5qlXalwVU/R1oiJuDD4CCH/A8O3W4oNCmVuZHN0cmVhbQ1lbmRvYmoN MTAxIDAgb2JqDTw8L0JpdHNQZXJDb21wb25lbnQgOC9Db2xvclNwYWNlL0RldmljZUdyYXkvRmls dGVyL0ZsYXRlRGVjb2RlL0hlaWdodCAxMzMvSW50ZXJwb2xhdGUgZmFsc2UvTGVuZ3RoIDU0NjYv TWF0dGVbMCAwIDBdL1N1YnR5cGUvSW1hZ2UvVHlwZS9YT2JqZWN0L1dpZHRoIDM0Mj4+c3RyZWFt DQp4nO1dCXgUxbYuSAIEyCpZZpAk7BAEAsPy0ACRRCIyAwZIwIhsQquoKAaDXsUMCLKIGlCBVgQf ovcG2ZzIFRVEUS9qGgREEK5cQE0wciVRUISn9puepedUdVVND0yH8Dm/3+eXqapz6vRPTy3nnKpB KIQQQgghhBBCCCGEEEIIIYQQgoTuJQBpddFjQhT+eWVeXfRad4hMkaRjMsBh6W3je310+Kherj96 jUSojyBEoURB6KoU5BjfufEYvFLW4KTRnZocjrEDOyKU6nAc+cnh+Lcsb3N8KMsHHI4FyGJ054Yj 0/HgRi2pxrNaWn7QeielYzcKrVZrhNEmGAeLpTftqY6VdTG65yH/ZXLqxupMo00wDDkz/0N5oJ8f fe5aI3tNslh2/uyHVFmuqXzIYmlopB2GIfJNyvMceqDTFAP7nPyOX0ZVzO2OUMeShugxw788QUWB 3W7/iniULAP7a9ZNOqufVOdgJEldMzc7bogz0CZj0NbSDz7Iuij/IheLZuto1J0SRZE2aXqwsiH6 rI1xNhmGJvAhnjeun2Hvkoy9anNigLMqVvnjDTqtbzqGmY0zyjDUEavXvgD7OVMOepqQ6PljTflv FF6HlzYwzCrD4DCe1SlohngSdrOlgNHyth1aVncvuAJZtRrP6qBZu0Efv0lvsEfvmPd+IFk9N84Q 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 BPADwOoX/tqGWNWLQFhd+qen5ZX4Q8d1CsBqJTfAkI3Q9V7/JuIknYWA8KTIr1pyGpb5RoAFKDQE 8IGlmj5SwHZGWV5Wo4T6YwB/VWCs7hteeHNCHj3bJifrfIhVfUhqhrF64Uzu3VdHU39x7+mB+71z 1dIr9XcO6wozehPJ5ifpl/gjtKrH5942lz/SVs+RtDQZv2FZ/q7reGoGZnfvhUjn7q9jG69ACChB xDOaTwjULZaaq7aBVhuCBmRmzwqivhj1uOEf6om7vlQdIZAwaw5YHbZarcpJrS6OJ1Cu1bp1j3qM +mTgdyj8VdGDlsT0vegGHge86XLbeqUguQvKq6TQSsFycwMUW4+j1vUImfZB+QPIQwA0HLYrWeOd 7cwLXUIAaOzc/qc/6e8nsU4WB/XXu/4iKOGmm38jsnM0Q+CgIyvRX5b32ELrqYuC51yAWE4e2dxa Xp6bYOVf7xsCA5Z8ZHdllY8hctKVfNCrhWWhHKCLRCInGpgccMp5CCGEEEIIlxn/D6SexgINCmVu ZHN0cmVhbQ1lbmRvYmoNMTAyIDAgb2JqDTw8L0JpdHNQZXJDb21wb25lbnQgOC9Db2xvclNwYWNl L0RldmljZVJHQi9GaWx0ZXIvRENURGVjb2RlL0hlaWdodCAxMzMvSW50ZXJwb2xhdGUgdHJ1ZS9M ZW5ndGggMTAwNDQvU01hc2sgMTAxIDAgUi9TdWJ0eXBlL0ltYWdlL1R5cGUvWE9iamVjdC9XaWR0 aCAzNDI+PnN0cmVhbQ0K/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQN DAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwL DBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy MjL/wAARCACFAVYDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QA tRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkK FhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJ ipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx 8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcF BAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygp KjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJma oqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oA DAMBAAIRAxEAPwD5/ooooAKKKKACiuk8MeDr3xRBey2bqzWyg+RGN8z5IGQg52jPJ/8Ar42IPhNr 32h49RudN02NWxunu0csOeQsZb9cdaqMZS+FXE5Jbs4Oiu+T4Zulozza3pr3DfKsSSSAJ/tFvLIY f7PHXrxSXfwr1FJMWGraXfJlR8k3lOc9cCTaOPrVuhVSu4v7iFVg9mcFRW3qXg/xDpFtJc32kXMd tG+xpwu+PP8AvLkEcdc4rErJq25pcKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAorvPDfw6XUIo77WtTSxsD/BGpaZznlQCABx/Fyv1IIrtLfwF4IECqLO8uSP+Wr32 0t7kBcCsp1oQ0kznq4qlS0m7Hh9FeyXHgvwhczGxs9LvEnYZMov8+Wo5LHKEYx615TrVkmm65f2U TM0UE7xxsxyWUMQCeB1GOwqoVIzV4l0q0Kq5obFGiiirNQooooAKKKKACiiigAoooAyQKALNjp93 qdyttZQNPO2MInU5IH8yP516RoHgLTtGg+2+KI2nvAcpp6uBGn/XRlOT2+UY6cntWxonha08DRfa ZJzNrEkOJWxhbbJztX/axtyT0PAqtc6jZwWsusauxNpGSsNspw1zJ/dHoB3Pb8hXrYXAwVL6xiNI 9u5x1a8pS9nT3NN7+5lsJpLcWulaSnMjqghh7AcKPmPQdzXK3Hi/w3buF3anqLA/MyBYY8Y/hJyx 9OQK4zXPEV74hufOvipCfLBGg2pAmSdqgfzPPFZNZVMxn8NFcsfI0jho7y1Z358b6G1wT/Ytwlsv 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 igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACu28Eato1lbXmn3jyRTalF5IlONkciu rRsT2U8qfTGeh44mpIJRDOkjRJKFOSkmdrfXBBqoTcJKUd0JpNWZ6K/mQztDMrRyoxVlI5BrV13T bfxjpqXFq0EWuRg+ckoGLr5TyhY4DnjIPXqOevMaL4hh1KNbTVbSXZCFSK7tFLyoCQqqyk/OOw78 +mANe3to7meWPStXsrzyiQwLm3fjGfllCnvX01TFYTMaSjVfLNdTz1SqUJXgro88u9L1Cwd0vLG5 tmTG5ZoWQrnpnI460iaZfSeQVtJts+TEzIQrgHBIJ4wD1PQV6vFqHiC3i+zrdjys8xm8jKn8N2Ks /b9ciQSzazY6dG52GX7ZHGeecfIc9v0ry55dGP8Ay9jY6VXk/ss5jwRpcnh69fVtasfJMJBhinYq 8p2t8mzrgkoSWxwCOckVpS3b6bb3HizUcGZpGazjfrPcHkNjuqk5P4DvVLVdc07SUS7VJ9ZnlY7J 5VZLYkdTk/M5z249emM8XqfiC/1m+a71FxcNsaOON87IVOcBFB+UDOR+uan6xTw9N06Du3u/8gUJ TkpT6GbLI00ryucu7FmOOpNNoorzToCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAAHByOtFFFABRRRQAZOMZ49KKKK ACiiigAooooAKKKKACiiigAooooAKKKKAP/ZDQplbmRzdHJlYW0NZW5kb2JqDTEwMyAwIG9iag08 PC9CaXRzUGVyQ29tcG9uZW50IDgvQ29sb3JTcGFjZS9EZXZpY2VSR0IvRmlsdGVyL0RDVERlY29k ZS9IZWlnaHQgNjQvSW50ZXJwb2xhdGUgdHJ1ZS9MZW5ndGggMzY3OC9TdWJ0eXBlL0ltYWdlL1R5 cGUvWE9iamVjdC9XaWR0aCAyNTY+PnN0cmVhbQ0K/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAgG BgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgy PC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy MjIyMjIyMjIyMjIyMjIyMjL/wAARCABAAQADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAA AAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEI I0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlq c3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW 19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL /8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLR ChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOE hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn 6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3+imySLFGzuwVVGSScAVxMvi7UfEVy9t4Ot4ZY4JT Fc6hdqfJUjH+rwfnPOfTH1ppNgdXqGrafpMXm6he29qhBIM0gTOOuM9a5VvHd5qkhj8NeHry/Vgf Lu5v3NuTg/xEc/h19atWngKwNwt5rdxPrd4pBSS9IZYj1wijAAz/AEq94k1tND05YrVFk1G5Pk2V uvV5D04/ujqT6CqXL01AwNB8TeJ7jxsNB1e20zatp9onNmrkwscYViWIzz+RFd9WD4X0OfSNOL30 5udTum828uGwS74AwOB8oAAA9q3qUmm9ACiiipAKKKKACiiigAooooAKKKKACiua1vx74d8PyeTe 6gpuOnkQgySA+6rnH41QufFHia+jkOheE5wAQFl1KQQfX5Cc4981Sg2B2lFef3E/xScAw2fh2LHX 95I2an8P+LNabxU3hvxHY2sN4bfz4pbRyyMB1znkU3Tdr3A7mikHIzS1ABRRRQAUUUUAFFFFABRR RQAUUUUAYHiLw8PEv2Wyu5caYrGS4iUkNKwxsXP93qT7ge9bcEEdvCsMUapGgwqqMACpKztZ1qx0 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 IHRydWUvTGVuZ3RoIDY5NjgvU3VidHlwZS9JbWFnZS9UeXBlL1hPYmplY3QvV2lkdGggMjU1Pj5z dHJlYW0NCv/Y/+AAEEpGSUYAAQEBAGAAYAAA/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMP FB0aHx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEc ITIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgA uQD/AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMC BAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYn KCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeY mZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5 +v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwAB AgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpD REVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ip qrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMR AD8A7ylpopakoWoLiLeNw6ips0hpAc5fWpZxNGMODzXRaNOrg3GcALub2PeqN1Fg7wOD1ql5txFF JFBKEST72VyfwrzcXhXN80Ny4sj1nUBPcO2fpWBcTgsmxSwDfMV7d+avS6eZDy+fUmopLBxbiNVA jU/eXqTXKsPKnurl3GFzbMJNpAJDLnuDmtuGRLoRbem0k+3T/wCvWFJaSiCR+WxGn14JFX/Dm52l ifIOAQD6V0YO8avyCpaSb7HSWwYOqsvA7irwtVbleDUUCjrV+PivaS0OW5YgQqgWrSrUUZ4qdaAJ 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 fA0KZW5kc3RyZWFtDWVuZG9iag0yIDAgb2JqDTw8L0xlbmd0aCAzNDkyL1N1YnR5cGUvWE1ML1R5 cGUvTWV0YWRhdGE+PnN0cmVhbQ0KPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhp SHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4 bXB0az0iQWRvYmUgWE1QIENvcmUgNS4yLWMwMDEgNjMuMTM5NDM5LCAyMDEwLzA5LzI3LTEzOjM3 OjI2ICAgICAgICAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5 OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91 dD0iIgogICAgICAgICAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEu MS8iPgogICAgICAgICA8ZGM6Zm9ybWF0PmFwcGxpY2F0aW9uL3BkZjwvZGM6Zm9ybWF0PgogICAg ICAgICA8ZGM6Y3JlYXRvcj4KICAgICAgICAgICAgPHJkZjpTZXE+CiAgICAgICAgICAgICAgIDxy ZGY6bGk+aHA8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L2RjOmNy ZWF0b3I+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJk ZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFw LzEuMC8iPgogICAgICAgICA8eG1wOkNyZWF0ZURhdGU+MjAxNC0wNi0wOFQxNzo1OTo0My0wNzow MDwveG1wOkNyZWF0ZURhdGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+TWljcm9zb2Z0wq4g T2ZmaWNlIFdvcmQgMjAwNzwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOk1vZGlmeURh dGU+MjAxNC0wNi0wOVQxODoyMTowNS0wNzowMDwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4 bXA6TWV0YWRhdGFEYXRlPjIwMTQtMDYtMDlUMTg6MjE6MDUtMDc6MDA8L3htcDpNZXRhZGF0YURh dGU+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjph Ym91dD0iIgogICAgICAgICAgICB4bWxuczpwZGY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGRmLzEu My8iPgogICAgICAgICA8cGRmOlByb2R1Y2VyPk1pY3Jvc29mdMKuIE9mZmljZSBXb3JkIDIwMDc8 L3BkZjpQcm9kdWNlcj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgICAgIDxyZGY6RGVzY3Jp cHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRv YmUuY29tL3hhcC8xLjAvbW0vIj4KICAgICAgICAgPHhtcE1NOkRvY3VtZW50SUQ+dXVpZDo0N2Vl MzE5OS00MWNiLTRhMGUtYmQ0Ny1hNTA3MzFhMDhiM2E8L3htcE1NOkRvY3VtZW50SUQ+CiAgICAg ICAgIDx4bXBNTTpJbnN0YW5jZUlEPnV1aWQ6ZmU3Mjc1MzgtZjdhZS00OGE2LTkyYzEtMWY1ZmNm YTZmMGM5PC94bXBNTTpJbnN0YW5jZUlEPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9y ZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg ICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8+DQplbmRzdHJlYW0NZW5kb2JqDTMg MCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0ZpcnN0IDUvTGVuZ3RoIDUwL04gMS9UeXBlL09i alN0bT4+c3RyZWFtDQpo3rIwUTBQsLHRd84vzStRMNT3zkwpjrawAAoGxeqHVBak6gckpqcW29kB BBgA6VEL7g0KZW5kc3RyZWFtDWVuZG9iag00IDAgb2JqDTw8L0ZpbHRlci9GbGF0ZURlY29kZS9G aXJzdCA1L0xlbmd0aCAxMjQvTiAxL1R5cGUvT2JqU3RtPj5zdHJlYW0NCmjesjBVMFCwsdF3LC3J yC/SyCjQ1HcuSk0syczPc0ksSdVwsTIyMDQxMDOwMDQ3tTQx1jUwVzcwUIeqAurwzUwuyi/OTytZ p+CflpaZnKoQnl+UomBkYGCuqe+bn4JqiqWhhZGhgSnclICi/JTS5FT8xtjZAQQYAMvbMQUNCmVu ZHN0cmVhbQ1lbmRvYmoNNSAwIG9iag08PC9EZWNvZGVQYXJtczw8L0NvbHVtbnMgNS9QcmVkaWN0 b3IgMTI+Pi9GaWx0ZXIvRmxhdGVEZWNvZGUvSURbPDZBQkMzNDk0MTAzODFDNDBBMUE2MEY2NjZG QjcyNEY2PjxCMUE5QkQ1MDFCNUY1RTQ3OTgxQTlEMUJCMkRBNzc0RD5dL0luZm8gODUgMCBSL0xl bmd0aCA1NS9Sb290IDg3IDAgUi9TaXplIDg2L1R5cGUvWFJlZi9XWzEgMyAxXT4+c3RyZWFtDQpo 3mJiAAEmRqaY1QxMDAysM0Ek30cQydAHIhlvAmX/TUgFizAwjpLDh2TaDCIZGQACDAB70AezDQpl bmRzdHJlYW0NZW5kb2JqDXN0YXJ0eHJlZg0KMTE2DQolJUVPRg0K ------=_20140610034758_14713-- From brolley@redhat.com Tue Jun 10 14:04:05 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 0C1107F4E for ; Tue, 10 Jun 2014 14:04:05 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id C32428F8049 for ; Tue, 10 Jun 2014 12:04:01 -0700 (PDT) X-ASG-Debug-ID: 1402427037-04cb6c78c6161d50001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id VBkiRlDWBcZKSK4H for ; Tue, 10 Jun 2014 12:03:57 -0700 (PDT) X-Barracuda-Envelope-From: brolley@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s5AJ3vTq024425 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Tue, 10 Jun 2014 15:03:57 -0400 Received: from [10.10.62.14] (vpn-62-14.rdu2.redhat.com [10.10.62.14]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5AJ3udL021216; Tue, 10 Jun 2014 15:03:56 -0400 Message-ID: <5397573A.90102@redhat.com> Date: Tue, 10 Jun 2014 15:06:34 -0400 From: Dave Brolley User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0 MIME-Version: 1.0 To: Nathan Scott CC: pcp@oss.sgi.com Subject: Re: Secure sockets builds have high daemon memory utilisation References: <1896810420.23212457.1402370819966.JavaMail.zimbra@redhat.com> X-ASG-Orig-Subj: Re: Secure sockets builds have high daemon memory utilisation In-Reply-To: <1896810420.23212457.1402370819966.JavaMail.zimbra@redhat.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.22 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1402427037 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On 06/09/2014 11:26 PM, Nathan Scott wrote: > [ ... ] given that most people wont be > using encryption/non-af_unix authentication at all. I wonder > if we could get crafty and load the secure sockets support in > an "on-demand" fashion? > > We do have both forms of networking still there in the code of > course - could we find a way to bootstrap in the security libs > only if they are actually needed? (i.e. run time linking, via > dlopen(3) trickery, instead of compile time linking). > For the NSS/NSPR/SSL layers, I think that the main complication, for servers, is that, at the time a socket is created for accepting a connection, it isn't known whether that socket will need to be secure. However, it may end up being just an extra step in the connection process at the end of the day. We already have connections which are upgradable from insecure to secure from a protocol point of view. It could be as easy as upgrading a native socket to NSPR before doing that. The API https://developer.mozilla.org/en-US/docs/PR_ImportTCPSocket seems to be available for this purpose, although there are some caveats expressed there. Despite those caveats, they (Mozilla) seem to be promoting the use of this function. If we were to go this route, then the native socket handle and APIs would be used for sockets on both the client and server side under normal circumstances. When an operation requiring a secure socket is attempted, then libpcp could automatically import the handle into NSPR. I believe that this could be done automagically without the knowledge of the caller by simply adding the NSPR bits to the handle's entry in the IPC table. The caller would continue to use the same handle, but the operations would be automatically mapped to NSPR calls. I can see this potentially eliminating the current native/NSPR division in the IPC table. The dynamic loading NSPR/NSS/SSL libraries would be done the first time they are needed, if ever. Dave From brolley@redhat.com Tue Jun 10 14:16:55 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id BD3AC7F4E for ; Tue, 10 Jun 2014 14:16:55 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 72FF9304048 for ; Tue, 10 Jun 2014 12:16:55 -0700 (PDT) X-ASG-Debug-ID: 1402427810-04bdf056681682a0001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id lCoC9IlqolpOEWzh for ; Tue, 10 Jun 2014 12:16:50 -0700 (PDT) X-Barracuda-Envelope-From: brolley@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s5AJGoHA030024 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Tue, 10 Jun 2014 15:16:50 -0400 Received: from [10.10.62.14] (vpn-62-14.rdu2.redhat.com [10.10.62.14]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5AJGnpf004189 for ; Tue, 10 Jun 2014 15:16:50 -0400 Message-ID: <53975A40.3070604@redhat.com> Date: Tue, 10 Jun 2014 15:19:28 -0400 From: Dave Brolley User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0 MIME-Version: 1.0 To: pcp@oss.sgi.com Subject: Re: [pcp] Secure sockets builds have high daemon memory utilisation References: <1896810420.23212457.1402370819966.JavaMail.zimbra@redhat.com> <5397573A.90102@redhat.com> X-ASG-Orig-Subj: Re: [pcp] Secure sockets builds have high daemon memory utilisation In-Reply-To: <5397573A.90102@redhat.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1402427810 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On 06/10/2014 03:06 PM, Dave Brolley wrote: > On 06/09/2014 11:26 PM, Nathan Scott wrote: >> [ ... ] given that most people wont be >> using encryption/non-af_unix authentication at all. I wonder >> if we could get crafty and load the secure sockets support in >> an "on-demand" fashion? >> >> We do have both forms of networking still there in the code of >> course - could we find a way to bootstrap in the security libs >> only if they are actually needed? (i.e. run time linking, via >> dlopen(3) trickery, instead of compile time linking). >> > I just had the thought that, unless we get into the game of unloading these libraries when no longer in use (i.e. dlcose(3)), then after the first secure connection is made, the RSS will be permanently increased anyway. Dave From fche@redhat.com Tue Jun 10 14:43:32 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id BD8D27F51 for ; Tue, 10 Jun 2014 14:43:32 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 23D27AC00A for ; Tue, 10 Jun 2014 12:43:31 -0700 (PDT) X-ASG-Debug-ID: 1402429410-04cbb0752416ed30001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id N7hg2nGIIasXn80Y for ; Tue, 10 Jun 2014 12:43:31 -0700 (PDT) X-Barracuda-Envelope-From: fche@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx02.intmail.prod.int.phx2.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s5AJhTrZ030181 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Tue, 10 Jun 2014 15:43:29 -0400 Received: from fche.csb (vpn-59-213.rdu2.redhat.com [10.10.59.213]) by int-mx02.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id s5AJhSLW019030; Tue, 10 Jun 2014 15:43:28 -0400 Received: by fche.csb (Postfix, from userid 2569) id E12E458543; Tue, 10 Jun 2014 15:43:27 -0400 (EDT) To: Nathan Scott Cc: Martin Spier , pcp@oss.sgi.com, Amer Ather , Coburn Watson Subject: Re: PCP web client on different domain References: <1717887824.20744079.1401960303984.JavaMail.zimbra@redhat.com> <20140605115447.GC11474@redhat.com> <1295610433.21793898.1402006255252.JavaMail.zimbra@redhat.com> <878364148.23139544.1402347444401.JavaMail.zimbra@redhat.com> X-ASG-Orig-Subj: Re: PCP web client on different domain From: fche@redhat.com (Frank Ch. Eigler) Date: Tue, 10 Jun 2014 15:43:27 -0400 In-Reply-To: <878364148.23139544.1402347444401.JavaMail.zimbra@redhat.com> (Nathan Scott's message of "Mon, 9 Jun 2014 16:57:24 -0400 (EDT)") Message-ID: User-Agent: Gnus/5.1008 (Gnus v5.10.8) Emacs/21.4 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Scanned-By: MIMEDefang 2.67 on 10.5.11.12 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1402429411 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 nathans wrote: > [...] > Sounds good - could you send through a tested variant of that approach, > Frank, or shall I code it up today? Please see the pcpfans.git fche/pmwebd-acao branch for two related & tested commits. - FChE From fche@redhat.com Tue Jun 10 15:08:03 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 81B2D7F51 for ; Tue, 10 Jun 2014 15:08:03 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 63E218F804B for ; Tue, 10 Jun 2014 13:08:00 -0700 (PDT) X-ASG-Debug-ID: 1402430879-04cbb00a0100870001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id SYELFhkwF3JkTrou for ; Tue, 10 Jun 2014 13:07:59 -0700 (PDT) X-Barracuda-Envelope-From: fche@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s5AK7xUN018614 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Tue, 10 Jun 2014 16:07:59 -0400 Received: from fche.csb (vpn-59-213.rdu2.redhat.com [10.10.59.213]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5AK7wFB019149; Tue, 10 Jun 2014 16:07:59 -0400 Received: by fche.csb (Postfix, from userid 2569) id 4B16358543; Tue, 10 Jun 2014 16:07:58 -0400 (EDT) To: Dave Brolley Cc: Nathan Scott , pcp@oss.sgi.com Subject: Re: Secure sockets builds have high daemon memory utilisation References: <1896810420.23212457.1402370819966.JavaMail.zimbra@redhat.com> <5397573A.90102@redhat.com> X-ASG-Orig-Subj: Re: Secure sockets builds have high daemon memory utilisation From: fche@redhat.com (Frank Ch. Eigler) Date: Tue, 10 Jun 2014 16:07:58 -0400 In-Reply-To: <5397573A.90102@redhat.com> (Dave Brolley's message of "Tue, 10 Jun 2014 15:06:34 -0400") Message-ID: User-Agent: Gnus/5.1008 (Gnus v5.10.8) Emacs/21.4 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Scanned-By: MIMEDefang 2.68 on 10.5.11.26 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1402430879 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Hi - Short of that level of complexity, we could look in more detail where/when that extra 8-10MB of memory consumption is coming from (assuming the RSS numbers are accurate & relevant). We may be calling NSS_Init too early or too often; NSS internal tables might be too large by default (see NSS_Initialize NSS_INIT_OPTIMIZESPACE). - FChE From nscott@redhat.com Tue Jun 10 20:25:20 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 1CBBF7F62 for ; Tue, 10 Jun 2014 20:25:20 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 93288304048 for ; Tue, 10 Jun 2014 18:25:16 -0700 (PDT) X-ASG-Debug-ID: 1402449908-04bdf056691748e0001-S8gJnT Received: from mx6-phx2.redhat.com (mx6-phx2.redhat.com [209.132.183.39]) by cuda.sgi.com with ESMTP id GSpyPIL9BzvdU837 for ; Tue, 10 Jun 2014 18:25:09 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.39 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx6-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5B1P8nX020416; Tue, 10 Jun 2014 21:25:08 -0400 Date: Tue, 10 Jun 2014 21:25:08 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: Stan Cox Cc: PCP Message-ID: <1098064384.23885191.1402449908671.JavaMail.zimbra@redhat.com> In-Reply-To: <539623F5.1050902@redhat.com> References: <539623F5.1050902@redhat.com> Subject: Re: [pcp] [PATCH] Improve pmatop value fitting MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [pcp] [PATCH] Improve pmatop value fitting Content-Type: multipart/mixed; boundary="----=_Part_23885189_275868684.1402449908665" X-Originating-IP: [10.5.82.12] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: Improve pmatop value fitting Thread-Index: SWzcRIDrAqExslMQsWeWUZIQZ32now== X-Barracuda-Connect: mx6-phx2.redhat.com[209.132.183.39] X-Barracuda-Start-Time: 1402449909 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.03 X-Barracuda-Spam-Status: No, SCORE=0.03 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA_TO_FROM_DOMAIN_MATCH, THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6544 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 0.01 BSF_SC0_SA_TO_FROM_DOMAIN_MATCH Sender Domain Matches Recipient Domain ------=_Part_23885189_275868684.1402449908665 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Hi Stan, ----- Original Message ----- > Despite the size of the patch it is conceptually simple. The atop > command by and large does not depend on anything but simple use of > printf formatting. Instead it rolls its own so it can more predictably > do tight fitting of values into a maximum sized field. This patch does > something similar. It adds a routine valstr that fits values for > situations like: > 7.37682e+06, length 7, = 7376820 > 7.37682e+06, length 5, = 738e4 > 3.66211e-05, length 7, = 3.66e-5 > It also adds memstr which does something similar, but specifically for > memory units: > 1.23457e+08, length 4 = 117M > Then it changes every use of put_value to use one of the above. > > git://sourceware.org/git/pcpfans.git > scox/dev 55de60ddb953a42f55f27212bf4c66f6f50ae269 > Stan Cox (1): Improve pmatop value fitting. > I've pulled this into dev since it appears to fix some things. I'm seeing all sorts of issues in pmatop though, list below (shall I go the bugzilla route or is the email summary at the end here OK?) Coding stuff first - I noticed dup'd imports on the "re" module, & when looking closer noticed it was reimplementing the string rstrip method? So, dropped both imports and used that instead. BTW, if/when pmatop meets up with recent pcp.pmcc module advances, which would be lovely, the tight formatting code you've newly added here could live as MetricGroupPrinter class helper methods, perhaps (along side LIBPCP.pmNumberStr style formatting as another alternate helper, maybe) - that'= would help other py tools with these strict formatting needs you've found here. I ran pmatop and atop side-by-side to try to get a feel for where things are up to (see attached). I thought I might have a very new or old atop version since there were so many differences, but the one I have is ~5 years old and http://www.atoptool.nl/screenshots.php suggests it hasn't really changed much in the intervening time. Anyway, here's the list of differences and buglets I noticed. All can be seen in the attachment - 80x25 terminal sizes - atop above, pmatop below, and no command line arguments used. - terminal displaying light-on-dark everywhere instead of just the two header lines (curses lib issue?) - hostname not displayed (pmcd.hostname would be a good source) - sample date/time and interval reporting quite different - all of the CPU metrics values are different (comparing to other tools suggests pmatop is misreporting - dual CPU host here FWIW) - formatting: the "csw" (context switch) field is too wide - the csw reported value is significantly different - formatting: the "intr" (interrupts) field is too wide - the #exit field is missing? (not sure what this is - processes that exited in the sample interval, I'd guess?) - the per-cpu stats for the second CPU come-and-go - for some samples the line is there for cpu#2, in the attached sample its missing - MEM: atop makes different cut-over decisions in terms of the M -> G transition? - PAG column not there in default atop display? has this come in via the 'm' key (memory display) accidentally or old atop version here? - NET: the network metric reported values all differ significantly. - DSK: left/right alignment for disk names - and in the bottom-half, per-process section: - col width differences on SYSCPU - VGROW header offset oddity - RUID column is shorter, and mishandles usernames longer than width (causing offset wierdness for subsequent columns) - RUID left-aligned vs centre-aligned? - %CPU column grossly incorrect in pmatop (atop looks right) - which is a good thing, else pmatop would be consuming 66% ;) - we're reporting kernel threads where pmatop does not (or did they simply scroll off the bottom on atop display, due to %cpu values?) - we could make a pmdaproc filter for this, if we need it? (lemme know, I'm hacking in that PMDA at the moment). I've confirmed all of the above are not simple sampling differences, FWIW - values are consistently different, where reported above. That's the static stuff. As discussed on IRC the other day, when we start resizing the window, pmatop short-comings relative to atop are quickly evident as well (atop does a fabulous job of resize handling as discussed, seamless adjustments - feeding the new size back into each and every column right away - neat stuff). There's also all the interactive options (disk, net, etc) to change the displayed metrics, but we already knew those had not been tackled at this stage (I think?). Stepping back, we can probably learn a few things about our strategy for building new PCP tools via mimicry - it may be a better plan (esp now that the python APIs are maturing) to start with the existing C code and convert it to python (license permitting, of course), rather than starting with a blank canvas and building the tool from scratch. Maybe? Or - maybe we could use a guideline of "start afresh with new clean Python code, but use the C/Perl code of the existing code as a very direct reference"? Mainly for folks starting new tools I mean - like iostat (Hi Mark!). The atop/pmatop feature disparity was a fair bit larger than I realised, anyway, maybe its just a complex tool and will take us time to reach that sort of level. That said, I worry a bit that if we tell people "use the PCP version of atop" or similar not-quite-ready tools, it may leave a poor first impression of PCP in general. So lets keep going with these tools, moving 'em forward. The good news is the tools we're mimicking are only infrequently changing - so for us to reach feature parity should be eventually achievable, in general. cheers. -- Nathan ------=_Part_23885189_275868684.1402449908665 Content-Type: image/png; name=atop-vs-pmatop.png Content-Disposition: attachment; filename=atop-vs-pmatop.png Content-Transfer-Encoding: base64 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 ------=_Part_23885189_275868684.1402449908665-- From pcp-announce-bounces@oss.sgi.com Tue Jun 10 21:22:53 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from oss.sgi.com (localhost [IPv6:::1]) by oss.sgi.com (Postfix) with ESMTP id 3C1527F69; Tue, 10 Jun 2014 21:22:53 -0500 (CDT) X-Original-To: pcp-announce@oss.sgi.com Delivered-To: pcp-announce@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 5EEB37F62 for ; Tue, 10 Jun 2014 21:22:52 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 450318F8039 for ; Tue, 10 Jun 2014 19:22:49 -0700 (PDT) X-ASG-Debug-ID: 1402453367-04cbb00a040d8b0001-87ZIJf Received: from mx3-phx2.redhat.com (mx3-phx2.redhat.com [209.132.183.24]) by cuda.sgi.com with ESMTP id 0hbjvscnzx0iKP64 for ; Tue, 10 Jun 2014 19:22:48 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.24 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx3-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id s5B2Mler001051 for ; Tue, 10 Jun 2014 22:22:47 -0400 Date: Tue, 10 Jun 2014 22:22:47 -0400 (EDT) From: Nathan Scott To: pcp-announce Message-ID: <802387300.23892699.1402453367814.JavaMail.zimbra@redhat.com> In-Reply-To: <82349241.23889254.1402452023984.JavaMail.zimbra@redhat.com> MIME-Version: 1.0 X-ASG-Orig-Subj: RHEL7 released with PCP X-Originating-IP: [10.5.82.12] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: RHEL7 released with PCP Thread-Index: RStSxmGDnDi1MErXQQH+rNtVeniuhQ== X-Barracuda-Connect: mx3-phx2.redhat.com[209.132.183.24] X-Barracuda-Start-Time: 1402453368 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6545 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Subject: [pcp-announce] RHEL7 released with PCP X-BeenThere: pcp-announce@oss.sgi.com X-Mailman-Version: 2.1.14 Precedence: list Reply-To: Nathan Scott List-Id: pcp announcements List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: pcp-announce-bounces@oss.sgi.com Sender: pcp-announce-bounces@oss.sgi.com Hi all, I thought this milestone was worthy of a pcp-announce email... RHEL7 was released today, containing a version of PCP that is officially supported and maintained by Red Hat. PCP is even getting some mention in the occasional news report as a result too - an all round win for the project! (and hopefully in the long run for Red Hat as well!) http://www.infoworld.com/t/linux/keep-eye-these-5-new-features-in-rhel-7-244023 http://www.redhat.com/about/news/press-archive/2014/6/red-hat-unveils-rhel-7 Many thanks to the scores of people involved with making this happen - there's been alot of people acting behind the scenes too, whose names you'll not see on any mailing lists (testing folks, release folks, documentation folks, management folks... all contributing to PCP in various ways to reach this point). And, we're just getting started :) ... onward and upward! cheers. -- Nathan _______________________________________________ pcp-announce mailing list pcp-announce@oss.sgi.com http://oss.sgi.com/mailman/listinfo/pcp-announce From nscott@redhat.com Wed Jun 11 02:58:41 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 293667F66 for ; Wed, 11 Jun 2014 02:58:41 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 159F48F8035 for ; Wed, 11 Jun 2014 00:58:37 -0700 (PDT) X-ASG-Debug-ID: 1402473512-04cb6c78c317ae30001-S8gJnT Received: from mx5-phx2.redhat.com (mx5-phx2.redhat.com [209.132.183.37]) by cuda.sgi.com with ESMTP id LG8guaCG8TTpWGo9 for ; Wed, 11 Jun 2014 00:58:32 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.37 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx5-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5B7wVAC017925; Wed, 11 Jun 2014 03:58:31 -0400 Date: Wed, 11 Jun 2014 03:58:30 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: "Frank Ch. Eigler" , Martin Spier , Amer Ather , Coburn Watson Cc: pcp@oss.sgi.com Message-ID: <1678088280.23964559.1402473510747.JavaMail.zimbra@redhat.com> In-Reply-To: References: <1717887824.20744079.1401960303984.JavaMail.zimbra@redhat.com> <20140605115447.GC11474@redhat.com> <1295610433.21793898.1402006255252.JavaMail.zimbra@redhat.com> <878364148.23139544.1402347444401.JavaMail.zimbra@redhat.com> Subject: Re: PCP web client on different domain MIME-Version: 1.0 X-ASG-Orig-Subj: Re: PCP web client on different domain Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.12] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: PCP web client on different domain Thread-Index: wkIAAe18t5SBs6FV8IaI1aqSsQm/Bw== X-Barracuda-Connect: mx5-phx2.redhat.com[209.132.183.37] X-Barracuda-Start-Time: 1402473512 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.03 X-Barracuda-Spam-Status: No, SCORE=0.03 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA_TO_FROM_DOMAIN_MATCH, THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6551 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 0.01 BSF_SC0_SA_TO_FROM_DOMAIN_MATCH Sender Domain Matches Recipient Domain ----- Original Message ----- > > [...] > > Sounds good - could you send through a tested variant of that approach, > > Frank, or shall I code it up today? > > Please see the pcpfans.git fche/pmwebd-acao branch for two related & > tested commits. Looks OK. I've added regression test qa/780 and made some small error handling consistency improvements (please review? thanks) - all merged in now. Martin, if you could try out the git://git.performancecopilot.org/pcp dev branch pmwebd with your code, that'd be great - thanks. cheers. -- Nathan From nscott@redhat.com Wed Jun 11 02:59:17 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 85B657F66 for ; Wed, 11 Jun 2014 02:59:17 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 71DD88F8037 for ; Wed, 11 Jun 2014 00:59:17 -0700 (PDT) X-ASG-Debug-ID: 1402473555-04cb6c78c317aea0001-S8gJnT Received: from mx4-phx2.redhat.com (mx4-phx2.redhat.com [209.132.183.25]) by cuda.sgi.com with ESMTP id WMGZN8OdX4bUiKlS for ; Wed, 11 Jun 2014 00:59:15 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.25 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx4-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id s5B7xEcc016348 for ; Wed, 11 Jun 2014 03:59:15 -0400 Date: Wed, 11 Jun 2014 03:59:14 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: pcp@oss.sgi.com Message-ID: <1337134222.23964797.1402473554769.JavaMail.zimbra@redhat.com> In-Reply-To: <1380092949.23964674.1402473541804.JavaMail.zimbra@redhat.com> Subject: pcp updates: scox + fche merges, qa MIME-Version: 1.0 X-ASG-Orig-Subj: pcp updates: scox + fche merges, qa Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.12] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: pcp updates: scox + fche merges, qa Thread-Index: hhL6QORnTdNnfjauMML8MnTaJdUQew== X-Barracuda-Connect: mx4-phx2.redhat.com[209.132.183.25] X-Barracuda-Start-Time: 1402473555 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6551 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Changes committed to git://git.performancecopilot.org/pcp.git dev man/man3/pmwebapi.3 | 7 qa/660 | 6 qa/722.out | 784 ++++++++++---------- qa/780 | 64 + qa/780.out | 8 qa/group | 1 src/pmatop/pmatop.py | 328 ++++++-- src/pmwebapi/jsdemos/blinkenlights/blinkenlights.js | 3 src/pmwebapi/pmwebapi.c | 62 + 9 files changed, 754 insertions(+), 509 deletions(-) commit c298b0a7c3215887153106099423875727c72f88 Merge: d533a2d a5005c0 Author: Nathan Scott Date: Wed Jun 11 14:43:06 2014 +1000 Merge branch 'fche-merge' into dev commit a5005c065bc6ebba9522420791deb6f9b0bc3d2d Author: Nathan Scott Date: Wed Jun 11 14:40:19 2014 +1000 Trivial pmwebd related code/test cleanups Fix test qa/660 notrun check, which was looking for pmproxy instead of pmwebd by accident. Make pmwebd use consistent handling of JSON request header addition errors, making the code logic simpler to follow in some places and audit/verification of the memory cleanup on these recently tweaked paths a bit simpler. commit c23e4d83247acdcce33ab3b730041eaab91c81f8 Author: Nathan Scott Date: Wed Jun 11 14:32:14 2014 +1000 Sanity test for pmwebd Access-Control-Allow-Origin header Adds qa/780 which exercises the presence of the pmwebd change adding the Access-Control-Allow-Origin header to JSON requests. Also adds in sanity testing of pmwebd -p option handling in the process. commit ebff872ca6b4fa8db7f5fd9e1352caaae888c1bc Merge: cadab85 9b0742d Author: Nathan Scott Date: Wed Jun 11 13:31:45 2014 +1000 Merge branch 'fche/pmwebd-acao' of ../pcpfans into fche-merge commit d533a2d0a0f04e4ecc302c0a461b605f299100a4 Merge: cadab85 37b4066 Author: Nathan Scott Date: Wed Jun 11 11:43:59 2014 +1000 Merge branch 'scox/dev' of ../pcpfans into scox-merge commit 37b4066c3324d3d3e610b50b706b5c500d77c56a Author: Nathan Scott Date: Wed Jun 11 11:34:25 2014 +1000 Tweak pmatop to use str.rstrip instead of the re module Allows us to cull any+all imports of the "re" python module. commit 9b0742d61fe476e4c9de6cd5a200ad7606de92e3 Author: Frank Ch. Eigler Date: Tue Jun 10 15:41:08 2014 -0400 pmwebapi.3: document new ACAO: * header commit f413607f9ac9bb5ccef5ede558c31014ea4633d8 Author: Frank Ch. Eigler Date: Tue Jun 10 15:33:56 2014 -0400 pmwebd: add CORS Access-Control-Allow-Origin: * to JSON response headers This is necessary to allow webapps not served by pmwebd's fileserver to have problem-free cross-origin data access to the /pmapi/* goodies. (Despite the name, it does not function as any sort of access control, in that the pmapi data is produced. It only lets the web browsers consume the data with less hassle.) As a bonus, fix blinkenlights.js to be flexible with pmwebd port numbering, which helps testing. To check the CORS functionality, one would hand-edit that file to hardcode some remote pmwebd server and confirm that the web browser is willing & able to connect. commit 0d23b1853c1232b93db3cc16f6fe7f90f48c3b66 Author: Stan Cox Date: Tue Jun 10 12:26:45 2014 -0400 Improve pmatop value fitting. * pmatop (_AtopPrint::valstr): Replaces put_value. * qa/722.out: Use it. commit 55de60ddb953a42f55f27212bf4c66f6f50ae269 Author: Stan Cox Date: Mon Jun 9 17:02:00 2014 -0400 Improve pmatop value fitting. * pmatop (_AtopPrint::valstr): Replaces put_value with functionality that fits a value to a maximum sized field. (memstr): New. * qa/722.out: Use it. From nscott@redhat.com Wed Jun 11 03:04:02 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 2F1C57F66 for ; Wed, 11 Jun 2014 03:04:02 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 1C5288F8037 for ; Wed, 11 Jun 2014 01:03:59 -0700 (PDT) X-ASG-Debug-ID: 1402473837-04cb6c78c417b180001-S8gJnT Received: from mx5-phx2.redhat.com (mx5-phx2.redhat.com [209.132.183.37]) by cuda.sgi.com with ESMTP id uhzrzEbN3C2X1vNn for ; Wed, 11 Jun 2014 01:03:57 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.37 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx5-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5B83vqh019002; Wed, 11 Jun 2014 04:03:57 -0400 Date: Wed, 11 Jun 2014 04:03:57 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: Dave Brolley Cc: pcp@oss.sgi.com Message-ID: <1919582989.23966133.1402473837122.JavaMail.zimbra@redhat.com> In-Reply-To: <5397573A.90102@redhat.com> References: <1896810420.23212457.1402370819966.JavaMail.zimbra@redhat.com> <5397573A.90102@redhat.com> Subject: Re: Secure sockets builds have high daemon memory utilisation MIME-Version: 1.0 X-ASG-Orig-Subj: Re: Secure sockets builds have high daemon memory utilisation Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.12] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: Secure sockets builds have high daemon memory utilisation Thread-Index: BLE6h/9P2t3Xl432N+DHXqbkMsCb6g== X-Barracuda-Connect: mx5-phx2.redhat.com[209.132.183.37] X-Barracuda-Start-Time: 1402473837 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.03 X-Barracuda-Spam-Status: No, SCORE=0.03 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA_TO_FROM_DOMAIN_MATCH, THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6551 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 0.01 BSF_SC0_SA_TO_FROM_DOMAIN_MATCH Sender Domain Matches Recipient Domain Hi Dave, ----- Original Message ----- > > [ ... ] > For the NSS/NSPR/SSL layers, I think that the main complication, for > servers, is that, at the time a socket is created for accepting a > connection, it isn't known whether that socket will need to be secure. Yep. > However, it may end up being just an extra step in the connection > process at the end of the day. We already have connections which are > upgradable from insecure to secure from a protocol point of view. It > could be as easy as upgrading a native socket to NSPR before doing that. > > The API > > https://developer.mozilla.org/en-US/docs/PR_ImportTCPSocket > > seems to be available for this purpose, although there are some caveats > expressed there. Despite those caveats, they (Mozilla) seem to be > promoting the use of this function. Sounds worth a closer look. The other bonus there is both code paths get more exercised (instead of a build time choice excluding one). > If we were to go this route, then the native socket handle and APIs > would be used for sockets on both the client and server side under > normal circumstances. When an operation requiring a secure socket is > attempted, then libpcp could automatically import the handle into NSPR. > I believe that this could be done automagically without the knowledge of > the caller by simply adding the NSPR bits to the handle's entry in the > IPC table. The caller would continue to use the same handle, but the > operations would be automatically mapped to NSPR calls. I can see this > potentially eliminating the current native/NSPR division in the IPC table. *nod* ... it also paves the way for alternate SSL implementations to be optionally plugged in (ISTR some people expressing reservations re use of NSS way back now - but tis a vague memory at this point). > > The dynamic loading NSPR/NSS/SSL libraries would be done the first time > they are needed, if ever. > *nod*, sounds good in theory. ;) > I just had the thought that, unless we get into the game of unloading > these libraries when no longer in use (i.e. dlcose(3)), then after the > first secure connection is made, the RSS will be permanently increased > anyway. That's OK, the typical case is the one to optimise for - i.e. "no secure connections requested, ever". Definitely we need to look more into the root cause of the blowout as Frank suggested (though from a quick hopeful peek, that NSS space optimise flag appears to get set by default for the API calls we're making - both client & server cases). I'll keep digging & send out some more details. cheers. -- Nathan From mspier@netflix.com Wed Jun 11 14:50:24 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HTML_MESSAGE,T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 5C8B77F3F for ; Wed, 11 Jun 2014 14:50:24 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 4FC0F304048 for ; Wed, 11 Jun 2014 12:50:24 -0700 (PDT) X-ASG-Debug-ID: 1402516218-04cb6c78c619a3d0001-S8gJnT Received: from mail-wi0-f176.google.com (mail-wi0-f176.google.com [209.85.212.176]) by cuda.sgi.com with ESMTP id sqqV2Iuxk8FBqX3M (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Wed, 11 Jun 2014 12:50:19 -0700 (PDT) X-Barracuda-Envelope-From: mspier@netflix.com X-Barracuda-Apparent-Source-IP: 209.85.212.176 Received: by mail-wi0-f176.google.com with SMTP id n3so6061917wiv.9 for ; Wed, 11 Jun 2014 12:50:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=netflix.com; s=google; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=LX2dy6ye4/qbodNrjspl5vZsxNnXbuJLTOGwBiCC4QI=; b=hVTOSGRGZIWuqmlokivcYJnlHWsgz1Xak9ruzxQ0BFaAA5YNxKaRDjcPjzdT9gfwbk tWt1SstlXKgpNWpbweVAC3z79lZ58hYKtFf+QgwrJs+qxqSVwdXRushOe/pg4zsx8zOf k8rJ0+t7bl3E9YjI1sCjgjNWHF652CjviXU/s= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:date :message-id:subject:from:to:cc:content-type; bh=LX2dy6ye4/qbodNrjspl5vZsxNnXbuJLTOGwBiCC4QI=; b=bZM3l9t5xQthyvkFUQpxUgdFIy80UVOVbzUndeQbY0trDJwr/W837eBDPdjXJ2j7j4 y8kwLBPWcYte4Zqu60e062eZBNj7gy0O4PBsdgOxr0HZtB2Y/TZuswQ0HUcAJ++KIGQx uNlletGF2La7TuudFskcshgZRV8QexWAZob5lBtyD/K87Y4SeT7h3bSk9RjCcU4qyrgM lobD6yrVfCZi6+TnMTErjOq7YqduPlOe8zwuIIZe0+7QXxHF4CE6Olo6PX0WzfuVagLO TPu9dkyOWlcDVXNFoMiIPDUaj5C0kiZ4NSUSArM05m9hNpfmAthql8HyqpZP2YF7IxHG AIRw== X-Gm-Message-State: ALoCoQnq9kfoFKSMK1YLXuRbb1himhxLSnYcIg7Qk6hfzsBS3rc7wqCU6Q1l6NcV5KLvToYVqVQU MIME-Version: 1.0 X-Received: by 10.180.72.176 with SMTP id e16mr48394wiv.44.1402516217595; Wed, 11 Jun 2014 12:50:17 -0700 (PDT) Received: by 10.180.104.68 with HTTP; Wed, 11 Jun 2014 12:50:17 -0700 (PDT) In-Reply-To: <1678088280.23964559.1402473510747.JavaMail.zimbra@redhat.com> References: <1717887824.20744079.1401960303984.JavaMail.zimbra@redhat.com> <20140605115447.GC11474@redhat.com> <1295610433.21793898.1402006255252.JavaMail.zimbra@redhat.com> <878364148.23139544.1402347444401.JavaMail.zimbra@redhat.com> <1678088280.23964559.1402473510747.JavaMail.zimbra@redhat.com> Date: Wed, 11 Jun 2014 12:50:17 -0700 Message-ID: Subject: Re: PCP web client on different domain From: Martin Spier X-ASG-Orig-Subj: Re: PCP web client on different domain To: Nathan Scott Cc: "Frank Ch. Eigler" , Amer Ather , Coburn Watson , pcp@oss.sgi.com Content-Type: multipart/alternative; boundary=f46d043c0792f12ed204fb94c099 X-Barracuda-Connect: mail-wi0-f176.google.com[209.85.212.176] X-Barracuda-Start-Time: 1402516218 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6568 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message --f46d043c0792f12ed204fb94c099 Content-Type: text/plain; charset=UTF-8 Sure! We'll use it in the next test deployment. On Wed, Jun 11, 2014 at 12:58 AM, Nathan Scott wrote: > > > ----- Original Message ----- > > > [...] > > > Sounds good - could you send through a tested variant of that approach, > > > Frank, or shall I code it up today? > > > > Please see the pcpfans.git fche/pmwebd-acao branch for two related & > > tested commits. > > Looks OK. I've added regression test qa/780 and made some small error > handling consistency improvements (please review? thanks) - all merged > in now. > > Martin, if you could try out the git://git.performancecopilot.org/pcp > dev branch pmwebd with your code, that'd be great - thanks. > > cheers. > > -- > Nathan > --f46d043c0792f12ed204fb94c099 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Sure! We'll use it in the next test deployment.
<= div class=3D"gmail_extra">

On Wed, Jun 11= , 2014 at 12:58 AM, Nathan Scott <nathans@redhat.com> wrote= :


----- Original Message -----
> > [...]
> > Sounds good - could you send through a tested variant of that app= roach,
> > Frank, or shall I code it up today?
>
> Please see the pcpfans.git fche/pmwebd-acao branch for two related &am= p;
> tested commits.

Looks OK. =C2=A0I've added regression test qa/780 and made = some small error
handling consistency improvements (please review? thanks) - all merged
in now.

Martin, if you could try out the git://git.performancecopilot.org/pcp
dev branch pmwebd with your code, that'd be great - thanks.

cheers.

--
Nathan

--f46d043c0792f12ed204fb94c099-- From nscott@redhat.com Thu Jun 12 21:48:35 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id C2B457F3F for ; Thu, 12 Jun 2014 21:48:35 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 869E98F8049 for ; Thu, 12 Jun 2014 19:48:32 -0700 (PDT) X-ASG-Debug-ID: 1402627700-04cbb00a047da10001-S8gJnT Received: from mx6-phx2.redhat.com (mx6-phx2.redhat.com [209.132.183.39]) by cuda.sgi.com with ESMTP id At0nKEPQLNQ1opXK for ; Thu, 12 Jun 2014 19:48:20 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.39 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx6-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5D2mK88014580; Thu, 12 Jun 2014 22:48:20 -0400 Date: Thu, 12 Jun 2014 22:48:20 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: Dave Brolley Cc: pcp@oss.sgi.com Message-ID: <18804700.25421398.1402627700096.JavaMail.zimbra@redhat.com> In-Reply-To: <1919582989.23966133.1402473837122.JavaMail.zimbra@redhat.com> References: <1896810420.23212457.1402370819966.JavaMail.zimbra@redhat.com> <5397573A.90102@redhat.com> <1919582989.23966133.1402473837122.JavaMail.zimbra@redhat.com> Subject: Re: [pcp] Secure sockets builds have high daemon memory utilisation MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [pcp] Secure sockets builds have high daemon memory utilisation Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.12] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: Secure sockets builds have high daemon memory utilisation Thread-Index: BLE6h/9P2t3Xl432N+DHXqbkMsCb6pXEkC4t X-Barracuda-Connect: mx6-phx2.redhat.com[209.132.183.39] X-Barracuda-Start-Time: 1402627700 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.03 X-Barracuda-Spam-Status: No, SCORE=0.03 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA_TO_FROM_DOMAIN_MATCH, THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6610 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 0.01 BSF_SC0_SA_TO_FROM_DOMAIN_MATCH Sender Domain Matches Recipient Domain ----- Original Message ----- > ----- Original Message ----- > > > [ ... ] > > For the NSS/NSPR/SSL layers, I think that the main complication, for > > servers, is that, at the time a socket is created for accepting a > > connection, it isn't known whether that socket will need to be secure. > > Yep. > [...] > I'll keep digging & send out some more details. More details: Calling __pmInitSecureSockets() is the major issue, though unfortunately its not just one of the setup calls therein that blows us out. However, even without this call, we still incur >100% increase in RSS (of ~1.6M). In absolute terms, is getting more in the ballpark of something we could consider 'OK-ish' (maybe; lets see what others think I guess - I'd still be disappointed with that level of bloat, but maybe I can get over that). Within __pmInitSecureSockets, the two biggest problems are initialising NSS - note this one affects all the clients too :( - and the SSL session cache setup. The former is an immediate bump up to the ~5/6MB RSS mark. The latter sends us to ~10/11MB. NSS init first - looked into the space optimize flag Frank mentioned; it appears to be set by default for both the client & server init calls we made (goodness, I wonder what not setting that flag would end up doing!). Digging through the mozilla hg tree, I'm not seeing any other techniques we can use to quickly tame it - it does a ton of allocations left, right and centre - avoidance on our part seems the best strategy? Secondly, the SSL session cache setup - we call that with default args; the first arg (we give zero, which means "use defaults") gets translated within NSS SSL code to mean "give me a session cache with 10000 entries, via DEF_SID_CACHE_ENTRIES (ssl/sslsnce.c). Experimenting with this, we can use a mimimal setting of "1" here, but that only brings us down to a ~8MB RSS size (SID_CACHE_ENTRIES_PER_SET and SID_ALIGNMENT come into play for all requested settings). Looking in this source file, there's several more caches in there that we allocate at this time - there's a certificate cache, key cache, and a server name cache. Making our code not call in here at all by default seems like a good option. ;) The fact that client tools were being bloated out too was lost on me before doing this digging (not to mention that their startup times are being permanently burdened with full NSS/SSL setup - so CPU & IO costs in there too we could defer) ... guess we should keep that in mind when tackling the server side (your magic-fd-upgrade mechanism, and a secure ops vectore vs native ops vector kind-of-approach could suit both). cheers. ps: stap-server has all these issues too I'd imagine - does that run in secure mode, always? I guess it does, since thats kinda the point? It would be delightful if we could get wins there, as a result of looking into it for PCP. (Ah! - the cache setting size could help? /me fires up a stap-serverd .... hohum, ~10MB RSS, sounds familiar! yes, the SID cache size setting will reduce that - finding APIs to reach nss/lib/ssl/sslsnce.c:InitCache will give further control over cert and server name cache sizes too). -- Nathan From mgoodwin@redhat.com Fri Jun 13 01:28:07 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id C78A67F53 for ; Fri, 13 Jun 2014 01:28:07 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 95DB8304053 for ; Thu, 12 Jun 2014 23:28:07 -0700 (PDT) X-ASG-Debug-ID: 1402640882-04bdf056681f73c0001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id gPmN6Ifkz3KfBOLL for ; Thu, 12 Jun 2014 23:28:03 -0700 (PDT) X-Barracuda-Envelope-From: mgoodwin@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s5D6S2fO000573 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Fri, 13 Jun 2014 02:28:02 -0400 Received: from [10.64.50.181] (vpn1-50-181.bne.redhat.com [10.64.50.181]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5D6S03a014120 for ; Fri, 13 Jun 2014 02:28:02 -0400 Message-ID: <539A99F0.6030808@redhat.com> Date: Fri, 13 Jun 2014 16:28:00 +1000 From: Mark Goodwin User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0 MIME-Version: 1.0 To: pcp@oss.sgi.com Subject: pcp updates: fix pmchart CPU views Content-Type: text/plain; charset=ISO-8859-1; format=flowed X-ASG-Orig-Subj: pcp updates: fix pmchart CPU views Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1402640883 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Changes committed to git://git.performancecopilot.org/markgw/pcp/pcp.git dev commit 37f48043a79bb716dab62d7687aaff70376e5198 Author: Mark Goodwin Date: Fri Jun 13 16:11:38 2014 +1000 Remove Guest from the standard CPU view since User (kernel.all.cpu.user) includes Guest. Create a new view called vCPU that includes Guest and vUSER, where vUSER is kernel.all.cpu.vuser which does not include Guest. modified: src/pmchart/views/CPU new file: src/pmchart/views/vCPU From brolley@redhat.com Fri Jun 13 15:21:21 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HTML_MESSAGE autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 463E07F53 for ; Fri, 13 Jun 2014 15:21:21 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 2450F304053 for ; Fri, 13 Jun 2014 13:21:18 -0700 (PDT) X-ASG-Debug-ID: 1402690873-04cbb00a04aee10001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id KRX61TRHx8kiBJgc for ; Fri, 13 Jun 2014 13:21:13 -0700 (PDT) X-Barracuda-Envelope-From: brolley@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s5DKLDeA027485 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Fri, 13 Jun 2014 16:21:13 -0400 Received: from [10.10.53.159] (vpn-53-159.rdu2.redhat.com [10.10.53.159]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5DKLBk1019401; Fri, 13 Jun 2014 16:21:12 -0400 Message-ID: <539B5DDA.7050407@redhat.com> Date: Fri, 13 Jun 2014 16:23:54 -0400 From: Dave Brolley User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0 MIME-Version: 1.0 To: Nathan Scott CC: pcp@oss.sgi.com Subject: Re: [pcp] Secure sockets builds have high daemon memory utilisation References: <1896810420.23212457.1402370819966.JavaMail.zimbra@redhat.com> <5397573A.90102@redhat.com> <1919582989.23966133.1402473837122.JavaMail.zimbra@redhat.com> <18804700.25421398.1402627700096.JavaMail.zimbra@redhat.com> X-ASG-Orig-Subj: Re: [pcp] Secure sockets builds have high daemon memory utilisation In-Reply-To: <18804700.25421398.1402627700096.JavaMail.zimbra@redhat.com> Content-Type: multipart/alternative; boundary="------------050808090907050102020503" X-Scanned-By: MIMEDefang 2.68 on 10.5.11.27 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1402690873 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 This is a multi-part message in MIME format. --------------050808090907050102020503 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 06/12/2014 10:48 PM, Nathan Scott wrote: > > ----- Original Message ----- >> ----- Original Message ----- >>>> [ ... ] >>> For the NSS/NSPR/SSL layers, I think that the main complication, for >>> servers, is that, at the time a socket is created for accepting a >>> connection, it isn't known whether that socket will need to be secure. >> Yep. >> [...] >> I'll keep digging & send out some more details. > More details: > > Calling __pmInitSecureSockets() is the major issue, though unfortunately > its not just one of the setup calls therein that blows us out. However, > even without this call, we still incur >100% increase in RSS (of ~1.6M). > In absolute terms, is getting more in the ballpark of something we could > consider 'OK-ish' (maybe; lets see what others think I guess - I'd still > be disappointed with that level of bloat, but maybe I can get over that). > > Within __pmInitSecureSockets, the two biggest problems are initialising > NSS - note this one affects all the clients too :( - and the SSL session > cache setup. The former is an immediate bump up to the ~5/6MB RSS mark. > The latter sends us to ~10/11MB. > > NSS init first - looked into the space optimize flag Frank mentioned; it > appears to be set by default for both the client & server init calls we > made (goodness, I wonder what not setting that flag would end up doing!). > Digging through the mozilla hg tree, I'm not seeing any other techniques > we can use to quickly tame it - it does a ton of allocations left, right > and centre - avoidance on our part seems the best strategy? > > Secondly, the SSL session cache setup - we call that with default args; > the first arg (we give zero, which means "use defaults") gets translated > within NSS SSL code to mean "give me a session cache with 10000 entries, > via DEF_SID_CACHE_ENTRIES (ssl/sslsnce.c). Experimenting with this, we > can use a mimimal setting of "1" here, but that only brings us down to > a ~8MB RSS size (SID_CACHE_ENTRIES_PER_SET and SID_ALIGNMENT come into > play for all requested settings). Looking in this source file, there's > several more caches in there that we allocate at this time - there's > a certificate cache, key cache, and a server name cache. Making our > code not call in here at all by default seems like a good option. ;) While we can certainly try to avoid these calls until absolutely necessary, they are unfortunately both required for a server accepting secure connections. NSS_init() obviously, but unfortunately, also SSL_ConfigServerSessionIDCache(). See the following from the MDN site: https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/SSL_functions/sslfnc.html#__SSL_ConfigServerSessionIDCache_ "If you are writing an application that will use SSL sockets that handshake as a server, you must call SSL_ConfigServerSessionIDCache to configure additional session caches for server sessions." So I think the best we can do on this one is to find out what the minimum cache size that we can get away with is. You're research seems to indicate that 1 entry works, but there could possibly be performance implications (the usual purpose of a cache). I'm still puzzled a bit by the urgency of this, even for teensy tiny boxen. The cache size reduction will help, but once a secure connection is made, then the NSS_init() and SSL_ConfigServerSessionIDCache() calls must be made and the RSS will grow at least temporarily. > > The fact that client tools were being bloated out too was lost on me > before doing this digging (not to mention that their startup times are > being permanently burdened with full NSS/SSL setup - so CPU & IO costs > in there too we could defer) ... guess we should keep that in mind when > tackling the server side (your magic-fd-upgrade mechanism, and a secure > ops vectore vs native ops vector kind-of-approach could suit both). *nod* > > cheers. > > ps: stap-server has all these issues too I'd imagine - does that run in > secure mode, always? I guess it does, since thats kinda the point? It > would be delightful if we could get wins there, as a result of looking > into it for PCP. > > (Ah! - the cache setting size could help? /me fires up a stap-serverd > .... hohum, ~10MB RSS, sounds familiar! yes, the SID cache size setting > will reduce that - finding APIs to reach nss/lib/ssl/sslsnce.c:InitCache > will give further control over cert and server name cache sizes too). Yeah, stap-serverd accepts only secure connections. There's probably no point to starting it without NSS, but the SSL cache size could probably be tweaked. Dave --------------050808090907050102020503 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 7bit On 06/12/2014 10:48 PM, Nathan Scott wrote:

----- Original Message -----
----- Original Message -----
[ ... ]
For the NSS/NSPR/SSL layers, I think that the main complication, for
servers, is that, at the time a socket is created for accepting a
connection, it isn't known whether that socket will need to be secure.
Yep.
[...]
I'll keep digging & send out some more details.
More details:

Calling __pmInitSecureSockets() is the major issue, though unfortunately
its not just one of the setup calls therein that blows us out.  However,
even without this call, we still incur >100% increase in RSS (of ~1.6M).
In absolute terms, is getting more in the ballpark of something we could
consider 'OK-ish' (maybe; lets see what others think I guess - I'd still
be disappointed with that level of bloat, but maybe I can get over that).

Within __pmInitSecureSockets, the two biggest problems are initialising
NSS - note this one affects all the clients too :( - and the SSL session
cache setup.  The former is an immediate bump up to the ~5/6MB RSS mark.
The latter sends us to ~10/11MB.

NSS init first - looked into the space optimize flag Frank mentioned; it
appears to be set by default for both the client & server init calls we
made (goodness, I wonder what not setting that flag would end up doing!).
Digging through the mozilla hg tree, I'm not seeing any other techniques
we can use to quickly tame it - it does a ton of allocations left, right
and centre - avoidance on our part seems the best strategy?

Secondly, the SSL session cache setup - we call that with default args;
the first arg (we give zero, which means "use defaults") gets translated
within NSS SSL code to mean "give me a session cache with 10000 entries,
via DEF_SID_CACHE_ENTRIES (ssl/sslsnce.c).  Experimenting with this, we
can use a mimimal setting of "1" here, but that only brings us down to
a ~8MB RSS size (SID_CACHE_ENTRIES_PER_SET and SID_ALIGNMENT come into
play for all requested settings).  Looking in this source file, there's
several more caches in there that we allocate at this time - there's
a certificate cache, key cache, and a server name cache.  Making our
code not call in here at all by default seems like a good option.  ;)
While we can certainly try to avoid these calls until absolutely necessary, they are unfortunately both required for a server accepting secure connections. NSS_init() obviously, but unfortunately, also SSL_ConfigServerSessionIDCache(). See the following from the MDN site:

https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/SSL_functions/sslfnc.html#__SSL_ConfigServerSessionIDCache_

"If you are writing an application that will use SSL sockets that handshake as a server, you must call SSL_ConfigServerSessionIDCache to configure additional session caches for server sessions."
So I think the best we can do on this one is to find out what the minimum cache size that we can get away with is. You're research seems to indicate that 1 entry works, but there could possibly be performance implications (the usual purpose of a cache).

I'm still puzzled a bit by the urgency of this, even for teensy tiny boxen. The cache size reduction will help, but once a secure connection is made, then the NSS_init() and SSL_ConfigServerSessionIDCache() calls must be made and the RSS will grow at least temporarily.


The fact that client tools were being bloated out too was lost on me
before doing this digging (not to mention that their startup times are
being permanently burdened with full NSS/SSL setup - so CPU & IO costs
in there too we could defer) ... guess we should keep that in mind when
tackling the server side (your magic-fd-upgrade mechanism, and a secure
ops vectore vs native ops vector kind-of-approach could suit both).
*nod*

cheers.

ps: stap-server has all these issues too I'd imagine - does that run in
secure mode, always?  I guess it does, since thats kinda the point?  It
would be delightful if we could get wins there, as a result of looking
into it for PCP.

(Ah! - the cache setting size could help?  /me fires up a stap-serverd
.... hohum, ~10MB RSS, sounds familiar!  yes, the SID cache size setting
will reduce that - finding APIs to reach nss/lib/ssl/sslsnce.c:InitCache
will give further control over cert and server name cache sizes too).
Yeah, stap-serverd accepts only secure connections. There's probably no point to starting it without NSS, but the SSL cache size could probably be tweaked.

Dave
--------------050808090907050102020503-- From nscott@redhat.com Fri Jun 13 20:54:08 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id C6B9A7F3F for ; Fri, 13 Jun 2014 20:54:07 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 4F617AC009 for ; Fri, 13 Jun 2014 18:54:04 -0700 (PDT) X-ASG-Debug-ID: 1402710839-04bdf056692281a0001-S8gJnT Received: from mx6-phx2.redhat.com (mx6-phx2.redhat.com [209.132.183.39]) by cuda.sgi.com with ESMTP id 5thTRu47RmjGINTz for ; Fri, 13 Jun 2014 18:54:00 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.39 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx6-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5E1rxI7013198; Fri, 13 Jun 2014 21:53:59 -0400 Date: Fri, 13 Jun 2014 21:53:59 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: Dave Brolley Cc: pcp@oss.sgi.com Message-ID: <1933771917.25933236.1402710839591.JavaMail.zimbra@redhat.com> In-Reply-To: <539B5DDA.7050407@redhat.com> References: <1896810420.23212457.1402370819966.JavaMail.zimbra@redhat.com> <5397573A.90102@redhat.com> <1919582989.23966133.1402473837122.JavaMail.zimbra@redhat.com> <18804700.25421398.1402627700096.JavaMail.zimbra@redhat.com> <539B5DDA.7050407@redhat.com> Subject: Re: [pcp] Secure sockets builds have high daemon memory utilisation MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [pcp] Secure sockets builds have high daemon memory utilisation Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: Secure sockets builds have high daemon memory utilisation Thread-Index: 99HRrIMWNLnBXLxnLpe7YunrBq2gLQ== X-Barracuda-Connect: mx6-phx2.redhat.com[209.132.183.39] X-Barracuda-Start-Time: 1402710839 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.03 X-Barracuda-Spam-Status: No, SCORE=0.03 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA_TO_FROM_DOMAIN_MATCH, THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6635 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 0.01 BSF_SC0_SA_TO_FROM_DOMAIN_MATCH Sender Domain Matches Recipient Domain Hi Dave, ----- Original Message ----- > [...] > So I think the best we can do on this one is to find out what the > minimum cache size that we can get away with is. You're research seems > to indicate that 1 entry works, but there could possibly be performance > implications (the usual purpose of a cache). Yep. 10,000 entries seems over the top for a perf tool ... we should pick a number that makes more sense (100 sessions?) and go with that. > I'm still puzzled a bit by the urgency of this, even for teensy tiny > boxen. The cache size reduction will help, [...] Oh, not super urgent (ie. we shouldn't hold up the WIP release for it); didn't mean to give that impression, but it needs to be tackled soonish since we caused this regression (& we know what it is). Mainly wanted to make sure its understood that it is indeed important to tackle - and to discuss *how* to tackle it (and, yeah, sooner the better I reckon). Memory footprint is also a metric people will use when considering PCP, and/or comparing to other similar tools. If we stack it up against the other things we're working on - this will improve things for practically every current PCP user and its clearly a regression... so while all the feature work is great, we cannot just be accepting of this kind of collateral damage from those features. It's a slippery slope toward mediocrity. > but once a secure connection is made, [...] > then the NSS_init() and SSL_ConfigServerSessionIDCache() calls > must be made and the RSS will grow at least temporarily. Yep - even growing permanently in this case is fine - we don't really need to focus on this aspect since the vast majority of installations make no encrypted connections at all. cheers. -- Nathan From nscott@redhat.com Sat Jun 14 18:53:47 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 5862A7F3F for ; Sat, 14 Jun 2014 18:53:47 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 2332B3040F0 for ; Sat, 14 Jun 2014 16:53:44 -0700 (PDT) X-ASG-Debug-ID: 1402790019-04cb6c78c6237ad0001-S8gJnT Received: from mx5-phx2.redhat.com (mx5-phx2.redhat.com [209.132.183.37]) by cuda.sgi.com with ESMTP id ABnhlxJgBPY2U13X for ; Sat, 14 Jun 2014 16:53:39 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.37 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx5-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5ENrd1v019276 for ; Sat, 14 Jun 2014 19:53:39 -0400 Date: Sat, 14 Jun 2014 19:53:38 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: pcp@oss.sgi.com Message-ID: <373622067.26050409.1402790018851.JavaMail.zimbra@redhat.com> Subject: List test message MIME-Version: 1.0 X-ASG-Orig-Subj: List test message Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: List test message Thread-Index: 2p/vQl32JS+9829ANUlaX73jMxVRLw== X-Barracuda-Connect: mx5-phx2.redhat.com[209.132.183.37] X-Barracuda-Start-Time: 1402790019 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6657 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Please ignore, just testing the mailer daemon. -- Nathan From kenj@internode.on.net Sun Jun 15 00:16:14 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 9A3CA7F3F for ; Sun, 15 Jun 2014 00:16:14 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 2DAD0AC00E for ; Sat, 14 Jun 2014 22:16:10 -0700 (PDT) X-ASG-Debug-ID: 1402809368-04cb6c78c323d290001-S8gJnT Received: from ipmail06.adl6.internode.on.net (ipmail06.adl6.internode.on.net [150.101.137.145]) by cuda.sgi.com with ESMTP id NynO8OjKtKHgLeQE for ; Sat, 14 Jun 2014 22:16:08 -0700 (PDT) X-Barracuda-Envelope-From: kenj@internode.on.net X-Barracuda-Apparent-Source-IP: 150.101.137.145 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Ai4SADMrnVN20Z/FPGdsb2JhbAANTcQ+gxIBgRkEAQEBATiEOAEBAQQ4TQQLGAklDwIyFAYNCAEBuDSfIxeOfYRDBLFt Received: from ppp118-209-159-197.lns20.mel6.internode.on.net (HELO [192.168.1.100]) ([118.209.159.197]) by ipmail06.adl6.internode.on.net with ESMTP; 15 Jun 2014 14:46:08 +0930 Message-ID: <539D2CC6.70607@internode.on.net> Date: Sun, 15 Jun 2014 15:19:02 +1000 From: Ken McDonell User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0 MIME-Version: 1.0 To: PCP Mailing List Subject: Re: [pcp] Secure sockets builds have high daemon memory utilisation References: <1896810420.23212457.1402370819966.JavaMail.zimbra@redhat.com> <5397573A.90102@redhat.com> <1919582989.23966133.1402473837122.JavaMail.zimbra@redhat.com> <18804700.25421398.1402627700096.JavaMail.zimbra@redhat.com> X-ASG-Orig-Subj: Re: [pcp] Secure sockets builds have high daemon memory utilisation In-Reply-To: <18804700.25421398.1402627700096.JavaMail.zimbra@redhat.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: ipmail06.adl6.internode.on.net[150.101.137.145] X-Barracuda-Start-Time: 1402809368 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6662 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- [trying again ... apologies of others are seeing this message repeated] Just getting back into the shallow end of the pool after returning from darkest Peru ... On 13/06/14 12:48, Nathan Scott wrote: > > >> ----- Original Message ----- >> ... > NSS init first - > ... - avoidance on our part seems the best strategy? > > Secondly, the SSL session cache setup - ... > Making our > code not call in here at all by default seems like a good option. The level of bloat here seems to be to be unjustified from any sort of cost-benefit analysis I can imagine ... PCP needs to be part of solving performance problems, not part of the problem. Even if the additional cost is high for the uncommon (today) case of using secure connections, we should concentrate on getting the common case back to as close as it was before the secure socket functionality was added. From wwwrun@oss.sgi.com Sun Jun 15 18:02:06 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HTML_MESSAGE,NO_RELAYS autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: by oss.sgi.com (Postfix, from userid 30) id E4FF27F58; Sun, 15 Jun 2014 18:02:06 -0500 (CDT) From: bugzilla-daemon@oss.sgi.com To: pcp@oss.sgi.com Subject: [Bug 1057] memory leak & increasing slowdown in pdubuf.c buf_pin / interp.c update_bounds Date: Sun, 15 Jun 2014 23:02:06 +0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Classification: Unclassified X-Bugzilla-Product: pcp X-Bugzilla-Component: pcp X-Bugzilla-Keywords: X-Bugzilla-Severity: major X-Bugzilla-Who: kenj@internode.on.net X-Bugzilla-Status: NEW X-Bugzilla-Priority: P5 X-Bugzilla-Assigned-To: pcp@kenj.com.au X-Bugzilla-Target-Milestone: --- X-Bugzilla-Changed-Fields: cc Message-ID: In-Reply-To: References: Content-Type: multipart/alternative; boundary="1402873326.DC66E43.3237"; charset="us-ascii" X-Bugzilla-URL: http://oss.sgi.com/bugzilla/ Auto-Submitted: auto-generated MIME-Version: 1.0 --1402873326.DC66E43.3237 Date: Sun, 15 Jun 2014 18:02:06 -0500 MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8" http://oss.sgi.com/bugzilla/show_bug.cgi?id=1057 Ken McDonell changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |kenj@internode.on.net --- Comment #1 from Ken McDonell --- Frank, With "some random pcp archive" and my latest interp.c I cannot reproduce this. My last line is pinned pdubuf[pincnt]: 0x1f2f000[1] 0x1f32000[1] 0x1f30000[1] 0x1f31000[1] which all looks sort of reasonable ... these are mostly short PDU buffers held in one-trip code, so not an obvious leak candidate. I am guessing it is the [4] buffers that don't look right in your case, so I'm afraid I'll need your archive, i.e. the "one available on request" ... 8^)> -- You are receiving this mail because: You are on the CC list for the bug. --1402873326.DC66E43.3237 Date: Sun, 15 Jun 2014 18:02:06 -0500 MIME-Version: 1.0 Content-Type: text/html; charset="UTF-8" changed bug 1057
What Removed Added
CC   kenj@internode.on.net

Comment # 1 on bug 1057 from
Frank,

With "some random pcp archive" and my latest interp.c I cannot reproduce this.

My last line is
pinned pdubuf[pincnt]: 0x1f2f000[1] 0x1f32000[1] 0x1f30000[1] 0x1f31000[1]
which all looks sort of reasonable ... these are mostly short PDU buffers held
in one-trip code, so not an obvious leak candidate.

I am guessing it is the [4] buffers that don't look right in your case, so I'm
afraid I'll need your archive, i.e. the "one available on request" ... 8^)>


You are receiving this mail because:
  • You are on the CC list for the bug.
--1402873326.DC66E43.3237-- From wwwrun@oss.sgi.com Sun Jun 15 20:01:48 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HTML_MESSAGE,NO_RELAYS autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: by oss.sgi.com (Postfix, from userid 30) id B829B7F50; Sun, 15 Jun 2014 20:01:48 -0500 (CDT) From: bugzilla-daemon@oss.sgi.com To: pcp@oss.sgi.com Subject: [Bug 1057] memory leak & increasing slowdown in pdubuf.c buf_pin / interp.c update_bounds Date: Mon, 16 Jun 2014 01:01:48 +0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Classification: Unclassified X-Bugzilla-Product: pcp X-Bugzilla-Component: pcp X-Bugzilla-Keywords: X-Bugzilla-Severity: major X-Bugzilla-Who: fche@redhat.com X-Bugzilla-Status: NEW X-Bugzilla-Priority: P5 X-Bugzilla-Assigned-To: pcp@kenj.com.au X-Bugzilla-Target-Milestone: --- X-Bugzilla-Changed-Fields: Message-ID: In-Reply-To: References: Content-Type: multipart/alternative; boundary="1402880508.2CdeEDB22.11756"; charset="us-ascii" X-Bugzilla-URL: http://oss.sgi.com/bugzilla/ Auto-Submitted: auto-generated MIME-Version: 1.0 --1402880508.2CdeEDB22.11756 Date: Sun, 15 Jun 2014 20:01:48 -0500 MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8" http://oss.sgi.com/bugzilla/show_bug.cgi?id=1057 --- Comment #2 from Frank Ch. Eigler --- Created attachment 317 --> http://oss.sgi.com/bugzilla/attachment.cgi?id=317&action=edit pmval.c patch for problem reproduction -- You are receiving this mail because: You are on the CC list for the bug. --1402880508.2CdeEDB22.11756 Date: Sun, 15 Jun 2014 20:01:48 -0500 MIME-Version: 1.0 Content-Type: text/html; charset="UTF-8"

Comment # 2 on bug 1057 from
Created attachment 317 [details]
pmval.c patch for problem reproduction


You are receiving this mail because:
  • You are on the CC list for the bug.
--1402880508.2CdeEDB22.11756-- From wwwrun@oss.sgi.com Sun Jun 15 20:03:13 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HTML_MESSAGE,NO_RELAYS autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: by oss.sgi.com (Postfix, from userid 30) id B9ED17F50; Sun, 15 Jun 2014 20:03:13 -0500 (CDT) From: bugzilla-daemon@oss.sgi.com To: pcp@oss.sgi.com Subject: [Bug 1057] memory leak & increasing slowdown in pdubuf.c buf_pin / interp.c update_bounds Date: Mon, 16 Jun 2014 01:03:13 +0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Classification: Unclassified X-Bugzilla-Product: pcp X-Bugzilla-Component: pcp X-Bugzilla-Keywords: X-Bugzilla-Severity: major X-Bugzilla-Who: fche@redhat.com X-Bugzilla-Status: NEW X-Bugzilla-Priority: P5 X-Bugzilla-Assigned-To: pcp@kenj.com.au X-Bugzilla-Target-Milestone: --- X-Bugzilla-Changed-Fields: Message-ID: In-Reply-To: References: Content-Type: multipart/alternative; boundary="1402880593.B52EDB2.11880"; charset="us-ascii" X-Bugzilla-URL: http://oss.sgi.com/bugzilla/ Auto-Submitted: auto-generated MIME-Version: 1.0 --1402880593.B52EDB2.11880 Date: Sun, 15 Jun 2014 20:03:13 -0500 MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8" http://oss.sgi.com/bugzilla/show_bug.cgi?id=1057 --- Comment #3 from Frank Ch. Eigler --- Created attachment 318 --> http://oss.sgi.com/bugzilla/attachment.cgi?id=318&action=edit bz2 tarball of example archive -- You are receiving this mail because: You are on the CC list for the bug. --1402880593.B52EDB2.11880 Date: Sun, 15 Jun 2014 20:03:13 -0500 MIME-Version: 1.0 Content-Type: text/html; charset="UTF-8"

Comment # 3 on bug 1057 from
Created attachment 318 [details]
bz2 tarball of example archive


You are receiving this mail because:
  • You are on the CC list for the bug.
--1402880593.B52EDB2.11880-- From wwwrun@oss.sgi.com Sun Jun 15 20:07:08 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HTML_MESSAGE,NO_RELAYS autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: by oss.sgi.com (Postfix, from userid 30) id 1E6C67F50; Sun, 15 Jun 2014 20:07:08 -0500 (CDT) From: bugzilla-daemon@oss.sgi.com To: pcp@oss.sgi.com Subject: [Bug 1057] memory leak & increasing slowdown in pdubuf.c buf_pin / interp.c update_bounds Date: Mon, 16 Jun 2014 01:07:07 +0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Classification: Unclassified X-Bugzilla-Product: pcp X-Bugzilla-Component: pcp X-Bugzilla-Keywords: X-Bugzilla-Severity: major X-Bugzilla-Who: fche@redhat.com X-Bugzilla-Status: NEW X-Bugzilla-Priority: P5 X-Bugzilla-Assigned-To: pcp@kenj.com.au X-Bugzilla-Target-Milestone: --- X-Bugzilla-Changed-Fields: Message-ID: In-Reply-To: References: Content-Type: multipart/alternative; boundary="1402880828.c288E1E82.12146"; charset="us-ascii" X-Bugzilla-URL: http://oss.sgi.com/bugzilla/ Auto-Submitted: auto-generated MIME-Version: 1.0 --1402880828.c288E1E82.12146 Date: Sun, 15 Jun 2014 20:07:08 -0500 MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8" http://oss.sgi.com/bugzilla/show_bug.cgi?id=1057 --- Comment #4 from Frank Ch. Eigler --- Problem reproduction recipe: extract tarball; apply pmval.c patch (just to see increasing pinned-pdubuf count after each reporting cycle). % gdb -args ./pmval -S '@Mon Jun 9 20:51:52.912 2014' -T 'Tue Jun 10 10:00:00' -t 333 -a archive-20140610.005058.meta (gdb) break pmval.c:1139 # the sleep(10) line (gdb) run [...gaze lovingly at the report...] Breakpoint 1, main (argc=, argv=) at pmval.c:1139 1139 sleep (10); // gdb breakpoint here & pdubufdump() (gdb) p pdubufdump() free pdubuf[size]: 0x650000[28672] 0x61e000[28672] 0x648000[28672] 0x638000[28672] 0x62b000[17408] 0x619000[17408] 0x626000[17408] pinned pdubuf[pincnt]: 0x640000[4] 0x630000[4] $1 = void (gdb) c Continuing. [...gaze lovingly at the report...] Breakpoint 1, main (argc=, argv=) at pmval.c:1139 1139 sleep (10); // gdb breakpoint here & pdubufdump() (gdb) p pdubufdump() free pdubuf[size]: 0x638000[28672] 0x61e000[28672] 0x660000[28672] 0x658000[28672] 0x62b000[17408] 0x619000[17408] 0x626000[17408] pinned pdubuf[pincnt]: 0x640000[4] 0x630000[4] 0x650000[4] 0x648000[4] $2 = void (gdb) c [...gaze lovingly at the report...] Breakpoint 1, main (argc=, argv=) at pmval.c:1139 1139 sleep (10); // gdb breakpoint here & pdubufdump() (gdb) p pdubufdump() free pdubuf[size]: 0x658000[28672] 0x61e000[28672] 0x670000[28672] 0x668000[28672] 0x62b000[17408] 0x619000[17408] 0x626000[17408] pinned pdubuf[pincnt]: 0x640000[4] 0x630000[4] 0x650000[4] 0x648000[4] 0x638000[4] 0x660000[4] Notice how new pinned pdubufs showed up each time. (Imagine the impact upon an program that rescans dozens of archives frequently.) This is with pcp 3.9.4 shared libraries on fedora19 x86-64, so long after your 3.9.0 interp.c changes. -- You are receiving this mail because: You are on the CC list for the bug. --1402880828.c288E1E82.12146 Date: Sun, 15 Jun 2014 20:07:08 -0500 MIME-Version: 1.0 Content-Type: text/html; charset="UTF-8"

Comment # 4 on bug 1057 from
Problem reproduction recipe: extract tarball; apply pmval.c patch
(just to see increasing pinned-pdubuf count after each reporting
cycle).

% gdb -args  ./pmval -S '@Mon Jun  9 20:51:52.912 2014' -T 'Tue Jun 10
10:00:00' -t 333 -a archive-20140610.005058.meta
(gdb) break pmval.c:1139  # the sleep(10) line
(gdb) run
[...gaze lovingly at the report...]
Breakpoint 1, main (argc=<optimized out>, argv=<optimized out>) at pmval.c:1139
1139        sleep (10); // gdb breakpoint here & pdubufdump()
(gdb) p pdubufdump()
   free pdubuf[size]: 0x650000[28672] 0x61e000[28672] 0x648000[28672]
0x638000[28672] 0x62b000[17408] 0x619000[17408] 0x626000[17408]
   pinned pdubuf[pincnt]: 0x640000[4] 0x630000[4]
$1 = void
(gdb) c
Continuing.
[...gaze lovingly at the report...]
Breakpoint 1, main (argc=<optimized out>, argv=<optimized out>) at pmval.c:1139
1139        sleep (10); // gdb breakpoint here & pdubufdump()
(gdb) p pdubufdump()
   free pdubuf[size]: 0x638000[28672] 0x61e000[28672] 0x660000[28672]
0x658000[28672] 0x62b000[17408] 0x619000[17408] 0x626000[17408]
   pinned pdubuf[pincnt]: 0x640000[4] 0x630000[4] 0x650000[4] 0x648000[4]
$2 = void
(gdb) c
[...gaze lovingly at the report...]
Breakpoint 1, main (argc=<optimized out>, argv=<optimized out>) at pmval.c:1139
1139        sleep (10); // gdb breakpoint here & pdubufdump()
(gdb) p pdubufdump()
   free pdubuf[size]: 0x658000[28672] 0x61e000[28672] 0x670000[28672]
0x668000[28672] 0x62b000[17408] 0x619000[17408] 0x626000[17408]
   pinned pdubuf[pincnt]: 0x640000[4] 0x630000[4] 0x650000[4] 0x648000[4]
0x638000[4] 0x660000[4]


Notice how new pinned pdubufs showed up each time.  (Imagine the impact upon
an program that rescans dozens of archives frequently.)

This is with pcp 3.9.4 shared libraries on fedora19 x86-64, so long after
your 3.9.0 interp.c changes.


You are receiving this mail because:
  • You are on the CC list for the bug.
--1402880828.c288E1E82.12146-- From nscott@redhat.com Sun Jun 15 22:53:03 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 3733B7F3F for ; Sun, 15 Jun 2014 22:53:03 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id ED4D68F81B4 for ; Sun, 15 Jun 2014 20:53:02 -0700 (PDT) X-ASG-Debug-ID: 1402890776-04bdf056662756e0001-S8gJnT Received: from mx3-phx2.redhat.com (mx3-phx2.redhat.com [209.132.183.24]) by cuda.sgi.com with ESMTP id A4FDkmGVUlF0ckld for ; Sun, 15 Jun 2014 20:52:57 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.24 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx3-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id s5G3quUp005007 for ; Sun, 15 Jun 2014 23:52:56 -0400 Date: Sun, 15 Jun 2014 23:52:56 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: pcp@oss.sgi.com Message-ID: <1273474952.26259390.1402890776376.JavaMail.zimbra@redhat.com> In-Reply-To: <913910800.26259295.1402890691886.JavaMail.zimbra@redhat.com> Subject: pcp updates: mgoodwin merge, qa MIME-Version: 1.0 X-ASG-Orig-Subj: pcp updates: mgoodwin merge, qa Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: pcp updates: mgoodwin merge, qa Thread-Index: iSPeAeReobaxVQn4i3jKJRmLAy4zuA== X-Barracuda-Connect: mx3-phx2.redhat.com[209.132.183.24] X-Barracuda-Start-Time: 1402890777 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6685 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Changes committed to git://git.performancecopilot.org/pcp.git dev qa/003 | 1 + src/pmchart/views/CPU | 1 - src/pmchart/views/GNUmakefile | 2 +- src/pmchart/views/vCPU | 12 ++++++++++++ src/pmdas/linux/help | 6 ++++++ src/pmdas/linux/pmda.c | 10 ++++++++++ src/pmdas/linux/proc_meminfo.c | 1 + src/pmdas/linux/proc_meminfo.h | 1 + src/pmdas/linux/root_linux | 1 + 9 files changed, 33 insertions(+), 2 deletions(-) commit 3c479d028f44dccfb0b19a394a0380e8e3f3393a Author: Nathan Scott Date: Sun Jun 15 14:47:12 2014 +1000 Update test filter in qa/003 for mem.util.available metric commit 06348afa59115570b44b02e1d7e961159299ae17 Author: Nathan Scott Date: Sun Jun 15 14:09:04 2014 +1000 Add new vCPU pmchart view into the installed set commit c796f4f535d24a573d7fa12f06e6a0ad0435253a Author: Mark Goodwin Date: Fri Jun 13 17:44:43 2014 +1000 Add mem.util.available. This is from /proc/meminfo in recent kernels (including RHEL7GA). It the amount of memory that is available for a new workload, without pushing the system into swap - estimated from MemFree, Active(file), Inactive(file), and SReclaimable, as well as the "low" watermarks from /proc/zoneinfo. See https://lkml.org/lkml/2013/11/7/264 for details. On downrev kernels, returns No Values Available. modified: src/pmdas/linux/help modified: src/pmdas/linux/pmda.c modified: src/pmdas/linux/proc_meminfo.c modified: src/pmdas/linux/proc_meminfo.h modified: src/pmdas/linux/root_linux commit 37f48043a79bb716dab62d7687aaff70376e5198 Author: Mark Goodwin Date: Fri Jun 13 16:11:38 2014 +1000 Remove Guest from the standard CPU view since User (kernel.all.cpu.user) includes Guest. Create a new view called vCPU that includes Guest and vUSER, where vUSER is kernel.all.cpu.vuser which does not include Guest. modified: src/pmchart/views/CPU new file: src/pmchart/views/vCPU From fche@redhat.com Mon Jun 16 09:36:06 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id B8D347F3F for ; Mon, 16 Jun 2014 09:36:06 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 7DC5F304062 for ; Mon, 16 Jun 2014 07:36:06 -0700 (PDT) X-ASG-Debug-ID: 1402929362-04cbb00a03115a00001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id smtgZhgaMajFAO4M for ; Mon, 16 Jun 2014 07:36:02 -0700 (PDT) X-Barracuda-Envelope-From: fche@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s5GEa0vE010903 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Mon, 16 Jun 2014 10:36:01 -0400 Received: from fche.csb (vpn-56-123.rdu2.redhat.com [10.10.56.123]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5GEa0ml004036; Mon, 16 Jun 2014 10:36:00 -0400 Received: by fche.csb (Postfix, from userid 2569) id B202258114; Mon, 16 Jun 2014 10:35:59 -0400 (EDT) To: Nathan Scott Cc: pcp@oss.sgi.com Subject: Re: Secure sockets builds have high daemon memory utilisation References: <1896810420.23212457.1402370819966.JavaMail.zimbra@redhat.com> <5397573A.90102@redhat.com> <1919582989.23966133.1402473837122.JavaMail.zimbra@redhat.com> <18804700.25421398.1402627700096.JavaMail.zimbra@redhat.com> <539B5DDA.7050407@redhat.com> <1933771917.25933236.1402710839591.JavaMail.zimbra@redhat.com> X-ASG-Orig-Subj: Re: Secure sockets builds have high daemon memory utilisation From: fche@redhat.com (Frank Ch. Eigler) Date: Mon, 16 Jun 2014 10:35:59 -0400 In-Reply-To: <1933771917.25933236.1402710839591.JavaMail.zimbra@redhat.com> (Nathan Scott's message of "Fri, 13 Jun 2014 21:53:59 -0400 (EDT)") Message-ID: User-Agent: Gnus/5.1008 (Gnus v5.10.8) Emacs/21.4 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1402929362 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 nathans wrote: > [...] Memory footprint is also a metric people will use when > considering PCP, and/or comparing to other similar tools. Which similar tools shall we use for competitive analysis purposes? - FChE From fche@redhat.com Mon Jun 16 16:43:08 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 6F87D29DF8 for ; Mon, 16 Jun 2014 16:43:08 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 436ED8F8033 for ; Mon, 16 Jun 2014 14:43:05 -0700 (PDT) X-ASG-Debug-ID: 1402954983-04bdf0566829daf0001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id YODMbByaak2ipWQs for ; Mon, 16 Jun 2014 14:43:04 -0700 (PDT) X-Barracuda-Envelope-From: fche@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s5GLh3JS027648 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Mon, 16 Jun 2014 17:43:03 -0400 Received: from fche.csb (vpn-56-123.rdu2.redhat.com [10.10.56.123]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5GLh3A7024911; Mon, 16 Jun 2014 17:43:03 -0400 Received: by fche.csb (Postfix, from userid 2569) id F1F1858114; Mon, 16 Jun 2014 17:43:01 -0400 (EDT) Date: Mon, 16 Jun 2014 17:43:01 -0400 From: "Frank Ch. Eigler" To: pcp developers Subject: pcp+graphite, take 2 Message-ID: <20140616214301.GB6693@redhat.com> X-ASG-Orig-Subj: pcp+graphite, take 2 Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4.2.2i X-Scanned-By: MIMEDefang 2.68 on 10.5.11.27 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1402954983 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Hi - Please see below for some more recent work on a web-gui for pcp. https://web.elastic.org/~fche/blog3/archive/2014/06/16/pcp-and-graphite-backwards - FChE From kenj@internode.on.net Mon Jun 16 18:23:44 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 4D4137F3F for ; Mon, 16 Jun 2014 18:23:44 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 2A725304043 for ; Mon, 16 Jun 2014 16:23:44 -0700 (PDT) X-ASG-Debug-ID: 1402961017-04bdf056682a0310001-S8gJnT Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id gG4FVRHTSi84jBkn for ; Mon, 16 Jun 2014 16:23:38 -0700 (PDT) X-Barracuda-Envelope-From: kenj@internode.on.net X-Barracuda-Apparent-Source-IP: 150.101.137.143 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: At4VAHASn1N20b6dPGdsb2JhbAANTRaDScN5AYEnBAEBAQE4hDgBAQEEOEARCxgJFg8JAwIBAgExFBMIAQGIS7AunnQXjn0WhC0EsW1a Received: from ppp118-209-190-157.lns20.mel6.internode.on.net (HELO [192.168.1.100]) ([118.209.190.157]) by ipmail05.adl6.internode.on.net with ESMTP; 17 Jun 2014 08:53:29 +0930 Message-ID: <539F7D13.8060407@internode.on.net> Date: Tue, 17 Jun 2014 09:26:11 +1000 From: Ken McDonell User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0 MIME-Version: 1.0 To: pcp@oss.sgi.com Subject: Re: [pcp] pcp+graphite, take 2 References: <20140616214301.GB6693@redhat.com> X-ASG-Orig-Subj: Re: [pcp] pcp+graphite, take 2 In-Reply-To: <20140616214301.GB6693@redhat.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Start-Time: 1402961017 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6706 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 17/06/14 07:43, Frank Ch. Eigler wrote: > Hi - > > Please see below for some more recent work on a web-gui for pcp. > > https://web.elastic.org/~fche/blog3/archive/2014/06/16/pcp-and-graphite-backwards Frank, Aside from advertising my bug (!) this looks really cool ... well done. On the instructions, I think you need "cd src; make" not "make pmwebd" ... the pmwebd make alone fails in an otherwise new and configured source tree. Also, in case pmwebd is already running (like me from a real PCP install), then something like "sudo /etc/init.d/pmwebd stop" is needed before you run the new shiny pmwebd. And the -A option appears to need a directory argument for a family of temporally related archives from the same host, like /var/log/pcp/pmlogger/$(hostname) ... PCP+Graphana works out of the box ... very impressive. For Graphite, I need to learn how to drive it, as the display shows nothing. Now back to http://oss.sgi.com/bugzilla/show_bug.cgi?id=1057 From fche@redhat.com Mon Jun 16 18:45:41 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id F06747F3F for ; Mon, 16 Jun 2014 18:45:41 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id D622B8F8050 for ; Mon, 16 Jun 2014 16:45:38 -0700 (PDT) X-ASG-Debug-ID: 1402962337-04bdf056682a0b80001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id s2LJabcB1AbKLQ5A for ; Mon, 16 Jun 2014 16:45:37 -0700 (PDT) X-Barracuda-Envelope-From: fche@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s5GNjXHh029399 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 16 Jun 2014 19:45:34 -0400 Received: from fche.csb (vpn-56-123.rdu2.redhat.com [10.10.56.123]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5GNjW9G007144; Mon, 16 Jun 2014 19:45:33 -0400 Received: by fche.csb (Postfix, from userid 2569) id 735BE58114; Mon, 16 Jun 2014 19:45:31 -0400 (EDT) To: Ken McDonell Cc: pcp@oss.sgi.com Subject: Re: pcp+graphite, take 2 References: <20140616214301.GB6693@redhat.com> <539F7D13.8060407@internode.on.net> X-ASG-Orig-Subj: Re: pcp+graphite, take 2 From: fche@redhat.com (Frank Ch. Eigler) Date: Mon, 16 Jun 2014 19:45:31 -0400 In-Reply-To: <539F7D13.8060407@internode.on.net> (Ken McDonell's message of "Tue, 17 Jun 2014 09:26:11 +1000") Message-ID: User-Agent: Gnus/5.1008 (Gnus v5.10.8) Emacs/21.4 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Scanned-By: MIMEDefang 2.68 on 10.5.11.27 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1402962337 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Hi, Ken - > Aside from advertising my bug (!) this looks really cool ... well done. Thanks! I thought the bug angle was neat because how clearly the pretty graphs showed the problem. :-) > On the instructions, I think you need "cd src; make" not "make pmwebd" > ... the pmwebd make alone fails in an otherwise new and configured > source tree. Yeah, those were meant as colloquial instructions. > [...] And the -A option appears to need a directory argument for a > family of temporally related archives from the same host, like > /var/log/pcp/pmlogger/$(hostname) ... Not necessarily just the same host. You can give it a parent directory, and it'll let you navigate to subdirectories=hosts of your choice and put them on graphs individually or together (to contrast/relate different hosts). Many of the graphite guis support wildcards, so * for the first component means "all archives". Once we have that partial-grand-unification widget that glues archives in a directory together, this will be even tighter. (A complication that code will need to consider is [1].) [1] https://bugzilla.redhat.com/show_bug.cgi?id=1109539 > [...] For Graphite, I need to learn how to drive it, as the display > shows nothing. You need to expand the graphite-namespaced metric tree under the "Graphite" icon on the left pane. You navigate down to metrics to toggle their inclusion on the "composer" window. Tweak the "date range" / "recent data" buttons on the top of the composer window to include the time range. > Now back to http://oss.sgi.com/bugzilla/show_bug.cgi?id=1057 Thanks! - FChE From nscott@redhat.com Tue Jun 17 03:32:14 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id E88E27F3F for ; Tue, 17 Jun 2014 03:32:14 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id C93EF304066 for ; Tue, 17 Jun 2014 01:32:11 -0700 (PDT) X-ASG-Debug-ID: 1402993924-04cbb00a0313fc80001-S8gJnT Received: from mx6-phx2.redhat.com (mx6-phx2.redhat.com [209.132.183.39]) by cuda.sgi.com with ESMTP id zA5xXiVJTIKvWWOh for ; Tue, 17 Jun 2014 01:32:04 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.39 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx6-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5H8W3Qp019276 for ; Tue, 17 Jun 2014 04:32:04 -0400 Date: Tue, 17 Jun 2014 04:32:03 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: pcp@oss.sgi.com Message-ID: <1433717649.26999704.1402993923855.JavaMail.zimbra@redhat.com> Subject: pcp updates: gnu/hurd port, release prep MIME-Version: 1.0 X-ASG-Orig-Subj: pcp updates: gnu/hurd port, release prep Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.12] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: pcp updates: gnu/hurd port, release prep Thread-Index: oGEq124bYziC3KONNBIkEoG8f1ZKFw== X-Barracuda-Connect: mx6-phx2.redhat.com[209.132.183.39] X-Barracuda-Start-Time: 1402993924 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6716 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Changes committed to git://git.performancecopilot.org/pcp.git dev CHANGELOG | 36 +++++++++++++++++++++++++++++++++++- build/rpm/fedora.spec | 7 ++++++- configure | 6 ++++++ configure.in | 5 +++++ debian/changelog | 5 +++-- debian/rules | 1 + src/include/builddefs.in | 2 +- src/include/buildrules | 2 +- src/include/pcp/config.h.in | 10 ++++++++-- src/pmdas/linux/proc_stat.c | 1 - src/pmdas/pmcd/src/GNUmakefile | 2 +- src/pmdas/pmcd/src/pmcd.c | 2 +- src/pmdas/shping/shping.c | 5 ++++- src/pmie/pmie2col.sh | 2 +- src/pmieconf/GNUmakefile.rules | 2 +- src/pmns/stdpmid.pcp | 1 + src/pmwebapi/pmresapi.c | 1 + 17 files changed, 76 insertions(+), 14 deletions(-) commit 074034425010adc0f7b3df7f7ee18dd40f6db89b Author: Nathan Scott Date: Tue Jun 17 17:49:30 2014 +1000 Release prep for 3.9.5 - update timestamps and changelogs commit ffc022c599f7dffbac77730e6e869ab74109c19c Author: Nathan Scott Date: Tue Jun 17 17:47:02 2014 +1000 Remove an unused header in the Linux kernel PMDA commit c411633655587b3d502f942efdfc7df50cbac104 Author: Svante Signell Date: Tue Jun 17 17:46:29 2014 +1000 Initial support for building PCP on the GNU/Hurd platform commit d6ba9b2f4b00e68cb84a883999230be60b5d04d8 Author: Nathan Scott Date: Tue Jun 17 17:32:16 2014 +1000 Reserve a domain number for pmdapipe From scox@redhat.com Tue Jun 17 14:20:24 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 30B807F3F for ; Tue, 17 Jun 2014 14:20:24 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id C6573AC004 for ; Tue, 17 Jun 2014 12:20:20 -0700 (PDT) X-ASG-Debug-ID: 1403032816-04bdf056672cf0a0001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id gKxpvBrVzoDD3mJ6 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 17 Jun 2014 12:20:16 -0700 (PDT) X-Barracuda-Envelope-From: scox@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s5HJKG2q013524 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Tue, 17 Jun 2014 15:20:16 -0400 Received: from [10.13.129.193] (dhcp129-193.rdu.redhat.com [10.13.129.193]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5HJKFrP029710; Tue, 17 Jun 2014 15:20:15 -0400 Message-ID: <53A094EF.3070306@redhat.com> Date: Tue, 17 Jun 2014 15:20:15 -0400 From: Stan Cox User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0 MIME-Version: 1.0 To: Nathan Scott CC: PCP Subject: Re: [pcp] [PATCH] Improve pmatop value fitting References: <539623F5.1050902@redhat.com> <1098064384.23885191.1402449908671.JavaMail.zimbra@redhat.com> X-ASG-Orig-Subj: Re: [pcp] [PATCH] Improve pmatop value fitting In-Reply-To: <1098064384.23885191.1402449908671.JavaMail.zimbra@redhat.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1403032816 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Not directly related to value fitting; but this change adds pmOptions option handling to pmatop and pmcollectl. git://sourceware.org/git/pcpfans.git scox/dev 88e5276 Stan Cox (1): Use python option processing class. From wwwrun@oss.sgi.com Tue Jun 17 17:00:04 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HTML_MESSAGE,NO_RELAYS autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: by oss.sgi.com (Postfix, from userid 30) id 6EE287F51; Tue, 17 Jun 2014 17:00:04 -0500 (CDT) From: bugzilla-daemon@oss.sgi.com To: pcp@oss.sgi.com Subject: [Bug 1057] memory leak & increasing slowdown in pdubuf.c buf_pin / interp.c update_bounds Date: Tue, 17 Jun 2014 22:00:03 +0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Classification: Unclassified X-Bugzilla-Product: pcp X-Bugzilla-Component: pcp X-Bugzilla-Keywords: X-Bugzilla-Severity: major X-Bugzilla-Who: kenj@internode.on.net X-Bugzilla-Status: NEW X-Bugzilla-Priority: P5 X-Bugzilla-Assigned-To: pcp@kenj.com.au X-Bugzilla-Target-Milestone: --- X-Bugzilla-Changed-Fields: Message-ID: In-Reply-To: References: Content-Type: multipart/alternative; boundary="1403042404.Bf5046c3.32687"; charset="us-ascii" X-Bugzilla-URL: http://oss.sgi.com/bugzilla/ Auto-Submitted: auto-generated MIME-Version: 1.0 --1403042404.Bf5046c3.32687 Date: Tue, 17 Jun 2014 17:00:04 -0500 MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8" http://oss.sgi.com/bugzilla/show_bug.cgi?id=1057 --- Comment #5 from Ken McDonell --- Update. The problem is not in the core of interp.c, which is a relief (I'll change the bug title to reflect the root cause when I'm done). Rather, pmwebd has a use case that we've not seen before, namely creating and closing lots of PCP contexts in the life of a single process ... there are a number of memory leaks in the archive context case, especially when interpolation mode is being used. The unexpectedly pinned PDU buffers Frank has observed is one symptom ... I have a fix for this ... but there are other sources of memory leaks I want to fix at the same time. Then a lot of QA before I commit the changes. -- You are receiving this mail because: You are on the CC list for the bug. --1403042404.Bf5046c3.32687 Date: Tue, 17 Jun 2014 17:00:04 -0500 MIME-Version: 1.0 Content-Type: text/html; charset="UTF-8"

Comment # 5 on bug 1057 from
Update.

The problem is not in the core of interp.c, which is a relief (I'll change the
bug title to reflect the root cause when I'm done).

Rather, pmwebd has a use case that we've not seen before, namely creating and
closing lots of PCP contexts in the life of a single process ... there are a
number of memory leaks in the archive context case, especially when
interpolation mode is being used.  The unexpectedly pinned PDU buffers Frank
has observed is one symptom ... I have a fix for this ... but there are other
sources of memory leaks I want to fix at the same time.

Then a lot of QA before I commit the changes.


You are receiving this mail because:
  • You are on the CC list for the bug.
--1403042404.Bf5046c3.32687-- From fche@redhat.com Tue Jun 17 20:06:27 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 7CB187F3F for ; Tue, 17 Jun 2014 20:06:27 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 71000304062 for ; Tue, 17 Jun 2014 18:06:24 -0700 (PDT) X-ASG-Debug-ID: 1403053580-04cbb00a02169e40001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id CXW53aVsuUJDBn1i (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 17 Jun 2014 18:06:20 -0700 (PDT) X-Barracuda-Envelope-From: fche@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s5I16Jp5011778 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Tue, 17 Jun 2014 21:06:19 -0400 Received: from fche.csb (vpn-56-123.rdu2.redhat.com [10.10.56.123]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5I16JQi031451; Tue, 17 Jun 2014 21:06:19 -0400 Received: by fche.csb (Postfix, from userid 2569) id 6A8AE58114; Tue, 17 Jun 2014 21:06:18 -0400 (EDT) To: Nathan Scott Cc: pcp@oss.sgi.com, William Cohen Subject: Re: [RFC] Command pipe PMDA References: <1582052329.18672839.1401703216956.JavaMail.zimbra@redhat.com> <740708456.18675715.1401703776506.JavaMail.zimbra@redhat.com> X-ASG-Orig-Subj: Re: [RFC] Command pipe PMDA From: fche@redhat.com (Frank Ch. Eigler) Date: Tue, 17 Jun 2014 21:06:18 -0400 In-Reply-To: <740708456.18675715.1401703776506.JavaMail.zimbra@redhat.com> (Nathan Scott's message of "Mon, 2 Jun 2014 06:09:36 -0400 (EDT)") Message-ID: User-Agent: Gnus/5.1008 (Gnus v5.10.8) Emacs/21.4 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Scanned-By: MIMEDefang 2.68 on 10.5.11.24 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1403053580 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Hi, Nathan - nathans wrote: > My colleague Will Cohen recently floated the idea of using PCP to > carefully lift some permissions restrictions in tools like perf, > and to enable perf functionality to be injected into PCP to some > extent. [...] It seems to me that the perf angle to this is peripheral; the hypothetical new pcp capability is on-demand remote invocation of console programs and collection of their outputs. > [...] We could tackle this problem with a new pmdapipe(1) agent in > PCP (Just toolshedding, but I'd suggest "pmdaexec" or similar instead of "pipe", which reflects an internal implementation artifact.) > running as root and arbitrating access to the privileged commands. We will need to be absolutely paranoid with this, especially if we're thinking of running commands as root. Even just information disclosure can be a problem, for mundane-sounding things like kernel-tracepoint traces. Letting less-than-root-credentialed clients access such information is also contrary to our traditional security philosophy; we've never tried to be a deliberate privilege-escalator. > This PMDA would primarily export one event metric, with records of > string type holding the command output. (Or one metric per configured command.) > One of a configured set of commands could be executed via pmevent(1) > connecting to this PMDA (via pmcd) which would execute the requested > command [...] Sounds good. > The piping (hot) PMDA would be more involved. It would need to: > - enforce access controls [...] Right! > - provide a mechanism for configuration of a set of allowed commands > that it is prepared to execute, and a way to map the parameters to > the command line before executing the tool. This part will be tricky to have a good tradeoff point between generality & safety. For example, we'll need super careful e.g.-wordexp(3) quoting of the parameters. > - track each remote client using the client-context-tracking [...] > - once user credentials and parameters have been passed, and tracing > begins (via client-driven fetch), fork/exec the relevant command [...] > - either when the child command exits or the client tool disconnects, [...] Yup and yup and yup. Also worth considering is an option to collect a fixed quantity of output, whether measured in screenfuls, lines, or time. Also worth considering is an option to control child command output buffering - line-by-line vs. arbitrary-buffer vs. time-based as it's passed onto the event buffers. > To achieve the generalised configuration goals (while restricting the > runnable commands to a sanitised, secure, sysadmin-approved set), the > PMDA could read a configuration file on startup (and SIGHUP), perhaps > with a syntax along these lines: > > $ cat /var/lib/pcp/pmdas/pipe/sample.conf > # instance user commands > rw_syscalls root perf script rw-by-file $1 > bdev_trace root btrace -w $1 /dev/$2 (I wouldn't be surprised if a "run-as-same-user" type invocation option would make an appearance here.) > [access] > allow user bob : all; > allow group perf : rw_syscalls; > [...] > $ pmevent -i bdev_trace -x '5 sda' pipe.firehose > 8,2 5 1 0.000000000 25227 A WS 734332384 + 24 <- (253,2) 734330336 > 8,0 5 2 0.000000414 25227 A WS 735358432 + 24 <- (8,2) 734332384 > 8,0 5 3 0.000000756 25227 Q WS 735358432 + 24 [qemu-kvm] > [...5 seconds worth] > $ A nice example. Consider also system overview type commands, which could be quite informative if logged periodically, along with some crazier ideas: "ps -ef" "kill $1" "smartctl -a $1" "dmidecode" "top -n 1" # <-- may need a pty, not just a plain pipe! "find /sys/devices/system/edac | xargs grep ." "dbus-monitor" "cat $1" "iptables -v -l -t $1" "servicectl" "service $1 $2" - FChE From aather@netflix.com Tue Jun 17 20:52:02 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HTML_MESSAGE,T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id D82F37F3F for ; Tue, 17 Jun 2014 20:52:02 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id C2BC48F8037 for ; Tue, 17 Jun 2014 18:52:02 -0700 (PDT) X-ASG-Debug-ID: 1403056321-04cbb00a0216b960001-S8gJnT Received: from mail-qc0-f172.google.com (mail-qc0-f172.google.com [209.85.216.172]) by cuda.sgi.com with ESMTP id D5IEJ3on0QhEB6cs (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Tue, 17 Jun 2014 18:52:01 -0700 (PDT) X-Barracuda-Envelope-From: aather@netflix.com X-Barracuda-Apparent-Source-IP: 209.85.216.172 Received: by mail-qc0-f172.google.com with SMTP id o8so167837qcw.3 for ; Tue, 17 Jun 2014 18:52:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=netflix.com; s=google; h=mime-version:date:message-id:subject:from:to:content-type; bh=2pSreLup2TrS4W3Q/4o5DZyWZRE7CVRN9LaYuTtagc0=; b=AgTLjWD4uJztNFRfa3TA/mySqdEWZMbv7hjk3jvV23re9iYVjgMM/1AFyRVJAh/yAO 4KZomJiCbIrgfxmQ6pai+a4TWlBq7RwXZThkE5T8TiU/W2jzKm2P89ISgJfeuWrxjkTG 1T3ffzJ+GX6xWZYumS+nOsUSvt9Pss2YoCY+M= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:date:message-id:subject:from:to :content-type; bh=2pSreLup2TrS4W3Q/4o5DZyWZRE7CVRN9LaYuTtagc0=; b=FJj6o9VW1N45zVHv/MpH6Mj6U0gCWeWz1JJ/xfD880LzIunJq7JgUbou4ny/mNbMWB 8gj5G34+lUBqMI+lDBNf2mIVHDy9MTcxLj92iNQdDR0J42D+kWG+fVFzUHWPZVM6rQTO sBajE3CFklRi8sg2NOZGnJ33mx9AxqnnczmskJ/s64WWNo4wYenHL77716rbK3MggdJq GB0Gl1wEwyB30e52WCs1jeMmJ9K4brgnwhaXoerQbEBKjAekmr+YaLcQKbC1Zf7Y99oO JxhPVg2TPQI9TTuAX23XljHSEqKObvIO5SqLREjr01lrMNiV/m0hsH/ixNfp2+aOsZOr 0Snw== X-Gm-Message-State: ALoCoQmt3HsdzIR58n0IuIVsXr/0rICmx0kNUPXuDoRYInI5JcHxEYlTgBsDtZRzml1aHH/wohyv MIME-Version: 1.0 X-Received: by 10.140.84.18 with SMTP id k18mr346732qgd.70.1403056320890; Tue, 17 Jun 2014 18:52:00 -0700 (PDT) Received: by 10.229.241.6 with HTTP; Tue, 17 Jun 2014 18:52:00 -0700 (PDT) Date: Tue, 17 Jun 2014 18:52:00 -0700 Message-ID: Subject: installing deb packages on Ubuntu From: Amer Ather X-ASG-Orig-Subj: installing deb packages on Ubuntu To: pcp@oss.sgi.com Content-Type: multipart/alternative; boundary=001a11c1200e9b5cff04fc128181 X-Barracuda-Connect: mail-qc0-f172.google.com[209.85.216.172] X-Barracuda-Start-Time: 1403056321 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6736 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message --001a11c1200e9b5cff04fc128181 Content-Type: text/plain; charset=UTF-8 I use "Makepkgs --verbose" option to build deb packages and then install it on other systems. To install these deb package, I run: # dpkg -i I want to know what order should I use to install all these packages. Right now I just run dpkg in random order and then try to solve dependency issue by running: # apt-get install -f This seems to work around the issue. However, I want to know the correct order to install these packages. List of deb packages generated: libpcp3_3.9.5_amd64.deb libpcp3-dev_3.9.5_amd64.deb libpcp-gui2_3.9.5_amd64.deb libpcp-gui2-dev_3.9.5_amd64.deb libpcp-import1_3.9.5_amd64.deb libpcp-import1-dev_3.9.5_amd64.deb libpcp-import-perl_3.9.5_amd64.deb libpcp-logsummary-perl_3.9.5_amd64.deb libpcp-mmv1_3.9.5_amd64.deb libpcp-mmv1-dev_3.9.5_amd64.deb libpcp-mmv-perl_3.9.5_amd64.deb libpcp-pmda3_3.9.5_amd64.deb libpcp-pmda3-dev_3.9.5_amd64.deb libpcp-pmda-perl_3.9.5_amd64.deb libpcp-trace2_3.9.5_amd64.deb libpcp-trace2-dev_3.9.5_amd64.deb pcp_3.9.5_amd64.deb pcp-conf_3.9.5_amd64.deb pcp-doc_3.9.5_all.deb pcp-gui_3.9.5_amd64.deb pcp-import-collectl2pcp_3.9.5_amd64.deb pcp-import-iostat2pcp_3.9.5_all.deb pcp-import-mrtg2pcp_3.9.5_all.deb pcp-import-sar2pcp_3.9.5_all.deb pcp-import-sheet2pcp_3.9.5_all.deb pcp-manager_3.9.5_amd64.deb pcp-testsuite_3.9.5_amd64.deb pcp-webapi_3.9.5_amd64.deb python-pcp_3.9.5_amd64.deb -- Thanks, Amer Ather Cloud Performance Engineering My Location --001a11c1200e9b5cff04fc128181 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
I use "Makepkgs --verbose" option to build deb p= ackages and then install it on other systems. To install these deb package,= I run:

# dpkg -i <package name>

I want to know what order should I use to install all these packages. = Right now I just run dpkg in random order and then try to solve dependency = issue by running:

# apt-get install -f=C2=A0
=

This seems to work around the issue. However, I want to know= the correct order to install these packages. List of deb packages generate= d:

libpcp3_3.9.5_amd64.deb
libpcp3-= dev_3.9.5_amd64.deb
libpcp-gui2_3.9.5_amd64.deb
libpcp-gui2-dev_3.9.5_amd64.deb<= /div>
libpcp-import1_3.9.5_amd64.deb
libpcp-import1-dev_3.9.5= _amd64.deb
libpcp-import-perl_3.9.5_amd64.deb
libpcp-lo= gsummary-perl_3.9.5_amd64.deb
libpcp-mmv1_3.9.5_amd64.deb
libpcp-mmv1-dev_3.9.5_amd64.deb<= /div>
libpcp-mmv-perl_3.9.5_amd64.deb
libpcp-pmda3_3.9.5_amd6= 4.deb
libpcp-pmda3-dev_3.9.5_amd64.deb
libpcp-pmda-perl= _3.9.5_amd64.deb
libpcp-trace2_3.9.5_amd64.deb
libpcp-trace2-dev_3.9.5_amd64.= deb
pcp_3.9.5_amd64.deb
pcp-conf_3.9.5_amd64.deb
pcp-doc_3.9.5_all.deb
pcp-gui_3.9.5_amd64.deb
pcp-import-collectl2pcp_3.9.5_amd64.deb
pcp-import-iostat2pc= p_3.9.5_all.deb
pcp-import-mrtg2pcp_3.9.5_all.deb
pcp-i= mport-sar2pcp_3.9.5_all.deb
pcp-import-sheet2pcp_3.9.5_all.deb
pcp-manager_3.9.5_amd64.deb
pcp-testsuite_3.9.5_amd64.deb
pcp-webapi_3.9.5_amd64.deb
python-pcp_3.9.5_amd64.deb


--
Thanks,

Amer Ather
Cloud Performance Engineering
--001a11c1200e9b5cff04fc128181-- From nscott@redhat.com Tue Jun 17 21:06:27 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id DA6D17F3F for ; Tue, 17 Jun 2014 21:06:27 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id CB3D9304059 for ; Tue, 17 Jun 2014 19:06:24 -0700 (PDT) X-ASG-Debug-ID: 1403057182-04cbb00a0216c2a0001-S8gJnT Received: from mx4-phx2.redhat.com (mx4-phx2.redhat.com [209.132.183.25]) by cuda.sgi.com with ESMTP id 8n0ASOlqP2O89V1S for ; Tue, 17 Jun 2014 19:06:23 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.25 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx4-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id s5I26Ga5017877; Tue, 17 Jun 2014 22:06:16 -0400 Date: Tue, 17 Jun 2014 22:06:16 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: Amer Ather Cc: pcp@oss.sgi.com Message-ID: <1978113194.27571229.1403057176433.JavaMail.zimbra@redhat.com> In-Reply-To: References: Subject: Re: [pcp] installing deb packages on Ubuntu MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [pcp] installing deb packages on Ubuntu Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.12] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: installing deb packages on Ubuntu Thread-Index: MQ5eNQBOJWxB4Hz86m0ttRPCZXHrsw== X-Barracuda-Connect: mx4-phx2.redhat.com[209.132.183.25] X-Barracuda-Start-Time: 1403057183 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6736 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Hi Amer, ----- Original Message ----- > I use "Makepkgs --verbose" option to build deb packages and then install it > on other systems. To install these deb package, I run: > > # dpkg -i I use that build/install method fairly frequently too FWIW. > I want to know what order should I use to install all these packages. Right > now I just run dpkg in random order and then try to solve dependency issue > by running: For me, dpkg always seems to figure out the inter-dependencies of the packages on the command line ... I guess that could be cos I tend to be doing upgrades and not fresh installs though. Can you send the errors you're seeing from dpkg? > # apt-get install -f > > This seems to work around the issue. However, I want to know the correct > order to install these packages. List of deb packages generated: There's a few packages you probably don't really want/need in that list, btw - esp... > pcp-testsuite_3.9.5_amd64.deb cheers. -- Nathan From nscott@redhat.com Wed Jun 18 00:55:47 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=T_FRT_FOLLOW1 autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 5D0037F47 for ; Wed, 18 Jun 2014 00:55:47 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 3E7D3304066 for ; Tue, 17 Jun 2014 22:55:46 -0700 (PDT) X-ASG-Debug-ID: 1403070941-04cbb00a03175230001-S8gJnT Received: from mx4-phx2.redhat.com (mx4-phx2.redhat.com [209.132.183.25]) by cuda.sgi.com with ESMTP id xxWADRXmHtC3Af56 for ; Tue, 17 Jun 2014 22:55:41 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.25 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx4-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id s5I5tftZ018877; Wed, 18 Jun 2014 01:55:41 -0400 Date: Wed, 18 Jun 2014 01:55:41 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: Stan Cox Cc: PCP Message-ID: <817801272.27612941.1403070941256.JavaMail.zimbra@redhat.com> In-Reply-To: <53A094EF.3070306@redhat.com> References: <539623F5.1050902@redhat.com> <1098064384.23885191.1402449908671.JavaMail.zimbra@redhat.com> <53A094EF.3070306@redhat.com> Subject: Re: [pcp] [PATCH] Improve pmatop value fitting MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [pcp] [PATCH] Improve pmatop value fitting Content-Type: multipart/mixed; boundary="----=_Part_27612939_2001102528.1403070941255" X-Originating-IP: [10.5.82.12] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: Improve pmatop value fitting Thread-Index: D7XSK/QucHZxRfCiNLgphtkeWt6PmA== X-Barracuda-Connect: mx4-phx2.redhat.com[209.132.183.25] X-Barracuda-Start-Time: 1403070941 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.03 X-Barracuda-Spam-Status: No, SCORE=0.03 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA_TO_FROM_DOMAIN_MATCH, THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6740 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 0.01 BSF_SC0_SA_TO_FROM_DOMAIN_MATCH Sender Domain Matches Recipient Domain ------=_Part_27612939_2001102528.1403070941255 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Hi Stan, ----- Original Message ----- > Not directly related to value fitting; but this change adds pmOptions > option handling to pmatop and pmcollectl. > > git://sourceware.org/git/pcpfans.git > scox/dev 88e5276 > Stan Cox (1): Use python option processing class. Nice, I enjoyed the pylint cleanup in there too. :) Attached patch tackles a couple of minor things. Less minor though is the way these tools now seem to be creating an initial context (via the argument parsing helper), then another immediately after depending on whether a folio was presented or not? This seems like it'll be a problem in the folio mode, which will not be able to run on a machine without a local pmcd anymore (to satisfy the initial context creation, which we promptly discard). To tackle this, I think it'd need to do the folio parsing in option_callback() and add the archive (manually) into the pmOptions. Not pretty. :( [ pmval has to do something horrifyingly similar, see its call out to __pmAddOptArchive(). ] To throw you another curve ball :) - folios can potentially contain multiple archives, possibly even from multiple hosts, which this code kinda skips right over. See the example inside mkaf(1) - which amusingly even predates the Y2K bugfixes in log naming - heh! Now there's a blast from the past! Anyway, the pmOptions stuff can handle that, allowing for multiple archives already. I wonder if support for parsing folios should be added into libpcp, however? This will certainly simplify life here - the downside will be having to parse the folio in C code instead of python. The alternative would be shifting it over to pcp.pmcc (or adding pmOption support into pcp.pmsubsys until we get to move these tools over to pcp.pmcc) ... but, probably libpcp will be the simplest overall? (libpcp_gui being yet another possibility, since it knows all about the folio format already, which libpcp doesn't - but libpcp_gui doesn't know about pmOptions at all - gah!). I *think* doing it in libpcp will be the simplest approach; using the code implementing PMOPT_HOSTSFILE as a reference. So perhaps a PMOPT_FOLIO might be the way to go (with a --folio option, and some libpcp/src/getopt.c code similar to __pmAddOptHostFile). Thoughts? Once thats in place, these scripts become simpler - just need that one pmapi.pmContext.fromOptions call, dropping the ~20 lines or so of python code that follows it in each script. cheers. -- Nathan ------=_Part_27612939_2001102528.1403070941255 Content-Type: text/x-patch; name=scox-options.patch Content-Disposition: attachment; filename=scox-options.patch Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL3NyYy9wbWF0b3AvcG1hdG9wLnB5IGIvc3JjL3BtYXRvcC9wbWF0b3AucHkK aW5kZXggMmVjZjhhOS4uMmY4ZjdkMSAxMDA2NDQKLS0tIGEvc3JjL3BtYXRvcC9wbWF0b3AucHkK KysrIGIvc3JjL3BtYXRvcC9wbWF0b3AucHkKQEAgLTcwOCw3ICs3MDgsNyBAQCBjbGFzcyBfT3B0 aW9ucyhvYmplY3QpOgogICAgICAgICBvcHRzID0gcG1hcGkucG1PcHRpb25zKCkKICAgICAgICAg b3B0cy5wbVNldE9wdGlvbkNhbGxiYWNrKHNlbGYub3B0aW9uX2NhbGxiYWNrKQogICAgICAgICBv cHRzLnBtU2V0T3ZlcnJpZGVDYWxsYmFjayhzZWxmLm92ZXJyaWRlKQotICAgICAgICBvcHRzLnBt U2V0U2hvcnRPcHRpb25zKCItZ213OnI6TDpoOlY/IikKKyAgICAgICAgb3B0cy5wbVNldFNob3J0 T3B0aW9ucygiZ213OnI6TDpoOlY/IikKICAgICAgICAgb3B0cy5wbVNldExvbmdPcHRpb25IZWFk ZXIoIk9wdGlvbnMiKQogICAgICAgICBvcHRzLnBtU2V0TG9uZ09wdGlvbigiZ2VuZXJpYyIsIDAs ICdnJywgJycsICJEaXNwbGF5IGdlbmVyaWMgbWV0cmljcyIpCiAgICAgICAgIG9wdHMucG1TZXRM b25nT3B0aW9uKCJtZW1vcnkiLCAwLCAnbScsICcnLCAiRGlzcGxheSBtZW1vcnkgbWV0cmljcyIp CmRpZmYgLS1naXQgYS9zcmMvcG1jb2xsZWN0bC9wbWNvbGxlY3RsLnB5IGIvc3JjL3BtY29sbGVj dGwvcG1jb2xsZWN0bC5weQppbmRleCA3YmM0NzY1Li5kNmUzZGQ1IDEwMDc1NQotLS0gYS9zcmMv cG1jb2xsZWN0bC9wbWNvbGxlY3RsLnB5CisrKyBiL3NyYy9wbWNvbGxlY3RsL3BtY29sbGVjdGwu cHkKQEAgLTUxNCw3ICs1MTQsNyBAQCBjbGFzcyBfT3B0aW9ucyhvYmplY3QpOgogICAgICAgICBv cHRzID0gcG1hcGkucG1PcHRpb25zKCkKICAgICAgICAgb3B0cy5wbVNldE9wdGlvbkNhbGxiYWNr KHNlbGYub3B0aW9uX2NhbGxiYWNrKQogICAgICAgICBvcHRzLnBtU2V0T3ZlcnJpZGVDYWxsYmFj ayhzZWxmLm92ZXJyaWRlKQotICAgICAgICBvcHRzLnBtU2V0U2hvcnRPcHRpb25zKCJ2cDpjOmY6 UjppOnM6aDoiKQorICAgICAgICBvcHRzLnBtU2V0U2hvcnRPcHRpb25zKCJ2cDpjOmY6UjppOnM6 aDo/IikKICAgICAgICAgb3B0cy5wbVNldExvbmdPcHRpb25IZWFkZXIoIk9wdGlvbnMiKQogICAg ICAgICBvcHRzLnBtU2V0TG9uZ09wdGlvbigidmVyYm9zZSIsIDAsICd2JywgJycsICJQcm9kdWNl IHZlcmJvc2Ugb3V0cHV0IikKICAgICAgICAgb3B0cy5wbVNldExvbmdPcHRpb24oInBsYXliYWNr IiwgMCwgJ3AnLCAnJywgIlJlYWQgc2FtcGxlIGRhdGEgZnJvbSBmaWxlIikKQEAgLTUyMyw3ICs1 MjMsNyBAQCBjbGFzcyBfT3B0aW9ucyhvYmplY3QpOgogICAgICAgICBvcHRzLnBtU2V0TG9uZ09w dGlvbigicnVudGltZSIsIDEsICdSJywgJ04nLCAiSG93IGxvbmcgdG8gdGFrZSBzYW1wbGVzIikK ICAgICAgICAgb3B0cy5wbVNldExvbmdPcHRpb24oImludGVydmFsIiwgMSwgJ2knLCAnTicsICJU aGUgc2FtcGxlIHRpbWUgaW50ZXJ2YWwiKQogICAgICAgICBvcHRzLnBtU2V0TG9uZ09wdGlvbigi c3Vic3lzIiwgMSwgJ3MnLCAnU1VCU1lTJywgIlRoZSBzdWJzeXN0ZW0gdG8gc2FtcGxlIikKLSAg ICAgICAgb3B0cy5wbVNldExvbmdPcHRpb24oImhvc3QiLCAxLCAnaCcsICdIT1NUJywgIlRoZSBo b3N0IHRoYXQgaXMgdGhlIG1ldHJpYyBzb3VyY2UiKQorICAgICAgICBvcHRzLnBtU2V0TG9uZ09w dGlvbkhvc3QoKQogICAgICAgICBvcHRzLnBtU2V0TG9uZ09wdGlvblZlcnNpb24oKQogICAgICAg ICBvcHRzLnBtU2V0TG9uZ09wdGlvbkhlbHAoKQogICAgICAgICByZXR1cm4gb3B0cwpAQCAtNTc2 LDcgKzU3Niw3IEBAIGNsYXNzIF9PcHRpb25zKG9iamVjdCk6CiAgICAgICAgICAgICBzZWxmLmlu dGVydmFsX2FyZyA9IHNlbGYub3B0cy5wbUdldE9wdGlvbkludGVydmFsKCkKICAgICAgICAgZWxp ZiBvcHQgPT0gJ2MnOgogICAgICAgICAgICAgc2VsZi5vcHRzLnBtU2V0T3B0aW9uU2FtcGxlcyhv cHRhcmcpCi0gICAgICAgICAgICBzZWxmLm5fc2FtcGxlcyA9IGludG8oc2VsZi5vcHRzLnBtR2V0 T3B0aW9uU2FtcGxlcygpKQorICAgICAgICAgICAgc2VsZi5uX3NhbXBsZXMgPSBpbnQoc2VsZi5v cHRzLnBtR2V0T3B0aW9uU2FtcGxlcygpKQogICAgICAgICBlbGlmIG9wdCA9PSAnaCc6CiAgICAg ICAgICAgICBzZWxmLmhvc3QgPSBvcHRhcmcKIAo= ------=_Part_27612939_2001102528.1403070941255-- From ozgjss@yandex.ru Wed Jun 18 06:39:29 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: * X-Spam-Status: No, score=1.0 required=5.0 tests=FREEMAIL_FROM,FREEMAIL_REPLY, HTML_FONT_SIZE_LARGE,HTML_MESSAGE autolearn=no version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id B71137F3F for ; Wed, 18 Jun 2014 06:39:29 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id A862D8F8050 for ; Wed, 18 Jun 2014 04:39:29 -0700 (PDT) X-ASG-Debug-ID: 1403091567-04cbb00a02181980001-S8gJnT Received: from pbmsx01.rhammond.biz (mail.partsbase.com [12.108.55.49]) by cuda.sgi.com with ESMTP id 4RwFk1DKqOu8pXD5 for ; Wed, 18 Jun 2014 04:39:27 -0700 (PDT) X-Barracuda-Envelope-From: ozgjss@yandex.ru X-Barracuda-Apparent-Source-IP: 12.108.55.49 Received: from glwefqfm ([211.162.79.65]) by pbmsx01.rhammond.biz with Microsoft SMTPSVC(6.0.3790.4675); Wed, 18 Jun 2014 07:36:27 -0400 Message-ID: <5F5AECBFB4604EFD21246DD1C5FB46E8@ojfhpl> From: =?windows-1251?B?S+voZe3y8WvoZSDh4Of7IPJl6yAgKzc5MTMz?= =?windows-1251?B?OTEtLcc4Mzc=?= To: "jkpnhdvo" Subject: =?windows-1251?B?Kzc5MTMzOTEtLTMtODMtNyBL6+hl7fLx6uhl?= =?windows-1251?B?IOFh5/sg8uXrICArNzkxMzM5McctOC0zLTc=?= Date: Wed, 18 Jun 2014 18:38:52 +0700 X-ASG-Orig-Subj: =?windows-1251?B?Kzc5MTMzOTEtLTMtODMtNyBL6+hl7fLx6uhl?= =?windows-1251?B?IOFh5/sg8uXrICArNzkxMzM5McctOC0zLTc=?= Organization: =?windows-1251?B?S+vo5e3y8eroZSDh4Of7IPJl6yAgKzc5MTMz?= =?windows-1251?B?LTktMS0zLTgtMzc=?= MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="----=_NextPart_000_17A5_01CF8B24.8D5E6150" X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Windows Live Mail 14.0.8117.416 X-MimeOLE: Produced By Microsoft MimeOLE V14.0.8117.416 X-OriginalArrivalTime: 18 Jun 2014 11:36:28.0469 (UTC) FILETIME=[8B371650:01CF8AE9] X-Barracuda-Connect: mail.partsbase.com[12.108.55.49] X-Barracuda-Start-Time: 1403091567 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.00 X-Barracuda-Spam-Status: No, SCORE=1.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, BSF_SC0_TG035a, BSF_SC3_MV0165, HTML_FONT_SIZE_LARGE, HTML_MESSAGE, MAILTO_TO_SPAM_ADDR X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6745 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 1.00 BSF_SC3_MV0165 Custom rule MV0165 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.00 MAILTO_TO_SPAM_ADDR URI: Includes a link to a likely spammer email 0.00 HTML_FONT_SIZE_LARGE BODY: HTML font size is large 0.00 HTML_MESSAGE BODY: HTML included in message 0.00 BSF_SC0_TG035a Message contains invalid style definition This is a multi-part message in MIME format. ------=_NextPart_000_17A5_01CF8B24.8D5E6150 Content-Type: text/plain; charset="windows-1251" Content-Transfer-Encoding: quoted-printable +791339-I-3-8-3-7 =CA=EB=E8=E5=ED=F2=F1k=E8e =E1=E0=E7=FB =F2=E5=EB +791= 33-9-1-=C7-8=C77 =D1=EE=E1=E5=F0=E5=EC =E4=EB=FF =C2=E0=F1 =EF=EE =E8=ED=F2=E5=F0=ED=E5=F2= =EA=EB=E8=E5=ED=F2=F1=EA=F3=FE =E1=E0=E7=F3 =E4=E0=ED=ED=FB=F5.=20 =CC=FB =EF=F0=E5=E4=EE=F1=F2=E0=E2=E8=EC =C2=E0=EC =E2=F1=E5 =EA=EE=ED=F2= =E0=EA=F2=FB =C2=E0=F8=E8=F5 =EA=EB=E8=E5=ED=F2=EE=E2, =C2=E0=EC =EE=F1=F2=E0=ED=E5=F2=F1=FF =F2=EE=EB=FC=EA=EE =EF=F0=EE=E4=E0=F2= =FC =C2=E0=F8=E8 =F2=EE=E2=E0=F0=FB =E8 =F3=F1=EB=F3=E3=E8 =D3=E7=ED=E0=E9=F2=E5 =EF=EE=E4=F0=EE=E1=ED=E5=E5: =D2=E5=EB +79133913837 Email: prodawez388@gmail.com Skype: prodawez389 ICQ: 6288862 ------=_NextPart_000_17A5_01CF8B24.8D5E6150 Content-Type: text/html; charset="windows-1251" Content-Transfer-Encoding: quoted-printable
+791339-I-3-8-3-7 =CA=EB=E8=E5=ED=F2=F1k=E8e =E1=E0=E7=FB =F2=E5= =EB =20 +79133-9-1-=C7-8=C77
 
=D1=EE=E1=E5=F0=E5=EC =E4=EB=FF =C2=E0= =F1 =EF=EE =E8=ED=F2=E5=F0=ED=E5=F2 =EA=EB=E8=E5=ED=F2=F1=EA=F3=FE =E1=E0= =E7=F3=20 =E4=E0=ED=ED=FB=F5.
=CC=FB =EF=F0=E5=E4=EE=F1=F2=E0=E2=E8=EC =C2=E0=EC =E2= =F1=E5 =EA=EE=ED=F2=E0=EA=F2=FB =C2=E0=F8=E8=F5 =EA=EB=E8=E5=ED=F2=EE=E2,=
=C2=E0=EC =EE=F1=F2=E0=ED=E5=F2=F1=FF =F2=EE=EB=FC=EA= =EE =EF=F0=EE=E4=E0=F2=FC =C2=E0=F8=E8 =F2=EE=E2=E0=F0=FB =E8 =F3=F1=EB=F3= =E3=E8
=D3=E7=ED=E0=E9=F2=E5 =EF=EE=E4=F0=EE=E1=ED=E5=E5:
=D2=E5=EB +79133913837
Email: prodawez388@gmail.com
Skype: prodawez389
ICQ: 6288862
 
------=_NextPart_000_17A5_01CF8B24.8D5E6150-- From myllynen@redhat.com Wed Jun 18 07:10:55 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 07A4F7F3F for ; Wed, 18 Jun 2014 07:10:55 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 90927AC002 for ; Wed, 18 Jun 2014 05:10:51 -0700 (PDT) X-ASG-Debug-ID: 1403093446-04cb6c78c52dc300001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id KEOHRyxHfFPDTQAc (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 18 Jun 2014 05:10:47 -0700 (PDT) X-Barracuda-Envelope-From: myllynen@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s5ICAkcP012863 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Wed, 18 Jun 2014 08:10:46 -0400 Received: from mmyllyne.csb (vpn1-5-203.ams2.redhat.com [10.36.5.203]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5ICAiS1021113 for ; Wed, 18 Jun 2014 08:10:45 -0400 Message-ID: <53A181C4.5050402@redhat.com> Date: Wed, 18 Jun 2014 15:10:44 +0300 From: Marko Myllynen Reply-To: myllynen@redhat.com Organization: Red Hat User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.4.0 MIME-Version: 1.0 To: pcp@oss.sgi.com Subject: Re: [pcp] pcp+graphite, take 2 References: <20140616214301.GB6693@redhat.com> X-ASG-Orig-Subj: Re: [pcp] pcp+graphite, take 2 In-Reply-To: <20140616214301.GB6693@redhat.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.26 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1403093446 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Hi, On 2014-06-17 00:43, Frank Ch. Eigler wrote: > > Please see below for some more recent work on a web-gui for pcp. > > https://web.elastic.org/~fche/blog3/archive/2014/06/16/pcp-and-graphite-backwards as Ken said, very cool! My initial findings based few quick tests were: - blinkenlights demo worked all ok - PCP+Graphite worked ok but there was a usability issue: if you want to graph a period which is scattered in several archives then clicking through all of them (especially if adding several metrics) quickly get tedious. I'm not very familiar with Graphite so I don't know whether there would be a way to avoid this there. - PCP+Grafana looked nice (requires cookies to be enabled) but few times I saw my Firefox 24 ESR to become completely unresponsive for a period of time, both firefox and pmwebd were using 100% CPU at that time. Later, I restarted Firefox and I opened the PCP+Grafana page from the link and it took perhaps two minutes to display the graps, pmwebd CPU usage being low but firefox nearing 100% again. Then changing the time frame to last 24h caused pmwebd go to 100% followed soon by firefox, the operation to repaint and CPU usage to normalize took two and half minutes. The good news is that the graphs I eventually saw was exactly what I was expecting to see. Thanks, -- Marko Myllynen From fche@redhat.com Wed Jun 18 07:57:08 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id A02C97F3F for ; Wed, 18 Jun 2014 07:57:08 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 19BE2AC003 for ; Wed, 18 Jun 2014 05:57:07 -0700 (PDT) X-ASG-Debug-ID: 1403096224-04cb6c78c32de730001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id Qo18TlBejKsQolIq (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 18 Jun 2014 05:57:04 -0700 (PDT) X-Barracuda-Envelope-From: fche@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s5ICv3GX025663 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Wed, 18 Jun 2014 08:57:04 -0400 Received: from fche.csb (vpn-56-123.rdu2.redhat.com [10.10.56.123]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5ICv3tQ016367; Wed, 18 Jun 2014 08:57:03 -0400 Received: by fche.csb (Postfix, from userid 2569) id DBBBA5819B; Wed, 18 Jun 2014 08:57:02 -0400 (EDT) To: myllynen@redhat.com Cc: pcp@oss.sgi.com Subject: Re: pcp+graphite, take 2 References: <20140616214301.GB6693@redhat.com> <53A181C4.5050402@redhat.com> X-ASG-Orig-Subj: Re: pcp+graphite, take 2 From: fche@redhat.com (Frank Ch. Eigler) Date: Wed, 18 Jun 2014 08:57:02 -0400 In-Reply-To: <53A181C4.5050402@redhat.com> (Marko Myllynen's message of "Wed, 18 Jun 2014 15:10:44 +0300") Message-ID: User-Agent: Gnus/5.1008 (Gnus v5.10.8) Emacs/21.4 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Scanned-By: MIMEDefang 2.68 on 10.5.11.22 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1403096224 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Hi, Marko - > [...] > My initial findings based few quick tests were: Thanks for giving it a go! > [...] > - PCP+Graphite worked ok but there was a usability issue: if you want to > graph a period which is scattered in several archives then clicking > through all of them (especially if adding several metrics) quickly get > tedious. I'm not very familiar with Graphite so I don't know whether > there would be a way to avoid this there. To some extent, this is fallout from the pcp tradition of dividing up archives into fixed 24-hour slices. (There was controversy back when pmmgr defaulted to maintaining much longer ones.) This fallout will be solved before too long by teaching libpcp to virtually glue together peer archives automagically, so a directory name will be used to refer to the whole archived timeframe. pmwebd will easily inherit the improvement. Before all that, we can take advantage of the graphite wildcarding facilities. Metric names can contain *, which refers to the union of matching metrics. So e.g. in graphlot or the graphite browser subwindow ("Graph Data") where you edit metric names, type *SUBSTRING*.FOO.BAR to get all the archives containing SUBSTRING rendered together. Natural candidates for SUBSTRING would include partial host names or timestamp MMDD substrings. > - PCP+Grafana looked nice (requires cookies to be enabled) but few > times I saw my Firefox 24 ESR to become completely unresponsive for > a period of time, both firefox and pmwebd were using 100% CPU at > that time. [...] Using the javascript-side rendering can indeed be cpu-hungry, when many graphs are being pulled in. The default.json configuration includes two broad-archive-wildcard panels, so if your pmmgr -A parameter referred to a large directory tree, then many many time series will be sent to javascript for rendering. A possible change to the grafana default would be to use server-side PNG rendering. All that takes is editing jsdemos/grafana/app/dashboards/default.json to add "renderer":"png", into each object in the "panels":[ { ... } ] array. This can also be done from the web gui (edit graph; "Display Styles"; "Rendering"="Graphite PNG"). The downside is that pmwebd's PNG rendering is not as pretty, and grafana loses that super-easy drag-to-zoom interaction over the image. Another possible change would be to have a less impressive default.json dashboard in other ways, maybe cutting down from two graphs to one, or restricting it to a smaller timeframe, or something like that. - FChE From fche@redhat.com Wed Jun 18 10:05:00 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id E61717F4E for ; Wed, 18 Jun 2014 10:05:00 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id C72108F806F for ; Wed, 18 Jun 2014 08:04:57 -0700 (PDT) X-ASG-Debug-ID: 1403103892-04cb6c78c42e4180001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id EBpzCorcFGPUOGq1 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 18 Jun 2014 08:04:53 -0700 (PDT) X-Barracuda-Envelope-From: fche@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s5IF4pef021742 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Wed, 18 Jun 2014 11:04:52 -0400 Received: from fche.csb (vpn-56-123.rdu2.redhat.com [10.10.56.123]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5IF4p7W019113; Wed, 18 Jun 2014 11:04:51 -0400 Received: by fche.csb (Postfix, from userid 2569) id 01E6F5819B; Wed, 18 Jun 2014 11:04:50 -0400 (EDT) To: myllynen@redhat.com Cc: pcp@oss.sgi.com Subject: Re: pcp+graphite, take 2 References: <20140616214301.GB6693@redhat.com> <53A181C4.5050402@redhat.com> X-ASG-Orig-Subj: Re: pcp+graphite, take 2 From: fche@redhat.com (Frank Ch. Eigler) Date: Wed, 18 Jun 2014 11:04:50 -0400 In-Reply-To: <53A181C4.5050402@redhat.com> (Marko Myllynen's message of "Wed, 18 Jun 2014 15:10:44 +0300") Message-ID: User-Agent: Gnus/5.1008 (Gnus v5.10.8) Emacs/21.4 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Scanned-By: MIMEDefang 2.68 on 10.5.11.24 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1403103892 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 myllynen wrote: > [...] > - PCP+Grafana looked nice (requires cookies to be enabled) but few times > I saw my Firefox 24 ESR to become completely unresponsive for a period > of time, both firefox and pmwebd were using 100% CPU at that time. > [...] By the way, pmwebd would be a natural candidate for internal multithreading, at the http request level and/or at the per-archive data-extraction level. I wonder if I should throw caution [1] to the wind and turn it on. [1] http://oss.sgi.com/bugzilla/show_bug.cgi?id=1055 - FChE From nscott@redhat.com Wed Jun 18 17:38:27 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 4ADE47F3F for ; Wed, 18 Jun 2014 17:38:27 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 364F78F8052 for ; Wed, 18 Jun 2014 15:38:24 -0700 (PDT) X-ASG-Debug-ID: 1403131098-04bdf05668312e00001-S8gJnT Received: from mx3-phx2.redhat.com (mx3-phx2.redhat.com [209.132.183.24]) by cuda.sgi.com with ESMTP id fIWWUoqbL0MEbB3g for ; Wed, 18 Jun 2014 15:38:19 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.24 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx3-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id s5IMcI9Q032339; Wed, 18 Jun 2014 18:38:18 -0400 Date: Wed, 18 Jun 2014 18:38:18 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: "Frank Ch. Eigler" Cc: myllynen@redhat.com, pcp@oss.sgi.com Message-ID: <1199992388.29127915.1403131098566.JavaMail.zimbra@redhat.com> In-Reply-To: References: <20140616214301.GB6693@redhat.com> <53A181C4.5050402@redhat.com> Subject: Re: [pcp] pcp+graphite, take 2 MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [pcp] pcp+graphite, take 2 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.12] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: pcp+graphite, take 2 Thread-Index: 5xNEOpgE1BF1B4Gw+NlWwGI1oqMgAw== X-Barracuda-Connect: mx3-phx2.redhat.com[209.132.183.24] X-Barracuda-Start-Time: 1403131099 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.03 X-Barracuda-Spam-Status: No, SCORE=0.03 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, BSF_SC0_SA_TO_FROM_DOMAIN_MATCH, THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6758 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.01 BSF_SC0_SA_TO_FROM_DOMAIN_MATCH Sender Domain Matches Recipient Domain ----- Original Message ----- > > myllynen wrote: > > > [...] > > - PCP+Grafana looked nice (requires cookies to be enabled) but few times > > I saw my Firefox 24 ESR to become completely unresponsive for a period > > of time, both firefox and pmwebd were using 100% CPU at that time. > > [...] > > By the way, pmwebd would be a natural candidate for internal > multithreading, at the http request level and/or at the per-archive > data-extraction level. I wonder if I should throw caution [1] to the > wind and turn it on. Definitely - doing archive I/O for multiple clients without async capabilities pretty much mandates it. cheers. -- Nathan From fche@redhat.com Wed Jun 18 17:39:41 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 222167F3F for ; Wed, 18 Jun 2014 17:39:41 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id CFAA1AC003 for ; Wed, 18 Jun 2014 15:39:37 -0700 (PDT) X-ASG-Debug-ID: 1403131176-04bdf05667312f00001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id Y5zBXvwp42BV5SHs (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 18 Jun 2014 15:39:36 -0700 (PDT) X-Barracuda-Envelope-From: fche@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s5IMdaMu030827 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Wed, 18 Jun 2014 18:39:36 -0400 Received: from fche.csb (vpn-56-123.rdu2.redhat.com [10.10.56.123]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5IMdair005079 for ; Wed, 18 Jun 2014 18:39:36 -0400 Received: by fche.csb (Postfix, from userid 2569) id 8E2875819B; Wed, 18 Jun 2014 18:39:35 -0400 (EDT) To: pcp@oss.sgi.com Subject: Re: pcp+graphite, take 2 References: <20140616214301.GB6693@redhat.com> <53A181C4.5050402@redhat.com> X-ASG-Orig-Subj: Re: pcp+graphite, take 2 From: fche@redhat.com (Frank Ch. Eigler) Date: Wed, 18 Jun 2014 18:39:35 -0400 In-Reply-To: (Frank Ch. Eigler's message of "Wed, 18 Jun 2014 11:04:50 -0400") Message-ID: User-Agent: Gnus/5.1008 (Gnus v5.10.8) Emacs/21.4 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Scanned-By: MIMEDefang 2.68 on 10.5.11.26 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1403131176 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 I wrote: > By the way, pmwebd would be a natural candidate for internal > multithreading, at the http request level and/or at the per-archive > data-extraction level. I wonder if I should throw caution [1] to the > wind and turn it on. Done & some early results are interesting. pmwebd -M for N>0 results in some happy operations, but too brief to get a good sense of speedups. That's because we get crashes pretty quickly. % valgrind .../pmwebd ... -M1 ==21880== Memcheck, a memory error detector ==21880== Copyright (C) 2002-2012, and GNU GPL'd, by Julian Seward et al. ==21880== Using Valgrind-3.8.1 and LibVEX; rerun with -h for copyright info ==21880== Command: ./pmwebd -G -R jsdemos -A .../path -v -v -M1 ==21880== [Wed Jun 18 22:34:15] pmwebd(21880): pmwebd PID = 21880 PMAPI URL = pmapi Started daemon on IPv4 TCP port 44323 Using libmicrohttpd 0.9.33 Serving non-pmwebapi URLs under directory .../jsdemos Remote context creation requests enabled Archive base directory: .../path Graphite API enabled with Cairo graphics Periodic client statistics dumped roughly every 300s Using up to 1 auxiliary threads [Wed Jun 18 22:34:16] pmwebd(21880): [127.0.0.1:57296] HTTP/1.1 POST /graphite/render [Wed Jun 18 22:34:17] pmwebd(21880): [127.0.0.1:57296] digested 16 metrics, timespan [1403116440-1403126340 by 60], in 256.715ms [Wed Jun 18 22:34:17] pmwebd(21880): [127.0.0.1:57297] HTTP/1.1 POST /graphite/render [Wed Jun 18 22:34:19] pmwebd(21880): [127.0.0.1:57297] digested 64 metrics, timespan [1403116440-1403126340 by 60], in 909.521ms [Wed Jun 18 22:34:19] pmwebd(21880): [127.0.0.1:57298] HTTP/1.1 POST /graphite/render [Wed Jun 18 22:34:20] pmwebd(21880): [127.0.0.1:57298] digested 32 metrics, timespan [1403116440-1403126340 by 60], in 389.512ms [Wed Jun 18 22:34:23] pmwebd(21880): [127.0.0.1:57297] HTTP/1.1 POST /graphite/render [Wed Jun 18 22:34:23] pmwebd(21880): [127.0.0.1:57297] digested 16 metrics, timespan [1403116440-1403126340 by 60], in 180.102ms [Wed Jun 18 22:34:23] pmwebd(21880): [127.0.0.1:57298] HTTP/1.1 POST /graphite/render [Wed Jun 18 22:34:25] pmwebd(21880): [127.0.0.1:57298] digested 64 metrics, timespan [1403116440-1403126340 by 60], in 823.622ms [Wed Jun 18 22:34:25] pmwebd(21880): [127.0.0.1:57296] HTTP/1.1 POST /graphite/render [Wed Jun 18 22:34:26] pmwebd(21880): [127.0.0.1:57296] digested 32 metrics, timespan [1403116440-1403126340 by 60], in 389.781ms [Wed Jun 18 22:34:29] pmwebd(21880): [127.0.0.1:57297] HTTP/1.1 POST /graphite/render [Wed Jun 18 22:34:30] pmwebd(21880): [127.0.0.1:57297] digested 16 metrics, timespan [1403116440-1403126340 by 60], in 187.731ms [Wed Jun 18 22:34:30] pmwebd(21880): [127.0.0.1:57298] HTTP/1.1 POST /graphite/render ==21880== Invalid read of size 8 ==21880== at 0x4E609C0: update_bounds.isra.1 (interp.c:411) ==21880== by 0x4E63103: __pmLogFetchInterp (interp.c:916) ==21880== by 0x4E5E43E: __pmLogFetch (logutil.c:1745) ==21880== by 0x4E45B65: pmFetch (fetch.c:151) ==21880== by 0x120A41: pmgraphite_fetch_series(fetch_series_jobspec*) (pmgraphite.cxx:872) ==21880== by 0x129507: fetch_series_jobqueue::thread_main(void*) (pmgraphite.cxx:638) ==21880== by 0x12C86C: fetch_series_jobqueue::run() (pmgraphite.cxx:659) ==21880== by 0x11A22C: pmgraphite_fetch_all_series(MHD_Connection*, std::vector > const&, long, long, long) (pmgraphite.cxx:972) ==21880== by 0x12618F: pmgraphite_respond_render_json(MHD_Connection*, http_params const&, std::vector > const&, bool) (pmgraphite.cxx:2018) ==21880== by 0x1291C2: pmgraphite_respond(MHD_Connection*, http_params const&, std::vector > const&) (pmgraphite.cxx:2126) ==21880== by 0x1105AF: mhd_respond(void*, MHD_Connection*, char const*, char const*, char const*, char const*, unsigned long*, void**) (main.cxx:238) ==21880== by 0x50AB528: call_connection_handler (connection.c:1295) ==21880== Address 0x12657278 is 744 bytes inside a block of size 1,752 free'd ==21880== at 0x4C294C4: free (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so) ==21880== by 0x4E603D5: cache_read.isra.0 (interp.c:191) ==21880== by 0x4E62E43: __pmLogFetchInterp (interp.c:1013) ==21880== by 0x4E5E43E: __pmLogFetch (logutil.c:1745) ==21880== by 0x4E45B65: pmFetch (fetch.c:151) ==21880== by 0x120A41: pmgraphite_fetch_series(fetch_series_jobspec*) (pmgraphite.cxx:872) ==21880== by 0x129507: fetch_series_jobqueue::thread_main(void*) (pmgraphite.cxx:638) ==21880== by 0x668BC52: start_thread (pthread_create.c:308) ==21880== by 0x63B8DBC: clone (clone.S:113) It doesn't look too serious; will look into it tomorrow. - FChE From kenj@internode.on.net Wed Jun 18 18:39:00 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 7247B7F3F for ; Wed, 18 Jun 2014 18:39:00 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 725B8304043 for ; Wed, 18 Jun 2014 16:38:56 -0700 (PDT) X-ASG-Debug-ID: 1403134733-04cbb00a031a2bc0001-S8gJnT Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id sbjXKK1gPSIhxv4x for ; Wed, 18 Jun 2014 16:38:54 -0700 (PDT) X-Barracuda-Envelope-From: kenj@internode.on.net X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: As8VAGkiolN20b6dPGdsb2JhbAANTYNfxUYEAQEBATiEZlEwDRYYAwIBAgExJwYCAQGIS64Gn2EXgl+QYASxb1o Received: from ppp118-209-190-157.lns20.mel6.internode.on.net (HELO [192.168.1.100]) ([118.209.190.157]) by ipmail06.adl2.internode.on.net with ESMTP; 19 Jun 2014 09:08:53 +0930 Message-ID: <53A223BF.1070206@internode.on.net> Date: Thu, 19 Jun 2014 09:41:51 +1000 From: Ken McDonell User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0 MIME-Version: 1.0 To: pcp@oss.sgi.com Subject: pcp updates - fix for bug 1057 (mem leaks from pmDestroyContext) Content-Type: text/plain; charset=ISO-8859-1 X-ASG-Orig-Subj: pcp updates - fix for bug 1057 (mem leaks from pmDestroyContext) Content-Transfer-Encoding: 7bit X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1403134734 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6761 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Changes committed to git://oss.sgi.com/kenj/pcp.git dev qa/828 | 228 +++++++++++++++++++ qa/828.out | 146 ++++++++++++ qa/833 | 48 ++++ qa/833.out | 542 ++++++++++++++++++++++++++++++++++++++++++++++- qa/common.check | 37 +-- qa/group | 2 qa/src/.gitignore | 1 qa/src/GNUlocaldefs | 5 qa/src/bug1057.0 |binary qa/src/bug1057.index |binary qa/src/bug1057.meta |binary qa/src/churnctx.c | 429 +++++++++++++++++++++++++++++++++++++ src/include/pcp/impl.h | 1 src/libpcp/src/context.c | 10 src/libpcp/src/exports | 5 src/libpcp/src/interp.c | 76 ++++++ src/libpcp/src/pdubuf.c | 15 + 17 files changed, 1513 insertions(+), 32 deletions(-) commit 0aca276deb631849a3944aa73e9857a46af1acdb Author: Ken McDonell Date: Thu Jun 19 09:17:02 2014 +1000 libpcp - fix mem leaks associated with pmDestroyContext() Fixes for http://oss.sgi.com/bugzilla/show_bug.cgi?id=1057 Frank's changes to pmwebd introduced a new libpcp use case, namely repeated iteration involving pmNewContext() ... pmDestroyContext() and specifically for archives. This exposed a number of memory leaks that this commit addresses. + introduce a new __pmFreeInterpData() routine that is called from pmDestroyContext() to do most of the work, namely for the context being destroyed, ... - walk the ac_pmid_hc hash table unpinning any PDU buffers that have been held for prior or next values (but not when valfmt is PM_VAL_INSITU) used in "interp" mode - free the chain of pmidcntl_ structs (PMIDs) from each __pmHashNode - free the chain of instcntl_t structs (instances) from each __pmHashNode - free the hash table and its entries - remove any pmResult held in the read cache (and unpin any associated PDU buffers) for enties from the data file associated with the context being destroyed + changes in pmDupContext() to ensure the archive hash table (...c_archctl->ac_pmid_hc) is NOT shared after a context is "dup'd" ... otherwise untold badness will flow from calling pmDestroyContext() on either the original or the dup'd archive context commit 8728ae22e0e8e1c998ecdab20b0c3f0831a13601 Author: Ken McDonell Date: Thu Jun 19 09:14:25 2014 +1000 libpcp - small changes to diags for pinnned/unpinned buffers Part of tracking down http://oss.sgi.com/bugzilla/show_bug.cgi?id=1057 commit c4758018b89c5cc96016a1cd7fbfbba17db2b318 Author: Ken McDonell Date: Thu Jun 19 09:12:33 2014 +1000 qa/833 - tweak filter to remove current date commit 4a0b4c794993820c9ffcada5f638151da285c8b1 Author: Ken McDonell Date: Thu Jun 19 08:33:47 2014 +1000 qa for bug 1057 - mem leaks from pmDestroyContext() See http://oss.sgi.com/bugzilla/show_bug.cgi?id=1057 New test program (churntx) and archive (first hour of archive from the bug, thanks Frank). New qa tests 833 (buffer pinning part of the bug) and 828 (all of the other memory leaks exposed via valgrind). commit 231f6ea4bcd3372644dba52fee4dbc28ff9b191c Author: Ken McDonell Date: Thu Jun 19 08:31:16 2014 +1000 qa/common.check - refactor valgrind support Simple change to expose _filter_valgrind() that can be used with roll-your-own valgrind execution (when _run_valgrind is not appropriate). From kenj@internode.on.net Wed Jun 18 19:04:08 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.6 required=5.0 tests=DC_IMAGE_SPAM_HTML, DC_IMAGE_SPAM_TEXT,DC_PNG_UNO_LARGO autolearn=no version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id DD0097F3F for ; Wed, 18 Jun 2014 19:04:08 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id C2859304048 for ; Wed, 18 Jun 2014 17:04:08 -0700 (PDT) X-ASG-Debug-ID: 1403136241-04cbb00a021a3f20001-S8gJnT Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id oEIp8qrLXv6iQWF0 for ; Wed, 18 Jun 2014 17:04:01 -0700 (PDT) X-Barracuda-Envelope-From: kenj@internode.on.net X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AuUVAAwoolN20b6dPGdsb2JhbAANTRaDSbsmiHsBgSQEAQEBATiEOAEBAQQFcxELGAUBAQIWDwIHAwIBAgEFASsUEwgBAYhLrgefYhMEjloiFoQtBJIAgUGeLg Received: from ppp118-209-190-157.lns20.mel6.internode.on.net (HELO [192.168.1.100]) ([118.209.190.157]) by ipmail06.adl2.internode.on.net with ESMTP; 19 Jun 2014 09:33:19 +0930 Message-ID: <53A2297A.6000202@internode.on.net> Date: Thu, 19 Jun 2014 10:06:18 +1000 From: Ken McDonell User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0 MIME-Version: 1.0 To: pcp@oss.sgi.com Subject: Re: [pcp] pcp+graphite, take 2 References: <20140616214301.GB6693@redhat.com> <539F7C0B.9050507@internode.on.net> X-ASG-Orig-Subj: Re: [pcp] pcp+graphite, take 2 In-Reply-To: <539F7C0B.9050507@internode.on.net> Content-Type: multipart/mixed; boundary="------------030906020404070100070106" X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1403136241 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.50 X-Barracuda-Spam-Status: No, SCORE=0.50 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DC_IMAGE_SPAM_HTML, DC_IMAGE_SPAM_TEXT, DC_PNG_UNO_LARGO X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6762 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.50 DC_PNG_UNO_LARGO Message contains a single large inline gif 0.00 DC_IMAGE_SPAM_TEXT Possible Image-only spam with little text 0.00 DC_IMAGE_SPAM_HTML Possible Image-only spam This is a multi-part message in MIME format. --------------030906020404070100070106 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit On 17/06/14 09:21, Ken McDonell wrote: > On 17/06/14 07:43, Frank Ch. Eigler wrote: >> Hi - >> >> Please see below for some more recent work on a web-gui for pcp. >> >> > https://web.elastic.org/~fche/blog3/archive/2014/06/16/pcp-and-graphite-ba > ckwards With my latest fix to libpcp, pmwebd is no longer a CPU and memory hog ... in the attached image the aqua region is the load average before I changed libpcp, the region to the right is after various iterations of the fix. --------------030906020404070100070106 Content-Type: image/png; name="Screenshot - 190614 - 10:01:41.png" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="Screenshot - 190614 - 10:01:41.png" iVBORw0KGgoAAAANSUhEUgAAAmkAAAEuCAYAAADVxIWbAAAABHNCSVQICAgIfAhkiAAAIABJ REFUeJzt3Xl8I+V9P/DPyDosyV7L62N9rO297b3KXmQJ7G7CslwtLJCEIyQhJCEEShtI0/QH aUMLzdU0FyUpbUpIgIZXyEEIKYQjCTeBXUj24lp7T9vr+7Z1WMf8/hjNaGY0o8OSrbH9eb9e +1pbGs081kiar77P83wfoampSQQRERERWYqt0A0gIiIiomQM0oiIiIgsyB4IBArdBiIiIiLS YSaNiIiIyIIYpBERERFZEIM0IiIiIgtikEZERERkQQzSiIiIiCyIQRoRERGRBTFIIyIiIrIg BmlEREREFsQgjYiIiMiCGKQRERERWRCDNCIiIiILYpBGREREZEEM0oiIiIgsiEEaERERkQXZ 3W53odtARERERDrMpBERERFZEIM0IiIiIgtikEZERERkQQzSiIiIiCyIQRoRERGRBTFIIyIi IrIgBmlEREREFsQgjYiIiMiCGKQRERERWRCDNCIiIiILYpBGREREZEEM0oiIiIgsiEEaERER kQUxSCMiIiKyIAZpRERERBbEII2IiIjIghikEREREVkQgzQiIiIiC2KQRkRERGRBDNKIiIiI LIhBGhEREZEFMUgjIiIisiAGaUREREQWxCCNiIiIyIIYpBERERFZEIM0IiIiIgtikEZERERk QQzSiIiIiCyIQRoRERGRBTFIIyIiIrIgBmlEREREFsQgjYiIiMiCGKQRERERWRCDNCIiIiIL sq9cubLQbZhVGhoa0N7eXuhmUBasds5isRhsNn4/SsVq54xS4/mafXjOZk5ra+uUH2vP5cHz FZ+z2YfnbPbhOZtdeL5mH54z6+PXeSIiIiILYpBGREREZEEM0oiIiIgsiEEaERERkQUxSCMi IiKyIAZpRERERBbEII2IiIjIghikEVmRw1PoFhARUYExSCOyot3fgnj+nYVuBRERFZC90A0g IgNOL4SF3kK3goiICoiZNCIiIiILYpBGZDGit7LQTSAiIgtgkEZkNd6qQreAiIgsgEEaERER kQUxSCMiIiKyIAZpRERERBbEII0oQ6K3EvjgPRA3fqTQTSEionmAQRpRprxVgNMLlDcWuiVE RDQPMEgjIiIisiAGaURZEkWx0E0gIqJ5gEEaERERkQUxSCMiIiKyIAZpRBYm+jhJgYhovmKQ RpQlwemZ3gM4VPt3eqf3WEREZFkM0oiyJCxcMr0HYIkPIiICgzQiIiIiS2KQRkRERGRBDNKI iIiILIhBGhEREZEFMUgjIiIisiAGaUREREQWxCCNiIiIyIIYpBFlqhDV/x0eiNs+C3Hp9pk/ NhERFRSDNKJMTfdKA0bKGyE0bAGWbpv5YxMRUUExSCMiIiKyIAZpRFbjSM7YiaJYgIYQEVEh MUgjshr12p3xgE0QhAI1hoiICoVBGpGVcbF1IqJ5i0EaERERkQUxSCOaAtFbKf3g8EBcdynE VedNy3GERaunZb9ERGR99kI3gGhW8lYBE/0Qm8+HsP4yAIAYDkA49mKBG0ZERHMFM2lE+SJn 14iIiPKAQRpRvhRiRQIiIpqz7CtXrix0G2aVhoaGQjeBspSvc9a/cCGG4j/X19fDWxbR3OYs r8WSDN5PsVgMNpv596N2txtB3W0ulwtN8+i9yvfZ7MLzNfvwnM2c1tbWKT/WnsuD5ys+Z7NP Ps6Z6FoHoV76+VTLNRBfuAsYHFRuC5fU5ec4DQEIC7S3hUKhefe6m29/72zH8zX78JxZH7s7 iaaqOXlGp8hxaURElCcM0ohyoQ/KvFWFaQcREc05DNKIcsHMGRERTRMGaUQWwwK2REQEMEgj ygtxYkD6gZk1IiLKEwZpRPngH5T+zzFIE+s356ExREQ0F3BZKCILEJduB6qbISzbUeimEBGR RTBII7KCpdtSj0XzVsxcW4iIyBLY3Uk0Cwgl1YVuAhERzTAGaURWwEwZERHpMEgjsgB9piz6 5uMFagkREVkFgzQii4n1HoZt8Gihm0FERAXGII2IiIjIgji7kyhT1S1536XorQTqN0HI+56J iGi2Y5BGVEgbPwKhgQVsiYgoGbs7ifKhv036P9tsm9OT/7YQEdGcwCCNaKp8DYVuARERzWEM 0oimSHCVTM+O5awcERHNawzSiIiIiCyIQRoRERGRBTFIIyogobyx0E0gIiKLYpBGVEhOb6Fb QEREFsUgjYiIiMiCGKQR5UDprhzpyN9OObuTiIjAII0oN3J3ZThY2HYQEdGcwyCNKA9Ef7/0 AwvcEhFRnjBII8oDwT8o/Z+HAreCwOXWiYiIQRpRwYjeSvM7R9ohhvyIduybuQYREZGl2Avd AKJ5y1tlfl84gNizX4cYmgAWb5i5NhERkWUwSCOyCDHkhxj2Q+g/DACwBYYK3CIiIiokBmlE eSb6GiEMn0y/oW6SgXjkOYhvPw7BxlEIRETEMWlEWYsNtae8X7jwyxCrV0P0mS/5JK46H8Lm j2pv7G+DjQEaERHF8YpAlAGxfjPgrZB+OfirtNsL59wG4cIvK49NCtgWb8p3E4mIaI5hkEaU huithLDjZggl1QCkEhnixEBmj/U1QthxM7D1usSNDg+ERauno6lERDSHMEgjSqd+c/Jt8bpo aS2WHissXKLcJFYbB2isj0ZERGqcOECUztKzMtpMDPkhuDzm9/sagbAfwhnXaW8/8RoiPe/A Hp/VSUREBDCTRpSWOguW0mhn8m3VLYmfnV5g6XbA6dVMPhAnBmDvfD23RhIR0ZzDII0ohZSr AmRC/fjqFsARz7Sd3JPbfomIaM5jkEbzmli9GvjwA9LsTSMGqwIoi6lnQChRPd7hAcrjszxH DLJuREREKgzSaH6TuyPLzWua6QmZThrQK2+EIB8nMIBYL8egERGROQZpRIB27JjaFLo7Y72H IYb8BvuqkMalQQr0OJuTiIhSYZBGlEoWQZp48jVE2v8MYc+9EF+7N+l+uc6aMmlAzsiFA6n3 G6/JlvP4OCIimlVYgoMoT4STr8F24lVAEJKyZOLEAAR5xYJ4cCa2PYuozQnbyVdT79g/KGXh vFXARObj4YiIaHazr1y5stBtmFUaGhrSb0SWkuqc9S9ciCEADs8CLDV4L/RW1WFEd9vSpUvR VVyMkO42tUBJDXriPwvhIJyxCUxCCtIWiGOojG8f6/s9bA21Kdt/qtiFSQD19fXwlkVSbjtX 8H02u/B8zT48ZzOntbV1yo+15/Lg+YrP2exjds5E1zoI9UCktN5wG7HhQ9CPHDt27BhQH4RQ qrtN/bgFk7CtkH6Odu5DTBAglEqTBkaP/gljA9rtU6oPQSgFOjs7IfTOn9ce32ezC8/X7MNz Zn0ck0aUI6NZmoK6sG3XAc0yUsJox0w0i4iIZjkGaTSniesuQ0fzxwpz7JBfWiqq+yBEf3zw /8RA2okCREREACcO0FxXvxGB0iUQq1dD6H079bYODxDWls4QFkmLoYt9rRCqshu/GXv264jF YtKbbFjKnsU69/ObERERZYRBGs1pGa+7CUAsb1ICOdFbCSHHmZS2wJASkAmjnYg98jfS+DbW RyMiogzwSz2RjrjtZgi7v533umSCQWkOIiIiMwzSiPSc8UXQDdbtlImTBisKEBER5RGDNCKZ nDmTi86q9bdpfhVGT81Ag4iIaD5jkEbzm0+1sHo8SJOXbyIiIiokBmk0Z4nqAMyM3LVJNEs0 OOtwRcXF8NjchW4KEU0zBmk0dzm9iZ/jAZu48WqIq84vUIOIcrfBuxbnlm/HmaWbC90UIppm LMFB84PTAzg8EFoukH4//JThZmL16qRloIisxGMrBgC4mUkjmvOYSaN5QyxvSvycSVcokQU1 uOoK3QQimiEM0mh+UgVsREREVsQgjeYns0yaQzWRYNV5AIDYUPsMNIiIiEiLQRrNXdUt5veV mwRp6tvlmZ9cEJ2IiAqAQRpRJkY6Ct0CIiKaZxikEWUiHCx0C4iIaJ5hCQ6aH3yNgGq9TWHR 6uRtqls02xARERUSM2k0Pzg9ma0uwBUIaJa7ouJinFm6pdDNIKI8YJBGc5e8YHoecaYnWVmD sw7nlm/HReXnFLopRJQHDNJo7pqGIE2Z6dnflv99E2Wh2b0s6TZPkbQaQZWzYqabQ0TTgEEa Ua5YooOIiKYBgzTKnSO3cVyitxL44D0QN34kTw2aYSOdhW4BERHNQQzSKHe7vwVx561Tf7y3 CnB6zQvM5ksuweRIO8SJAYjDUr000d+fp0YREREZYwkOyp3TC2HRmkK3Ir1MgkCH2/j2cAB4 +l8giCIgCBD8g/ltG1GGFtp9hW4CEc0QZtIoJ2IeB+eLopi3fSXxNRjerK+XJixcknI3giDk q0VEU8JJAUTzB4M0yo23akoPE+s3Q6zfnOfGmBNcJXnfpxhi4VsiIpo+DNKoIIQdN0PYcXNh G5FmjJrhqgQqItfzJCKiacQgjeYub+puIbG8Kafds+uTiIimE4M0mrOEkur87IiFa2mWWFW8 XPm5wl5ewJYQUT7MWJD2kXUlePzKGtSVFs3UIWm28E1z6Y04IT67Uy6jkbOZqo8mzySdjhUU aM6qdDBII5rtZixIO7vJjfoFDtSVsOoHJYi+xplb1Nzplf7P1woBM7XSAIM0MuC2FRe6CUQ0 zdjdOQ+JGz8CfPgBKUAqNDlwyhNx1fnS31adetB/XsgTBziBgAqgsbi+0E0gomnGtNZ8JBd1 zXOAlCtbTR4K4spZueoW5SYhHIToyCDrYFJLzVTXAcQe+RtOICAiomnBTBrNuGnNchl0CTqC vRk9dCq11BigERHRdGGQRrnJcXH1vOO4LSIimiMYpFFupntR9Cma1iWmiIiIZkDGQVpzhQPf 3lWBUmdu3Tu5Pp7yKM9ZMEtMRIgzWy1AnBiY4ZYQERFNTcZB2u6VHuxc6sHuVbkNNm+ucOb0 eMqjHLJg4rrLIG69TnvjVCYizEBgJyDxxUCcGEjUN7NQUEmUiQZnXcr7K1gbjWhOySKTJgVX pc6p9ZCWMIM2pwjN50FYtiP3MWAzVSNNTa5vVohjE+XAU5R6lnKlapWBCvvC6W6OqWb3Mny+ 7no0u5cVrA1Ec0FexqT99LJqfHtX6nUSWypd+TgUWYWcNeNAfSJLKuSyUKuKl6PFs0KzTBUR ZS8vQVpLpQs7l86PrMSasij2fboB9/5VVaGbQqk43FN+aKz3cB4bQlRYG7xr8T8rvoEN3rU5 74vrgRLNrKyDNK69WXgbvDkuB5NDADNbCAuXpN8ongXkZAKay+RxbOnGs6VzbfUV+PqS29Lu p8FZB098ySqOkSPKjX3lypUZbeh2hwCIWFrhxcqViS6uJm8UQBgAkHpfQQBAeXk5Vq5cNMXm Fl51dQWATrhcrjR/7/TYZYvhahfwUAj4XWxqidDWeADj8/lQPcW/oTX+v9vtjp9ZoL6+Ht6y SNrHTpTU41T8Z5/PB5vNhqH477k+p+2q9gBA0Xg3Ftgj6Iv/XlxcDHe5DyMA3JUNCAJwRScw iUR3fWlsFBOqfZT5ylCxdGlO7VITRTGrIrhD8fbmcr5mm4aGLFd/mCfqxRrN72cu34o+26Dy uzuW+AJWXl6OlZUrsTAmjU1r9C3GysrUr5+q2EKEhEmMCuOa2xeIJTgLWwAAKxuXo1jQThKS z1eDWIMP4+JEe701BfmcpPT4Hps5ra2t6TcyYc/0wYFVVUB5MUKhEFpbE2sVltW6AFSnb8j7 pRfE0NAQWltHp9zgQltTFgXqkfQ8zJRt1eVAzUIEhwbR2juU/gFGpM9aDA8PY2SqL574PgKB AIQF0s+dnZ0QetPvT6y2Q2hJtAEAhPgyhPrXkOitBKpbIBx7KbN2/YW2GzrsH8VkbABwS0FW MBhEaGgYQk2i7cFgELYFiceMDfbCproWjvR1Y/TYscyOPx1cqyHU5Hi+ZqFcPtjmKptb+vyR DZzqQ2vgqPJ7oC4AxEeeDA0NoTFWDcElAgsAd8iJ1mPmz2mFvRz/sOTTeNd/BN889d+a+66t vgKIv0eCPQG0jiXvp7W1FS3lS6D6viN9TqY4JhUW32PWx7U7s1TtloqknhpPnzGaD8zqkWXM 1wgMnzS/f+unISxaDXFiAELv2+n3Nx3rkcolO4hmkWb3MjR7zAfuN7uXYbGzFr8feRkAUBnv mjR6jHbWaOJneZzbBCal+9i9SZRXXHEgS1UuKUjrHC1skDZnKurPdBkMufwG0RynH+S/0O7D FRUXw2OTukQvLj8XV1VdktNYtZtqP46baj+u/F5pMrFgg3ctLi7fNeXjEM1XpkFaqVPAt3dV YEuttnTGlrocB63T3ObwQNz22dSLqOvLdlS3TG+b1JgVo3mi0qmtk1blrMC55dtxZulmAECD SwrO5Npr6mAtk8DNqAaavE/ZYmctAGBX2TbsrjiPddOIsmQapG2plcpq3LBpgdkm81o2A7/z aaXb2is2iIs3Q2jYAqy71Hwj1lYjmhb6IMmIO55J8xS5DW+X7tN+GU/VbQoALtEJj82dtE+v 3ZNxu4gomWmQxuWbrKmkqHA91OKq8yFe/E1pML+Z2RCA9bcB0I6nYxkOmgv0QdJUpVqtQB53 pi5UW42FaHDVTnu7iOabtFf82hLjumh3vq8cj19ZY3gfzVGLN0EoqQa801fI17SbdLq7RP2D pncVKmtKNBOUzJotkT1LVbTWaNzZh3Exrqi42GBrFsAlykXaIK1+gSPptuYKB3avKkH9Agea KxL3F7rQ7e5VHuz7dAPObpr74+Y2lU7hm6kjT4P0Uy1MnudgSshhEXgiSqYfF9ZcvAwem1vT JakO2Dw2488a/X4ai+sNt6vkjE+iKbMBUnCVLsBSd3+qF1lX/1xXUtiKHvLx2VWrJa67DPjw AxCbz9feMdWAavGmtJtkXJrDl6ag4nSU1EgnYJ5VIyqk6VgLc1f5dnyt6VbNbeqALVU3ZibU bXabBHxEZMwGAA9fVoOHLzPvutxS60KpKz9jofSzRWkO8TVmnfkSXCXJNzo8EKtb8pb5s4ey LJ48wSCNZodUY8ey4SnSZtLcNvPeCLetOG0NNjV1xi3XpamI5hv72U3FOQVg6u7OQpOzgXOm hli+DMWLxabqpswHpycvmS+x+XwI6y+D+MZPkM1oMNHXaLi9PTx7V7ggSmWq472MujDVg/uN ui4D0QDcRW40Ftfj7+tvyPhYqQI+IkrNdvaS9OnnVIGYurvTzExlzwrd3WpZYb/0/3QXjs3X mDdZtu3NMEAU/f0p7xcEAWIfl0uhuWmh3ZeyCzMQlQo+y4GcnP066D88peOZjVUjovRsZzcl LoTqYEo9Rk0fiGWaPWuucOCOHeUFn1BAM0TX1ZmyoG2h9LdBSDGTk2i2ObN0C66ouDjjrFqV syLl/Z2hHgCJsWjyOLLByWGDbbuTbjsSOJF0mxz4EVF2bGZdnamyUplkzwDg7CY3Lmkuwe6V qTMc395Vgd2r8peFOX0aV0WY7Wt3ijl0eSqTAcz2ka8aafH956Xb2mQZqJR10fqnljEgmily wNTgqsWVlRfj3PLt2BhfR7PNfzyn/QZiQQCZjXc7OP5u2m0C0QD2jO6fcpuI5rOCr90pr2yQ LpCzCnntzlNj0YIcf4U7x67jPIwZE1zG+xBK8lQ/Ld7NKZQ3pd1U9FZC3HkrxKXbjTcwWQYq bfFaZtvIwgYjUpDW7F6ujCVTz5w0ynqp6WuavTa6D3e334fvd92PU5O9ABLj3eTitSExqHlM IBpAV6Qnad9t8UyanD37Vd9TCIqTmf1hBi4uPxc31lxjWgqEaC7LKEjTjykrdWY2nDubbs6S DPc535UWWb/rWAz5s9retFxHJmPSqldDWLQGWLots2PFC9MKgaGU24nDHRntj5KJ1auBD94D sX5zoZsy55lV8u+cTO6GVNOPExsKj+B4uBPD0VEEY1JwJQdncvFa9T6fH3oV3zj5X4bB4Kmw tN1Tg8/jex0/whv+gxn+Ncaa3cuwqWRdzqVAiGajKWXSMq1Dls1A/pbK3CcXzPTi77UOTlTQ E0N+oH2P9ItRt+hUJxeYdaXKt3tTj7NJos6UdRlcRPoTEwfSTTQgneoWKWPLQsQFI2fDZG3+ 4/hc2x2mXaFyYAUkMmEbvWvR4KzDQrsPADAYGVHGmw1HRzAqjuNUuCcpUDs08S5uO/J1vDi2 F8cm+WWHUvO4fLjozNuwftkFhW6KJeXc3ZlJYJQqozYb66ZFRoDvVC3GbQ3TtzzSbCWOdCTG gekyYeK2m4Hd3wLq0xfDBXQZtjTj3YSS6uza6Ze6O8WQHzj5qnJ7bKhd2t9oopt0Pk00EL2V M7MyxSxTYS+3RHebvBJAm8Hg/N0V5yr3qYMumc1mM13iLBhLdGWeCvfg4Pg78BS5cXvjLcpE g6HIiLKNOqv2lY678bPJJwAAHcEuAMCkEM7q70ol03psNDt5in1w2ItRVsJlJo1ogrS60iI0 VzjyPhuzrjT3Wmpy26ZTqVPA5lkYNKY1OSH9n222KY1Y72HEjr+a+eLk8TpqwsL0Y80ypl41 IZuJC/2tiPUeRvTALyBEVGNtVBMNYm89gWjHvjw0cnYQvZUQdn8b4tZP52eH013yZQbd3nAL Pl93/bTs22NzZ1zkVS44ezR0POV2RwIn0OY/rgRN6eiDt18PPq15rJwtOzTxDvaPvpWUqXPE exWCsZDh/uUuVE8ONdOmY7UFmp3KvDXwuHyFbsaM0ARpW2pdePgDNbhzR+pZPTPdrQhIM0Af /kDNtJbz+MJ7ffjhRdVp1/60l0n/bywp3EUom2MLw1Ix22yzTRnt+88/gXjitcy2zXSpqKky CdLskyNJtwn+QQgv342ijr2muxPe/S2EPffmrXm5mq4izWL1amkcmTeeGc5zMD/bNTjr4IkX cZ0O11Zfjtsbb8lrNf5ALIh7uh/EG+MHACRKZfhNSmHIZTdkQ5ER3NP1oPK7PFHhhdE9uL/v F8oMUFk/hnFg7G3sGTX+UnMqLJf14IoD81GZtwaN1RsM76ssW5LVvjwuH3ZuvhGbmi/NQ8us T5tJU619WVuSfTA0nQGUPGZtOgvWcu3PLMWzTppv4eEAxMn4xIEpjz/LIkhQbxvvRtUP+ndM Tn3FAbPuoZkkd83mbfasjnDObRDOuS3x+8Il03Kc2cpTNL1fSpvdy+P/L0uzZSLI0WeyzOwd P4DnBv+IvWNSCYynh17QZMja/MfxRN+zSUEXAATFkBLcDUQS486M3hMhTOL+vl/kPEmA5qb1 yy/A5pbLUOY179LM9Euop1jKoFX5lualbVZnOCat1GVD/YLsuxanEkCpx6TlMj5tpgvmdk5K af2N3nm85IlReYuRTgijp6Sf0wwcN+smzSbjp95W7kZN2f060m7cFjmwNKmrVkiCPz4TNV91 6MxM9/4picfmVmZoLs4gyyRvG4gFlQBKPxlAXRYjEAviN8O/Q1dECupOhXvw2ODTyv1tgRP4 /dhLpseTJwoMhZOz0UTZctjNr5e+Es7eNZI0Js3IVLs385WRyqTkhzpAnInu2IAYm/ZjTLss MlbTsnrAFAbkixuvhrjxaunnrdcZb2RSGw2AaRCmBJapHjvX5StIU48TnKL+2h0Qt16XU/Hl 2UBdVmJVcerMgFy3TK4/Jo//GoxqA6h01f2zyQ4/PfwCftX7W7w4mtmQhumUSaZxvjmzdAuu rbq80M1IK5PxY05H4SfmWJEuSMvvwPxcFm5XUwd7VlliqisqrTiwojiR/buwvBRfaVyE0qKC 1wjOyHSMUTOT8cU2zQVeaLkAQssFEKtXQ1i2Iw8tm9+mNQjK4UM3UNoknd88FF82U2Evx+fr rseGeKX+QlCPQ6tyVqScQVoZr1smjx+Tx5d1GSzNlC+BWBAvjb+OoGg8IYAK68zSzTir7PSC voYz4XVntmQZJZvxaGLVQm0gmG0R2+kck5ZNW/wxKZNWogrILiwvwQ5fCVYUm2cQax12PNzc gO0Lsh+vNavrsk3jxTbb4rmkoj4v6oLAeSjDkevYtitPjODz7vPzOqBe7czSLWjxrMCZpZkX 3c13W/TrbWZTsPXh/t/gG8fvUQbly6wwjjJbFfZyfGnxzUnBRqbrkc5XcnmSbF7DhZTtJAEj 861Ux4wHaQuKtZmwTIrYZrrCQa6UyQkpsnXuIik4C0WlQY7ZZs0uKC9FncuJjd7ssww1TosG aSMmBSt9DcCHH5ieyvPxgCLasQ/ia+lnYIrDHUoNNMP75TFpZn/LPKCemCBmsCTXdAq5q+Ev smG1o27aswTp6p+pl1vK9ySCbGY7yiUolGWXYkH0xPqTaqb5I8mTANTU2+uXeiqUZvdyNBbX Y1eZduUQOXsIAO4cyndkYlfZNty19I68B4YV9nLctfQOXKlbiiufNpasm7Z9Tzd5IkCmHKr3 4EyV4Tjv9FuwaVViNmll2RJctuMO1FbkPrQjnawijH3d0/uGNquDlo+xbaVOIeOu0lTZumUL pIDxD33jAIAV7kTbvDbp6VR3gZpRP27WCxu/LgRXifRDPirPO9zacXHx8VPC6KnMMgfP/hvE P3zd9G7h6HOI/vImCN2cnTbdxPPvlIL38+803yZfBXXzYLoyeUbcNnfOQYI+s5ZKuuWjZkom f7O6BMp0FBfe4F0LT5EbZ5Zuyet+Kx3l8BS5p738iFXH7KWaLOBx+VLO+Ewn2wAvEw57sSb4 qyxbAq+7HE01G5Xb5OAsl7ZnylKDp0qd6ZtjFmilK3T708sW4eHLpvcJXeWRXowlKbJrtdOQ Dat12LHBW6zpDl1Z7NRk+cQhqVZaptX+p6y/zXgGZaYXXZPJDKm6zkS5WK/MZHKAzZb69ZXu /jmpADM65XNpdE7F6pb8rXgwi8jFYm+q/Thub7jFcBv5Imy0qPl84rG5cXvDLbi2enoGzFc4 8pNJq7CXa4LPfGcCZ/LLQy7MAhmPy4fzt34OvtJEF3+qgG6mbFp1Kc4bgculAAAgAElEQVTf +jnDLJ18m9zlWulbMu3tsQHmGbK2gakPFs2ki1K/zaqFDsPHqQMzsyxXqgDv7KZi1C9w5G0i Qy6mo8vytoYq3L28Hj9b3YTSIhtqHXbct6oBty1W1dWSA5eZWE/RKEgyOm5/W9JNmU4GEOT9 jXRolnCSbutUxqkl3UdaUwzSRG/llGb86icqiKrji0u3QzjnixC33yz9PpHdmqkbPGtyyq54 bG5s8KyZ8uMB6cKcTUZDzq4c8r+baEdR6mya0ezNJweeR5v/OJ4fetXgEYUnd8HK64DqySsR LHamH5PX4KqFp8g9bV18lXnq7ry94Rbc3nCL0k2d72LI012/b7oZZcFmIjOVjhwoGgVgcptn slxIyqhlPDz1CueZdFHqt9m51IM735e82kGukwXOXpL44LbiWqEri534UMWCKT9evfrAtgVe JRDcUGKRKc15KMmQRB7wbtLVinhwJk5ar+5Z1voPA5iBFRuysfNWTQFcABBXnQfR15gIoOXb vZUQV50n/aKfQOJVfZGQA7Z4IHe4WJpBnS7oOafsLFxZcTFuqrsW5+jGNKUiD9KXMxxXVEr7 yGUM3Ceqr8Df19+QcZYjUfdM+4W40iCbIw8SNypk+8zIC/j+qfvx2NAzGR1XrrE2U5MM5C5Y eR1QPTlY9dpTZ1Er7OXTtjyU/DpIt1boOWVnZXR+PUWJGni58tjcOKfsrJRfQrLJrDU467Ap ltsXkkKZ7okDcpFcOWBUB5NlJdJyVDOZ8St8akkn05UOrl5bolm+KdV4s7Ob0nefpOouPbup OGmpqJ5J6QKyyGDGZarJBHJApX7c39ZV4Ob6qrwUxlUHe6VFM1+uJJsPfWWwfp6PNxtnt00r hwfiukuzK7eRIrAW6zcr5VvkbJpYvRrC5o8Cmz6iCcREXyOw8SMQNn9U2jZVG+Rxhi7p8aJZ AK7S7F6Gq6ouwa7y7QCymx0pX/DkDEdDPIuT6mJXYU+9ZJ4cbOSa5Uh1HKPVAYDsuuvN1ti0 ukpHed66I/X0Y96MyK+3ixfuSrkv9ReLXNYrlZ1ZuhlXVV2i+RKif424s8giX1l5MXYJZ834 OLZ8dA+qAyR9sFTmrUFL4/uzCqIc9mLDx8jBoLrb01GkXQh+JlY9sAFAz0TUdIOxkPl9U7V7 lQef2bRACazUxzCa7akO3EqcArbUuvAPZ5bjzvclvpXps21y0HV2U7FpN2epU8AdO8rRXOHQ dJeqy4SUOgV857wqfOc87ZI83RGpzXUuKRuoDswymRQgP04tkwkHavpxZ0BiXJx6m7yYhnpa SgHZTBkFDiYrCBCk4GzrdRC3Xgdh/QeAxQazbKcy/mux+bhGfRYNTm9iofXqluRF19Xdrfqu 14m+tE3RZ1Wm2t3psSXW5kx1UZUHrN9Yc41hMCdnTtQXzCsqLk7KzjU461IWIa2wl2seJ19M 9asLTNWj/U/hkZ4nkmaGWkG6SQTq7sh8Tx5QjmESCMrnvNm9XDmH6dq7Kg+BkPx6UgdVU5lg IrdZ/jLx3gwmSZR5a7B19VWmgc/6ZRegcZHxupyAeeYrHxkxfffo8vozsHrJ2Snbo7e8TnrM 8rozNLcbBWCVviVJx0z1/KR7bjJhA4Du8YjpBkeHtfflI2i7830VuHFzmRJYHRkKa+7XZ7XU S1S1VLrwmU1StijVGDM56JK7OuV2y4FhqVPA//xVFS5pLsENm7RdjQuKi7B7lQff3lWh6ZJN lW1LVRtNaZNJhk3OqplNKigtsuErjYuwfYG2q6ikyKYc9+B4IiulDvZSTWLIiv7imq14gJXp YuwZMxr/Fu8eBOZOVk2pBacLqsSl2yFu+6xhsCUu3gxh2Q4IDfEPYqMgdypjFKubk2+TA6x0 9fDk14G8vqo6MMtDxfFMxjQZUWfg9LPw9Nm5M0s3Y1PJupTZFPli3uCsw7nl23FFxUWa+zd4 1+KsstMBSJMGjoaOa+5vdi/DueXb8YnqKwBklyXJxKlwD16eeCOv+8yF+jlXB0j6ILzBWafp jswmc5qNnWXbcGPNNUm3y+fBU+TGlZUX46yy09POBlVn6KY62D9Vxkvuuk71XDQ46/D5uutx Y83HcFbZ6cqXiY3etVi/7AJsW3+tZnuPy4etq69CZdkSLK8/A3VVq5OCGHm7FYvfi79YfqHm 9jJvDbatvxZl3hpNyQw1o9vXL7sgL7M9zY4JSJmzrauvUoIn5TH2YsPMnPo2X0ltUnC5dc1V qKtanVSOw+y5yVbSFfzJtnHl54lw8tJH+qBNLd0MSz2z8WHp9nO6wbJPcjDVPa4N+DbXSMd4 pUPqIpADwy21LiVrZzTp4Oq1Jdi51KMJ4O7Ykfk3l7+trcBXGhdpbjML5OSsmlkGbtsCL3b4 SnB5VerpxnKgtr0sccGuceZ3FQmNNAGSwteg/Cj2t05LU2K92uPKXalJMz9nKTFevy2pftnS bRAathjXNdNnP30NEHfemvUqA2L9Zs3jDFeqSDUBQZ6xqw4SDV47+tme7UFpXGE2gZfX7sEG 71p8vu56w0yDnAW7uPxcze3qYEA/uF2frZEzI83u5fh83fUpL7xyt6d+LJb6gjqoWrxcJgci niI3Pl93vRKsHZp4x/RYs1mmY7d2lp01zS2RbCpZh00l61IGR6nGrpkF1fLrQX6N5jJDU+72 HQxLr59UWcUrKi9Ci2dF0uvwzhPfRVlJDarKl2oKzTYu2iAFZvVnpCxzoQ5w1GorWlBVvjTr OmK+0tqUmadNqy7NaNC+WZu3rr4KW1dLQZU+SCsrqUkKEGsrWjRBmcNejLpKaYjHZPwzTF5N QT8bVP3c5BJ4KtHJWCiK7vEwvvnqCD7zeA9u/m03vvHKUFY7y6SEhpqc1drfox0fcfXaErx4 Tb3UVRmf7Zkugydn1XomtIGlnIXTd+mqM2RGKw3IAZx6u0wK7wLA8mInrqjyYYevJKtVAozG twFATYp9yJmyiVjMMGuU6rFToQmGUqxzKfYlgjHBVZLoBosXlRVD/pRdlZmsIqAuTqv/24U/ /wThp78yZ2Z3mmUE9ZMJxPPvlDJrQFKWTHCVQFi0xrjbM5Wl26THNZ+fHOBlMClECeocbqW9 4qkD0m0pAsYJv5QhSDWY3OgielPtx9HiWYGNBhMAGly12FSyDrt82zTZG/U4J7PB7YljJgKo Fs8KpUtSfcE1GjelHaeUeWasxbMCniI3XhvdhxfH9mb8uLko3bmZqownehh0hRu9BtPtr8FZ p3nt6H1p8c24seYapRCuHBAudtZig3ct7lp6h7LWq7xMmJlm9zK0eFYk3d4e7cJgZBj+YDzI Mwhs6ipXK0FRNt2T8tizqdQxMzrO+mUX4OyNN6CpZmPaumuA1O7zTr9FEzjVVrSgrmo1qsqX arZNRT2Grn9EOzRgLKAdjpGqXbl07SpR1WU/78bVj0gfikeGInhzIIoJbVIq5dg1vUyyavJa oft7JnHOgx24/Vlpyn1LpQulLhvufF8FXvz44nibwklZMsA8G/eFM8rw4jVSmtkowFOX+mip dJlOPEjVpSpnri4sL9XcvsCeCIxWuJ14Yu0SfLVpUVJWSz9eTD1OrbTIhifWLsFdS2tT1laT uzaPBiaN2y93d8qD9KdQckHceDWE9Zdl/TgNpxex469CGO2E8Nw3EH3yS6b1zABAPPJc+n0a lPBQhAOwT1ijUGc+CefcZryCg68RcHggLFwidW86PLnNBlUHX+VSJlRYvMm8OzOD15WcKRND /sR4xHg3ulE5j1y7qhcbFA+VB1vrZ96dtUDbZSVXnvfY3Jr6VnL5BzU5K6aeLNDgrIXH5tZc rOWfpzKO6rnBP+LhvseyfpzVeQyK9xrN3lSPxQtEAzg4LmUUs+0G9tjchtX/zSZ6NDjrNOcr XwVpU2XoKuzlaCyux6aSdUohXJnX7sGZpZvhKXIrAetwdETap2c5vrT45qT9mc2GFQRpsokc pKmzPUaD842CEHUQZrTkk6fYZxqomd2u76os89ZgxeL3auqpJT0m3jY5q+WwF8PrLtccQ5/V 02fAqnxLsf20TwAARsa6ldtknX1vKtkzfcAGJAdi6ucj50za/h7pAp9udlD3eATjk5kFatlm 1QRBwISuJ1UfIOmzZLLdq6QPenW9t+Z4oAdIAZ78N74/np3Tl/+YSpkP+SLyxYbqpPFisgvL S1FaVITtZSVJWa2SIhsu8JVobpMDtw9VlKG0qAibSj2m3aT6oG88Kp0bdUZO7kIVh6Wsk3rp n0yIS7dDaLkgq8eY7ks1Hq0oNhlvl/kyTOLEgPYGfdbFoOtU3+05Z6izlvK4LnVg5PRouzx3 f8t8X6oATM5wxjr3G2/r8CQyYU4vsPVTxttlEfyL6qW3HG7zyQtyAeYUUhUIbTDoJk032Fqu QSZXiP+nxZ/VjCmSs2hqRkFXY3E9vtZ0qyaIqLCXS1mQZXdousoGoyNpsyFvBQ/PmfGVMo/N ja813ZpUvLfCpJaarDPUo5QhMcpYyYGVJrMZLywrB9mneTMrP+GOt9Eo+JkK/YxMJcBXtVc9 Jm+DJznTpn+9tQWPKz83FtcnvcbNJsIERekzuH9Eerw6yDDK/OiDJ4/LZ7oWpzq40ZSw8NYo QZFZkOYrrVWCmq1rrsLOzTcabgdIma7KsiW46Mzb0NL4/uT74+1z2Is1KwaoGS3+PjDajtHx Hs3f0jvUhtfeehiT4QB6BlsRCI5oHmM2Dm4yRTIiE1mPKpeDnXzq8WcW+BkFiM0VDs0sz3Ra Kl346WWLlC5OOcuWqn5a93gYL7f7lW2NMnNm48XUA/c3lmhP4uWVZfhH3bi1yyvLUFpkw+VV ZcptK+MzNo/6tVPvv9hQjQ3xsh3+qIhjQSnTqM7IedME3uoMhuhr1F74gbzWOLONGXQ9psqm 6YM0XVuEgRSZtLlG/TzJ3ZjeFAG30wsx5E/fbRzPjBnNtBWrWxIlNuTiwHLpjUwXtZfro6mp VqUQFi6BuP2zhq8zIRJAR7ALgPnFOFWB0MbiejQ467CqeJny+HTlG3498IxS/b/BWZfUvWY0 dsosUJQCPe2EBKO/Y3ByWFNWY89YcsBsVBtttpJqnS1TlmHSP6dnlZ2eNGZQ/fykmpG6q2wb bm+8RQr+Gm9Rnm+5sKwcNGfabbrBuwaeInfK19liZy1WFWszY2aD+OUASn7NyAHXtdWX4/bG W1BhL9cE9kaZO/1YuKGINljQz0w1y/71iYMAoGTSfCW1KTM++kzWzs03mgY+Mv3+nA43dm6+ MW2JjJ2bb0Tjog2ZdUnGA7EVi99ruo3RpAf1Y/Ui0RBG/dr3XDgSwpi/D8/svRsnuv+MQGgU AHC0UxqC4Cut1SxzJQe6h47+Dvvbnkj7d5jJOkg7MmQ+caC2pEjpNnx/vK5YJut99oxLQY9+ bJra/p6Q4bE/si6RiTKa6GC03/oFDmV8WaqJELLu8Sj++fkhHOiV9tM2mD5Q7QlJAZO60Kz6 ZwDYXlaStP2FCxfg1voqwxpn/3GqHwfGJpRtAWBTqbTPYyHj505fksOUwwPhwi8DO2/V3q4L 2oRAYpxi1t/sjQIyg3Ft0Z53IZ7aD+Ho84i0/1nJtsn1s2K9hxE59H/a/aXq+pxr5FmQ6gxU dUtSoBNt/QNgsBap0g0af7xRwCUsWg3hnC9C2BGv/n/yNURffzCxQfse6X85u2k2M9NgVrDo HwDCAcRan40fa41pNi0Yvzjru6POLN2C2xu1GRg5uFK7vfEWfGHxDbi98RZ4bO601eT3ju/H o4NPAQB2+cwL46qr/jcW1+OcsrMMu5XUWY1mz/KMZiO+PrYPzw3+Ueni6wh2mdZGm03k83N7 g3ROPrHoCs39B8ffUf7mXb5tmoyROtN4Kpw8jOGcsrNwTtlZeG+pNBRADvzkwFgOBi8uN56R K2e49CVOtFnUZUrAI8+oBKQuyC8svkEzvixVl/Z7SzcnBX3y6gn6QF4O5jqCXYavb9mTA89j ICR9Nq8qXo73lm7GxeW70mSOpc9vf2gYHb0HpVmPa66S2h8PjuRuPz2jmZAtje9Pyq45He6k UhaZDqRfXndGyi5O9f7U/6vVVrSgcdEGJYDTZ7VSjRXTB2ky+brXPdiKvuHj6Og7pNy3c/ON 2Ln5RlSWLVHaE5wczSkLblMfNBOpAqn6BQ7cuWMh6kqL0FLpwlgoigcOjE25cXrjk4kgTB6f Jo9raxsI4f79o6aPPTKUHFhJkyWkIC1VEV05+NMHiXL3opE3/dl9qPaGw3isX3oT7oh3gX63 I/Ei6QmFcSwUxpdO9qIvkj6wVPtkdXnaUhxyV5l+5p4y0Due1UrKbiExgzJVV6Ppfbo3TWyo HbZXvgfb2Cmg6wCKXr8vObh750kUtT5l/sfMQerCv8osyDTlM4TgEOCXvi2LEwOIHvujdp/x c67pfoRJF3R/K2ztexD74w8QO/5qYuB/PAhLtbYqgMRkEQCCX7qYCIceUSZ/CC3na7YvGjcf T7irbFvSBR6QZknKFzKjpZMaXLWmyxIBiQv0UFjKTKSacajPbF1VdQnOLE0eK2h2MU5FEAT8 Zvh3uKf7Qbw2ug9PDj6X9jGzwVA09fN6aOJd3NP9INr8x+MLnW9WMp8hMfF5ejR4EsGYdH4r HOX40uKbcVXVJbiq6pKk51vq4kwEPfqgS70dkDpL57Ylsn5GxYAzmXywy7cNn1x0pfL74vjY RbN9yO19bPBp5flTkzPNz4y8gJfGpC9OG7xr8MlFV2J3xXm4svJi5TWvf0+MCYlKDgeOPAkg 0fUn/3/g6JM42b0/adyaUZBVVb5UCfL09MGRfhFzI3KANhkOoG/4uHL7yFg32nukzx99cVmj fWxuvgwOezFGxrqTBvunChbHVHUa5eNp7vf3Ye/bP8d4oF/pGpUDs5bG9yvdn5FIKPcgLZUj Blkj/W3qAf1b6oqxe6WU8Xi5PWCa3ZLpM21GkwOU46qCJP34tP98YxRHh6OGXaJHBsMYn0xe 4urIUFiZDKGuxabXNmjcJrl70chjA8lvKNkfhpID14MTQTzcP4LxeJHc77T34NmRCfx+UAo8 e8PmxwKAQ/4QjgeNM3yfqFmIzZHk4EpDvYai3MUVv02cGEhkqgKDSQ8VRjsR3fcLxFr/kLjR r9vOrFtTFyCk6v5UjpfqBZ9ixulsJrS/huibjyu/i+suTa5Xps96+oekrBWk2ba2fQ8pAZgY n2ig7E+9+oMuKymG/BDiGTmh+yCEP/9Ecw5EVZdmUlZOLr8RDkD80/8i/KefQRhQzfzVdbPK XwLkMYsd8YyFnKXy2Ny4smq3dF/8AiXrDHWjLSRdZPeMJncZripernRzpcpKyEsYmTErKFvp TGRjWieOJbXNjDzwW27TQDjRtp/1/wZvB+dHlvjUpPS8vxgPNla5lymZz87JbtzX/TB+0vUr BGJB5RydtWBLyq7IZvcyw7GJU6EOoIyCuQaXNPPyHIMyIfJrVR+geu0eXZd4rWm2dcCgVIs6 WJSfE/XzsbFknfKa1497HBe05YmMJhCM+ftw6NjTCExK1yE5CEk1nsyohIY+K7W87gzDsWBG Rv29ONKR+IL59olncfDoU8rx9GPB+kdO4J3jLyTtp6P/EAZ1FQXkv8MfHMY7x19QnoPB0XYM jCa2bW1/JWUb/SHpPdzecwCT4QCqypcqQaZZRi5TaYM0o/U7v/HHIXztpUSUqS9Ge8NmaTzV I++MG3ZRvtye+CDXZ+a6x42zU+nGwumzXfu6g0oAKI95u/3Zfvy5KxEEHBmc1GTnjNoj7VvM qA0A8OroOP67vRfHQmFNgVm1nrBxJmw8GsPX2nvw5WOn8Nyo9Nj/6BrADzr6cG+XeZAlH2ci pv1bDk0k/taeviPGD974YYg7bwXWXZK4Tb54x8c8iRMDwMFfShfYk8bFaG3HnkdR75uJG/RB mknwZJSZS6LvyjQo3aEEGTkO0rSscAC2w08mun7Xf0DqJowTFq2WZl+qCAOtEE6+hsiffw7x wC+U/QCQxqLJmbj+Nm2wFJ+QIQdcosk5BwD4GqTloOKUem7x86pkZkc6IXQfhP3Ei5qHJ9XN O7lH86t84ZEvXKtUlfcfG3xa+flXvb/FU0PP47GBp/FIzxN4evgF5cIoLzoud18OTg6jczI5 aFIHUmZBVSAawKP9T8FvkKmTtQVO4Hej2r/ziMFFvSPYhUd6nsDBeO2zH/X8DD/p+lXSGKO5 Yq9qrJ08O1NNPtfyc6XPOr7pP4w/BQ4lPc5sf4DUXWhW8d9s6S2zc78hPtkgEA0omTw1j82N KyouwlVVlyjjxu7rfhh3t9+H36RYU1Xdjmb3csPJKYORESXDq6buBk83+UT+YnVw/B080vME OqENHuRAQ54Fqe7qlAfJGy2VpGc0Tk0/yF4ug6EnZ9zkYAmQMlHhaPJ1WZ5hqQRD8WzW4Eg7 jnYlf2Z19r2ZdJtcXqR7oBVHu17D6IT2OXn9nUew561fIBhO3SP49vFncejoMzhw5Ekc70oU ic510gAgrzign1aZxpGhCH5/PBGwGGWanmwbx9FhKTjSZ8fUwY5cZFamz5LIg/QnwjFNAPXI 2+Oa7eTgTA66njo6gX9/dRif+nWnct8rnSEc7Eu0pW04jJdVx+8eD+Opo8nFT+W/T87SyVm5 iUhylvA3A6N4YlTaxyF/or3HAtLPcqbMzCF/CHv92hfk4yPjOD5pfo4OThh3rR5TZdaGR3qN xx4tXAJh0RptN6d88a6PX/T726SSFroLbDbkjE7S8Uc7EXnmq4i+8t/SDfrgDoB48tXEzyG/ cSHUo88h8tx3gSPPTrmNs4Lqb1fXiQOgXTNTFfwWHX8BNvlDTn5+N34YWGpSGLTrAKLP34XY U7cj8vJ/Ae8YDHqVB/67EuMqY72HIQwcUY6vWV3C7MNK1bWq/nuco9LMzo6QFGgt1q2r2RY4 gSPBk/hex4/wUO+jeGn8dYQwiUAsiJcn3kBQDOHHvT/H3e334fVxqavCU+RGIBrAfd0PGw7E H1Z1JxkFVf956n7824l70BXpTTmQ/2jouCYbBgC/Hnw6KXt3aOKw0lZAClLMgpC5YO/4fuU5 +HU8wJa74A6Mva1sF4gFlUDJrGCsP6L9zHtx1PiLRGNxPRqL6xGIBpIyoOrxWvKXgOHoiFIc Vn++5AxVZ6gHL4zuwfc6fqQJ6Jo9yzUTEgLRAN70H8bxcOrs/pWViXIgZouyD0VGDANDdWAW iAU1waq6bW3+40r2702/9LpLutbGu/fk2mBhVZauZ0j6otxYvUGzTSoDo4nZ2YHQqBJE6f3x 4EP4/d57sPftX+LFfT/GKwd+gjfefVS5f3SiF2P+RFJIHrA/NKrthenol947kXi75QDpaOde vLz/fxGJJidZlHFjYWmfB48+iZf3/y8Gx6R99w4dQf/IsaTH6QUmR3GyZx8EQcCJnj9hMhzA ZDiAN975VdrHpmO/7rFT6BlPzpZlons8DK/DhgO9yUHaAwfHVNtFUVOS6E5sGwwrwZc+03Zk cBKnLXJhX3cQP943gmMjEVS5BRwfldooP06d4WsbUAVv70zgcH8Ih/qNgxp1QHp0KIKe8SiO DE5i+UIn9nWH8Ep7EDCZJHJkKIJ/2ivi9Xf7AQj4zdAojgQCuHrRQqyPTwqYiCYCN/W4tN8P jeM6twvHgiH0GmTS+tIEb2rHgpNY5028kfeMGWfsxlVt6YlEIY50QKheBUC6iAreCkT3/QKo XIGixYkUtbD+MqD5PChv4S5tf7w43AHBtzijtsbeegLRnndhHz5quk3ReBcw3oXIM1+FEBiE vjNT8A9KAUBZPaIHfgmz0YNFQybZwrlkpBOoWoloxz6pYK/LB8d5/6jZJPq7r0EM+w2fJ/Gd JyA0bdWOIdN3OQOwDcazl73J3z4BaIIucWIA0b0PSrN3fYnsnNh1AELT1pR/jjDaiejrD6Jo y8eAkU6Ik34IAIT4RbhzshuBaABVzgp8vu56ZfyOPHj82KR5CZehyAiGkOhKdBe58L2O+9Ed 7YMwIeD8hTuUbQPRgGZW5d6x/djhS7R9cHIYR4LJJUEC0QDcJhdV/X2/Hnoan1h0BQYnh7HQ 6dOMs5ov/rP7AThjDgzFRvCvJ+6CKIrw2NxJqy4cCZxAvSvR7RbQZVJOhXuU5xGQxgi2+Y9j hWdJ0jH90QAe7XsKFc6Fmvt3V5yLXb5teGzwaSVrd8j/Lg7538Vv+59Fo6ceV1XvTtqfnL06 NtmBzskeTTvVx/x+x/3K722BE6avFTkoM7tf9sLoHnSEuhCLxXBhxU7Dv/VN/2GsL5EyYY8N Po0baxNLWz09/DwOT7SZBo2BSem9Ig/0V2e/egbbMBkOwFdai/NO107Y8QeH4Sn2oW/4OARB QGVZE0bGutEz2IqKBdLnweBoOxZ4q7GgRFvNYGSsG0PjUnv6hqXESygyrtmvHHT5g8OwF7mU rtfuwVasbDhL2c/xrj9heLQbwxOnlGPWVKzC8a43lEzYoKoLU97/ZDiAjl4pwAtHQhiJaIdR ZCscCeGl/fcjFothMpr7ijd2OfiZis883otYLIZVldoX1i/eHEGvaszYgd5JbKgpVoK6Hn8U H320G7FYDPoeVzn4OjI4qQRaE6qATH6c+phtuu5WswANAHrGE+2SA8QHDozhjvdX4JX2IMYn RfzyrVGct9yL3okoqr1FONCbiMB7Jl0IRG0ApDa9FQzjtdEA1pd48J32HhxTzbw8OBHEeCSK 3skw9oz7cVXEh2PBSfxheBxXVfqwyOXAeCSKEnuRkmnLhBx8PdQziN8PjqI/JirHU5ODwf3j 8RdK10GgehUiex9AUcdehF1lsIdGgOAQsFg3jiCelREnBpKq9osTA4B7IUR/f1JApZAv/CMd KQM0taJx8zeHsOdeRGxOqb3zmDjSIT3nJ1+DEAnCHulGrHM/hLAcc7wAAA4aSURBVMqVSrbS Nma+cL3gH0Ss9VnYVp6duDEchBj2m5/LNGJvP5EIkPsPI/LMV5VzKX8ZSMXWvgfh3neVcxs5 tQ9lVaWQpwG1BU5gfUmLpmq6PH4pU9/q/AGi0SjCNuk9cSrcg2+e/G8sdPrwyZor8dzQa0pG S76/zX8c9a5F+GbHD+CPBKB+gqS1NnfgqcHn0eo/jvcs2ID3lZ+BQDSAwXh35fPDe3BBxfuU xxyaeBf/fuK/0BXpha9oAUZi+ZtUNVuou3KHo9IZNnoeXhh9DVtK/wKeIjfa/McNxwnuGduP Cyrep5QwGdQNrJezdN+PB+YrxCYAOzTbeIrcuKpKGupxYOxtJQALIIhJ1ZjjPWP78Z7S06S2 jSQy+12hbqD0NE2A9Wjfk9g//jZGRW1vz0H/YWUfRu38z1MPIhqN4rq6D8MfC+BUuBfvKT1N kwE8GopnsONZsGHd33zI/y4C0QA6Qz1oC5xQAlf570qV1VMPlAeSx2F19B7CsvrTlbFkk+EA Xtp/PyYjATjtbvhDI6gsa0RlWRO6B1txvOtPGBnrQSgcgD80iLFAHw4d+R12veevAUhdiQMj 5rUQuwdasaz+dAzEs/YvHbg/HjPE2+vvQ//ICVSWNSlZPzlAA6Ss2KEjvzMMlPpHTuBE95+w ufkyHDv1umGWLRfpukezIezatStllHZ6RQT/sF76YPv6fhveGDIurPq99/ixvz+G770tZcxc Lm3dsYmJCXg8Hvj9fni95oswrymL4o6NYXz5jRj2j5kvB+MpiuH7Z4TwSlcUDxx1IYTM1qj0 FMXwjc1BvNIVw0Ptia6aYDAIu90Oe3y1gImJCbjdbgQCgZTtlQUCATidThTpSmeEw2FEo1EU FxcjGAxCEAS4XC6chghudttwVyCGVyZCcLvdaYsJyzbaYviEPYa7AjEcKdKej392RNBkt+GF UBT/F7Pjn10xPO4P48n44MpgMAiHw4GioiKIoqi82Y81fwqiKEJ0uFEUHIJn8B2MNu7EgpN/ QPXQn5LaMDExkfZ5UR+LEmKxWMbn2oj+tRaLxRAIBOByuRCJRFBcnL7sit/vx1Dz5fCXt2DZ oe+hKBbCseZPwRYYRNPJzFL0x1uuQywWQ+NbP1DeN3oDladjsG4H6t65H97J/sz/SJ3oRATX uj6I2qJqdEV78aD911Pel57+va8cMxpFKBSCx2NSHkT3OL/fD1EUlfeFS3Ti8sgFCGESP3c8 mbf2zhcbI6ux3XY6How8iiFn8sz9BWIJrhU/gD+H38SLrjewQmzCB3Ae3o0dRSPq8MPYz9E3 OaD5nPp05AoMi6OoLarGW5E2nIh14jKXNPHlZ5EncNyhDWI+FrkEoiji5/YncU30UhyLdeAZ x8uarsJAIID328/A++zvQVAM4d7oz+B3JGdJG8QaXBo7FyfETrQULVfa+bPI4zgaaVfaGYlE EIlEUO2qxMdjl2F/9G284Hxds68zY5uwWVyLH+GXGC/S9qRMTk4iFouhuLhYOeYzsZfxjiP1 l2Wb4MCqqkthL3Khe/gg+gPJk29CwQhWLDoXxY4FaO1+GrAnd8EGg0HYbDY4nU6IohReqJ+v ZQsvRCwWw7GhJ9POepTjBrPtnLYyLK04F31jb2Ew+FbKfan/xr7RdzEQPIBgMIiioiI4HNO4 xjWA1tapr1ktNDU1pU2lxWIxxGIxFBUVmT5ZoihCFMWcLj7q4wmCkPYEiqKotCsb+Wyrep/Z TrONRqOw2WxTmp5r9lhRFBGJRFBUVASbzaZ885D/VrN2ys+JIAhKECH/P9cqnROUD0/1+yfb 90Wm779cXuf648n7yud7dzpNx2fNfJLutaP/fJO3N/vsUn/OqT/vRFE0vL6pX+PpzmUkEoEg CCnfD/K1Tf9Zm+nfp39uMrn2ZXo9BRLXD7vdnvJaH41GTb+YZXKMqVy3zWTz98nbA+lXWLKK jII0IiIrmMqXISKi2Wp2hJJERMh90XUiotmEQRoRERGRBTFIIyIiIrIgBmlEREREFsQgjYiI iMiCGKQRERERWRCDNCIiIiILmlo1OgtZWFGBT153PZYsXYa+3l7cd+8P0H4ysTjy5/7+H/DL nz+MjvZ2fOBDV+D8C/8Sn/vbv8b4uLRkx5nbtuOj11yr2afT6cTNN92IiQntsh7r1v8FPnTl VfD5ynH82FH86N4fYGRkJO19+d7HbDeT58xmsxnuAwBO27ARH7ziSvjKfDh58iQevP8+9HR3 Q4/nLPdzBgBbTn8Pdl/6AdjtdvT39+GBH9+H/r6+pGPxfZYfM3nO+D7Lj3ycs02bt+DSD34I 5eUL8e7bb+GH//MDBALJ6zvzfTY7zPpM2nXX34AD+/fh5ptuwDNPP4ld552v3Ge3O1BbV4eT J07gxr/5LCYnQ5q1vwDglZdexF9f/ynl393f/TbefuvNpIu92+3Bp67/DB788X34u8/ehBPH j+Hqj3087X353sdcMFPnDIDpPsrLy/GpT38G99/3Q9z8NzfiSNvhpMAP4DmT5XrOfL5yXPOJ T+I/vvstfPH//T0OHTiAj3/iU0nH4fssf2bqnAF8n+VLruesoqIS137yOtz73/fgc397E0Kh ED7wocuTjsP32ewxq4O0yqoqVFZV4ZmnnkQ0GsUrL72IH937A+X+FStX4khbGwDgsUd/hcce Tb0moc1mw5Ufvho/feh/k+5bs24dThw/jiNtbYjFYnjyiSew/i9Og93uSHkfAHzru3djxcpV Oe1jrpjJc5ZqH6II/Pi+e3GkrRWiKOKN1/eipqZWuZ/nLCEf56x6UTUGBweVLMyhQwdRV1ef tB3fZ/kxk+cs1T74PstcPs7ZyuZmtLW14uSJE4hEwvi/3/wap79na9J2fJ/NHrO6u7OhoRE9 3d342LWfxJo1a9HX14ufPPgAurtOAQDWrluHt996EwA0KWMzZ7z3THR2dqKzoyPpvpqaGk2K PhDwI+D3o6KyIuV9Pd3d+NEP/wenTnWiuaVlyvuYK2bynKXax/DwEP70RmLR4tVr1qG19bDy O89ZQj7O2cmTJ1FaWorGpiacPHECGzdtwlvxx6jxfZYfM3nOUu2D77PM5fuzEQD8fj9KSkvh 8Xjg9ye6PPk+mz1mdSbN7fFg+YqV2PPqH3HrF/4OB/fvxw1/fZNy/+o16/D2m8YfKkYu+MuL 8NRvHze8z+FwYnJyUnPbZHgSTqcr5X0AcOjgAfgnJnLax1wxk+csU2vXrcf7d+7Ez3/6kHIb z1lCPs5ZMBDAww/9BF/80r/gru//F3a872z8+pFfJm3H91l+zOQ5yxTfZ6nl45y1vvsuVqxc haYlS2Gz2XDe+RciFovB4dBmsPg+mz1mdZAWCATQ1XUK77z9FgDgmaefwqKaWni9JfF/XvT1 9Wa0r6YlSyEIwMkTxt9QJicn4SrWvsBcrmKEgsGU9+V7H7PdTJ6zTGw947246uqP4jv//g0M DQ0l3c9zlp9zVr94MS770OX4x//3Bdx80w342U8fws1/9/mktTj5PsuPmTxnmeD7LL18nLOB gX7c/6Mf4hPXfRr/8uWvKl3V6iwawPfZbDKrg7SB/j54PV7NbYIgIBaLoWXNGrzzzlsZ7+u0 DRuxf98+0/u7u06htrZO+b10wQK4XC709/elvC/f+5jtZvKcpbNh4yZc+FcX4Zv/9lX09vYY bsNzlp9ztnrNWhxta8PAQD8A4I3X96Kyqho+n0+zHd9n+TGT5ywdvs8yk6/Pxjf27sG//NMX cfsXb8Xx40fR3d2FcDis2Ybvs9ljVgdp7SdPIhKJ4KztOwAAO3ftQkf7SQQCfqxduw5vv5X5 Bb+xqQmnTnWa3v/Wm4dQv7gBLavXwGaz4eLdl+KNvXsQi8VS3gdIU5E9Xm9O+5grZvKcpeLx eHD1x67B9+76runUcp4zST7O2anOTixbsQJebwkAYM3adQgFg0nPPd9n+TGT5ywVvs8yl49z VlZWhq/827/D5yuH0+nCJZd9EK+89GLSdnyfzR5CU1OTWOhG5KJ+8WJ86tOfQWVVFTo7OnH/ ffeiu7sLX/23b+JrX7kTY6Oj8HpL8O/fuQuAVE9L7iu/9e//DqOj0gfH7Xf8Kx75xc9x6OAB 02OtWbsOV139USwoK8ORtlbc9z8/UMo+pLrvW9+9G/d8/260tR6e8j7mkpk6Z6n2sf6003Dt J69L+ob5hc/djImJcZ4znXycs7+8aDfO2r4dABDw+/Gznz6Ew+++m3Qsvs/yY6bOGd9n+ZOP c7brvPNx4V9eBLvDgb2vvYqH/vcBw+CI77PZYdYHaURERERz0azu7iQiIiKaqxikEREREVkQ gzQiIiIiC2KQRkRERGRBDNKIiIiILIhBGhEREZEFMUgjIiIisiAGaUREREQWxCCNiIiIyIIY pBERERFZEIM0IiIiIgtikEZERERkQQzSiIiIiCyIQRoRERGRBdkDgUCh20BEREREOsykERER EVkQgzQiIiIiC2KQRkRERGRBDNKIiIiILIhBGhEREZEFMUgjIiIisiAGaUREREQWxCCNiIiI yIIYpBERERFZEIM0IiIiIgtikEZERERkQQzSiIiIiCyIQRoRERGRBTFIIyIiIrIgu9vtLnQb iIiIiEiHmTQiIiIiC2KQRkRERGRBDNKIiIiILIhBGhEREZEFMUgjIiIisiAGaUREREQWxCCN iIiIyIIYpBERERFZEIM0IiIiIgtikEZERERkQQzSiIiIiCyIQRoRERGRBTFIIyIiIrIgBmlE REREFsQgjYiIiMiCGKQRERERWRCDNCIiIiILYpBGREREZEH/H33ykt9lZeP+AAAAAElFTkSu QmCC --------------030906020404070100070106-- From wwwrun@oss.sgi.com Wed Jun 18 19:50:45 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HTML_MESSAGE,NO_RELAYS autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: by oss.sgi.com (Postfix, from userid 30) id 9FA427F51; Wed, 18 Jun 2014 19:50:45 -0500 (CDT) From: bugzilla-daemon@oss.sgi.com To: pcp@oss.sgi.com Subject: [Bug 1057] memory leak & increasing slowdown when call pmDestroyContext & pmNewContext (or pmDupConext) in a loop Date: Thu, 19 Jun 2014 00:50:45 +0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Classification: Unclassified X-Bugzilla-Product: pcp X-Bugzilla-Component: pcp X-Bugzilla-Keywords: X-Bugzilla-Severity: major X-Bugzilla-Who: kenj@internode.on.net X-Bugzilla-Status: NEW X-Bugzilla-Priority: P5 X-Bugzilla-Assigned-To: pcp@kenj.com.au X-Bugzilla-Target-Milestone: --- X-Bugzilla-Changed-Fields: short_desc Message-ID: In-Reply-To: References: Content-Type: multipart/alternative; boundary="1403139045.8f37E3.2555"; charset="us-ascii" X-Bugzilla-URL: http://oss.sgi.com/bugzilla/ Auto-Submitted: auto-generated MIME-Version: 1.0 --1403139045.8f37E3.2555 Date: Wed, 18 Jun 2014 19:50:45 -0500 MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8" http://oss.sgi.com/bugzilla/show_bug.cgi?id=1057 Ken McDonell changed: What |Removed |Added ---------------------------------------------------------------------------- Summary|memory leak & increasing |memory leak & increasing |slowdown in pdubuf.c |slowdown when call |buf_pin / interp.c |pmDestroyContext & |update_bounds |pmNewContext (or | |pmDupConext) in a loop --- Comment #6 from Ken McDonell --- Amend Summary to more accurately reflect root cause. -- You are receiving this mail because: You are on the CC list for the bug. --1403139045.8f37E3.2555 Date: Wed, 18 Jun 2014 19:50:45 -0500 MIME-Version: 1.0 Content-Type: text/html; charset="UTF-8" changed bug 1057
What Removed Added
Summary memory leak & increasing slowdown in pdubuf.c buf_pin / interp.c update_bounds memory leak & increasing slowdown when call pmDestroyContext & pmNewContext (or pmDupConext) in a loop

Comment # 6 on bug 1057 from
Amend Summary to more accurately reflect root cause.


You are receiving this mail because:
  • You are on the CC list for the bug.
--1403139045.8f37E3.2555-- From wwwrun@oss.sgi.com Wed Jun 18 19:51:10 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HTML_MESSAGE,NO_RELAYS autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: by oss.sgi.com (Postfix, from userid 30) id 1F5987F53; Wed, 18 Jun 2014 19:51:10 -0500 (CDT) From: bugzilla-daemon@oss.sgi.com To: pcp@oss.sgi.com Subject: [Bug 1057] memory leak & increasing slowdown when calling pmDestroyContext & pmNewContext (or pmDupConext) in a loop Date: Thu, 19 Jun 2014 00:51:10 +0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Classification: Unclassified X-Bugzilla-Product: pcp X-Bugzilla-Component: pcp X-Bugzilla-Keywords: X-Bugzilla-Severity: major X-Bugzilla-Who: kenj@internode.on.net X-Bugzilla-Status: NEW X-Bugzilla-Priority: P5 X-Bugzilla-Assigned-To: pcp@kenj.com.au X-Bugzilla-Target-Milestone: --- X-Bugzilla-Changed-Fields: short_desc Message-ID: In-Reply-To: References: Content-Type: multipart/alternative; boundary="1403139070.8F8c73.2633"; charset="us-ascii" X-Bugzilla-URL: http://oss.sgi.com/bugzilla/ Auto-Submitted: auto-generated MIME-Version: 1.0 --1403139070.8F8c73.2633 Date: Wed, 18 Jun 2014 19:51:10 -0500 MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8" http://oss.sgi.com/bugzilla/show_bug.cgi?id=1057 Ken McDonell changed: What |Removed |Added ---------------------------------------------------------------------------- Summary|memory leak & increasing |memory leak & increasing |slowdown when call |slowdown when calling |pmDestroyContext & |pmDestroyContext & |pmNewContext (or |pmNewContext (or |pmDupConext) in a loop |pmDupConext) in a loop -- You are receiving this mail because: You are on the CC list for the bug. --1403139070.8F8c73.2633 Date: Wed, 18 Jun 2014 19:51:10 -0500 MIME-Version: 1.0 Content-Type: text/html; charset="UTF-8" changed bug 1057
What Removed Added
Summary memory leak & increasing slowdown when call pmDestroyContext & pmNewContext (or pmDupConext) in a loop memory leak & increasing slowdown when calling pmDestroyContext & pmNewContext (or pmDupConext) in a loop


You are receiving this mail because:
  • You are on the CC list for the bug.
--1403139070.8F8c73.2633-- From wwwrun@oss.sgi.com Wed Jun 18 19:52:05 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HTML_MESSAGE,NO_RELAYS autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: by oss.sgi.com (Postfix, from userid 30) id BD6D27F51; Wed, 18 Jun 2014 19:52:05 -0500 (CDT) From: bugzilla-daemon@oss.sgi.com To: pcp@oss.sgi.com Subject: [Bug 1057] memory leak & increasing slowdown when calling pmDestroyContext & pmNewContext (or pmDupConext) in a loop Date: Thu, 19 Jun 2014 00:52:05 +0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Classification: Unclassified X-Bugzilla-Product: pcp X-Bugzilla-Component: pcp X-Bugzilla-Keywords: X-Bugzilla-Severity: major X-Bugzilla-Who: kenj@internode.on.net X-Bugzilla-Status: RESOLVED X-Bugzilla-Priority: P5 X-Bugzilla-Assigned-To: pcp@kenj.com.au X-Bugzilla-Target-Milestone: --- X-Bugzilla-Changed-Fields: bug_status resolution Message-ID: In-Reply-To: References: Content-Type: multipart/alternative; boundary="1403139125.3A41BEA3.2708"; charset="us-ascii" X-Bugzilla-URL: http://oss.sgi.com/bugzilla/ Auto-Submitted: auto-generated MIME-Version: 1.0 --1403139125.3A41BEA3.2708 Date: Wed, 18 Jun 2014 19:52:05 -0500 MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8" http://oss.sgi.com/bugzilla/show_bug.cgi?id=1057 Ken McDonell changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED Resolution|--- |FIXED --- Comment #7 from Ken McDonell --- Commit 0aca276deb631849a3944aa73e9857a46af1acdb in Ken's git tree fixes this. -- You are receiving this mail because: You are on the CC list for the bug. --1403139125.3A41BEA3.2708 Date: Wed, 18 Jun 2014 19:52:05 -0500 MIME-Version: 1.0 Content-Type: text/html; charset="UTF-8" changed bug 1057
What Removed Added
Status NEW RESOLVED
Resolution --- FIXED

Comment # 7 on bug 1057 from
Commit 0aca276deb631849a3944aa73e9857a46af1acdb in Ken's git tree fixes this.


You are receiving this mail because:
  • You are on the CC list for the bug.
--1403139125.3A41BEA3.2708-- From nscott@redhat.com Wed Jun 18 20:30:22 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 51C7B7F3F for ; Wed, 18 Jun 2014 20:30:22 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 202708F8066 for ; Wed, 18 Jun 2014 18:30:21 -0700 (PDT) X-ASG-Debug-ID: 1403141413-04bdf0566631a000001-S8gJnT Received: from mx6-phx2.redhat.com (mx6-phx2.redhat.com [209.132.183.39]) by cuda.sgi.com with ESMTP id 6rVb6Q0GfdoTJsv2 for ; Wed, 18 Jun 2014 18:30:13 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.39 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx6-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5J1UDRK016408 for ; Wed, 18 Jun 2014 21:30:13 -0400 Date: Wed, 18 Jun 2014 21:30:13 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: PCP Message-ID: <976160228.29155098.1403141413036.JavaMail.zimbra@redhat.com> In-Reply-To: <1287049020.29155003.1403141380374.JavaMail.zimbra@redhat.com> Subject: pcp updates: solaris/deb fixes, kenj merge MIME-Version: 1.0 X-ASG-Orig-Subj: pcp updates: solaris/deb fixes, kenj merge Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.12] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: pcp updates: solaris/deb fixes, kenj merge Thread-Index: vY5PSv5Pyq9E/PoLYu/j1AuMIMPmhg== X-Barracuda-Connect: mx6-phx2.redhat.com[209.132.183.39] X-Barracuda-Start-Time: 1403141413 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6764 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Changes committed to git://git.performancecopilot.org/pcp.git dev CHANGELOG | 8 GNUmakefile | 4 VERSION.pcp | 4 build/rpm/fedora.spec | 5 configure.ac | 2468 ++++++++++++++++++++++++++++++++++++++++++++++ configure.in | 2468 ---------------------------------------------- debian/changelog | 10 qa/828 | 228 ++++ qa/828.out | 146 ++ qa/833 | 48 qa/833.out | 542 +++++++++- qa/common.check | 37 qa/group | 2 qa/src/.gitignore | 1 qa/src/GNUlocaldefs | 5 qa/src/bug1057.0 |binary qa/src/bug1057.index |binary qa/src/bug1057.meta |binary qa/src/churnctx.c | 429 +++++++ src/include/builddefs.in | 2 src/include/pcp/impl.h | 1 src/libpcp/src/context.c | 10 src/libpcp/src/exports | 5 src/libpcp/src/interp.c | 76 + src/libpcp/src/pdubuf.c | 15 src/libpcp/src/probe.c | 4 src/pmdas/pmcd/src/pmcd.c | 2 27 files changed, 4011 insertions(+), 2509 deletions(-) commit 4106342254316edc878985d319466a80a4ca18b0 Merge: 26f2050 0aca276 Author: Nathan Scott Date: Thu Jun 19 11:19:56 2014 +1000 Merge branch 'dev' of git://git.performancecopilot.org/kenj/pcp into dev commit 26f2050783aa9c173513b84982a37cc8124c5fcb Author: Nathan Scott Date: Thu Jun 19 11:18:24 2014 +1000 Bump version in dev branch for planned July release commit 017056ba03838a1faa69a6a9bd955c97f59100bd Author: Nathan Scott Date: Thu Jun 19 10:24:25 2014 +1000 Minor release to resolve Solaris and Debian build/install issues commit d4ed932dba517a1440d2abe621ca8b9f4a852e91 Author: Nathan Scott Date: Thu Jun 19 10:11:01 2014 +1000 Tweak pmcd pmda ABI reporting for MinGW-64 builds going forward commit 0aca276deb631849a3944aa73e9857a46af1acdb Author: Ken McDonell Date: Thu Jun 19 09:17:02 2014 +1000 libpcp - fix mem leaks associated with pmDestroyContext() Fixes for http://oss.sgi.com/bugzilla/show_bug.cgi?id=1057 Frank's changes to pmwebd introduced a new libpcp use case, namely repeated iteration involving pmNewContext() ... pmDestroyContext() and specifically for archives. This exposed a number of memory leaks that this commit addresses. + introduce a new __pmFreeInterpData() routine that is called from pmDestroyContext() to do most of the work, namely for the context being destroyed, ... - walk the ac_pmid_hc hash table unpinning any PDU buffers that have been held for prior or next values (but not when valfmt is PM_VAL_INSITU) used in "interp" mode - free the chain of pmidcntl_ structs (PMIDs) from each __pmHashNode - free the chain of instcntl_t structs (instances) from each __pmHashNode - free the hash table and its entries - remove any pmResult held in the read cache (and unpin any associated PDU buffers) for enties from the data file associated with the context being destroyed + changes in pmDupContext() to ensure the archive hash table (...c_archctl->ac_pmid_hc) is NOT shared after a context is "dup'd" ... otherwise untold badness will flow from calling pmDestroyContext() on either the original or the dup'd archive context commit 8728ae22e0e8e1c998ecdab20b0c3f0831a13601 Author: Ken McDonell Date: Thu Jun 19 09:14:25 2014 +1000 libpcp - small changes to diags for pinnned/unpinned buffers Part of tracking down http://oss.sgi.com/bugzilla/show_bug.cgi?id=1057 commit c4758018b89c5cc96016a1cd7fbfbba17db2b318 Author: Ken McDonell Date: Thu Jun 19 09:12:33 2014 +1000 qa/833 - tweak filter to remove current date commit 4a0b4c794993820c9ffcada5f638151da285c8b1 Author: Ken McDonell Date: Thu Jun 19 08:33:47 2014 +1000 qa for bug 1057 - mem leaks from pmDestroyContext() See http://oss.sgi.com/bugzilla/show_bug.cgi?id=1057 New test program (churntx) and archive (first hour of archive from the bug, thanks Frank). New qa tests 833 (buffer pinning part of the bug) and 828 (all of the other memory leaks exposed via valgrind). commit 231f6ea4bcd3372644dba52fee4dbc28ff9b191c Author: Ken McDonell Date: Thu Jun 19 08:31:16 2014 +1000 qa/common.check - refactor valgrind support Simple change to expose _filter_valgrind() that can be used with roll-your-own valgrind execution (when _run_valgrind is not appropriate). commit 6e52560bf5203e1181e01e29dbb8828650e1b924 Author: Nathan Scott Date: Wed Jun 18 17:49:00 2014 +1000 Rename configure.in to configure.ac as autoconf wishes nowadays commit ee2161cc5c5cf69abdfe251f0ae157cbde519485 Author: Nathan Scott Date: Wed Jun 18 14:30:11 2014 +1000 Add workaround for Solaris PTHREAD_STACK_MIN build issue From kenj@internode.on.net Wed Jun 18 20:58:32 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id B9FC37F3F for ; Wed, 18 Jun 2014 20:58:32 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id A7E4B304043 for ; Wed, 18 Jun 2014 18:58:29 -0700 (PDT) X-ASG-Debug-ID: 1403143106-04cb6c78c53023a0001-S8gJnT Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id 4AWouCagW8LTe2FY for ; Wed, 18 Jun 2014 18:58:27 -0700 (PDT) X-Barracuda-Envelope-From: kenj@internode.on.net X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AhUWAHZDolN20b6dPGdsb2JhbAANTYNfh369RgQBAQEBOIR3QDANFhgDAgECATEnBgIBAbZcn04XjxOELQSxbw Received: from ppp118-209-190-157.lns20.mel6.internode.on.net (HELO [192.168.1.100]) ([118.209.190.157]) by ipmail06.adl2.internode.on.net with ESMTP; 19 Jun 2014 11:28:23 +0930 Message-ID: <53A24472.2020804@internode.on.net> Date: Thu, 19 Jun 2014 12:01:22 +1000 From: Ken McDonell User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0 MIME-Version: 1.0 To: pcp@oss.sgi.com Subject: pcp updates - fine tuning last commit Content-Type: text/plain; charset=ISO-8859-1; format=flowed X-ASG-Orig-Subj: pcp updates - fine tuning last commit Content-Transfer-Encoding: 7bit X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1403143107 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6765 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Changes committed to git://oss.sgi.com/kenj/pcp.git dev src/libpcp/src/interp.c | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) commit b1fa8d138d2184e578ba66723968d8b961c05140 Author: Ken McDonell Date: Thu Jun 19 11:52:19 2014 +1000 libpcp/interp.c - modify read cache cleaning in __pmFreeInterpData() Instead of hand crafted code, use the existing __pmLogCacheClear() routine ... with the added benefit of the this part now being thread safe! From kenj@internode.on.net Wed Jun 18 21:07:32 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id EECF47F3F for ; Wed, 18 Jun 2014 21:07:31 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 8E12BAC003 for ; Wed, 18 Jun 2014 19:07:28 -0700 (PDT) X-ASG-Debug-ID: 1403143645-04cb6c78c53029e0001-S8gJnT Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id T4MLBTsq8NRdQUAW for ; Wed, 18 Jun 2014 19:07:26 -0700 (PDT) X-Barracuda-Envelope-From: kenj@internode.on.net X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AiAWAKVEolN20b6dPGdsb2JhbAANTYtduQyDFAGBJQQBAQEBOIQ4AQEBBDhAEQsYCRYPCQMCAQIBMRQTCAEBtl2fTheOfRaELQEDsW8 Received: from ppp118-209-190-157.lns20.mel6.internode.on.net (HELO [192.168.1.100]) ([118.209.190.157]) by ipmail06.adl2.internode.on.net with ESMTP; 19 Jun 2014 11:37:25 +0930 Message-ID: <53A24690.2010201@internode.on.net> Date: Thu, 19 Jun 2014 12:10:24 +1000 From: Ken McDonell User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0 MIME-Version: 1.0 To: pcp@oss.sgi.com Subject: Re: [pcp] pcp+graphite, take 2 References: <20140616214301.GB6693@redhat.com> <53A181C4.5050402@redhat.com> X-ASG-Orig-Subj: Re: [pcp] pcp+graphite, take 2 In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1403143645 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6765 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 19/06/14 08:39, Frank Ch. Eigler wrote: > ... > It doesn't look too serious; will look into it tomorrow. Glad you think so ... I had a quick look at libpcp and this appears to be the locking story ... pmFetch gets ctxp c_lock from __pmHandleToPtr ... and calls __pmLogFetch ... assuming this is INTERP mode immediately calls __pmLogFetchInterp ... which may take the global lock, gets PCP_COUNTER_WRAP from the env and then releases the global lock ... c_lock is held until return from __pmLogFetch, just before the return from pmFetch And c_lock is a recursive mutex. So an invalid read below pmFetch() for a pmResult component previously freed below pmFetch() looks to be "a bit of a mystery Beryl". Unless you had my commit without the follow up commit to fix the thread unsafe code I added when cleaning the read cache ... which is certainly implicated in the freeing part of your valgrind output. From pcp-announce-bounces@oss.sgi.com Wed Jun 18 23:11:41 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from oss.sgi.com (localhost [IPv6:::1]) by oss.sgi.com (Postfix) with ESMTP id 665D67F4E; Wed, 18 Jun 2014 23:11:41 -0500 (CDT) X-Original-To: pcp-announce@oss.sgi.com Delivered-To: pcp-announce@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 8E5B47F3F for ; Wed, 18 Jun 2014 23:11:39 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 75C68304048 for ; Wed, 18 Jun 2014 21:11:36 -0700 (PDT) X-ASG-Debug-ID: 1403151091-04cbb00a011af160001-87ZIJf Received: from mx6-phx2.redhat.com (mx6-phx2.redhat.com [209.132.183.39]) by cuda.sgi.com with ESMTP id Gg0iOOttlzdUaHpu for ; Wed, 18 Jun 2014 21:11:31 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.39 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx6-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5J4BUth013470 for ; Thu, 19 Jun 2014 00:11:30 -0400 Date: Thu, 19 Jun 2014 00:11:30 -0400 (EDT) From: Nathan Scott To: pcp-announce Message-ID: <1726835626.29182818.1403151090815.JavaMail.zimbra@redhat.com> In-Reply-To: <1811694412.29182005.1403150612730.JavaMail.zimbra@redhat.com> MIME-Version: 1.0 X-ASG-Orig-Subj: Performance Co-Pilot 3.9.5 released X-Originating-IP: [10.5.82.12] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: Performance Co-Pilot 3.9.5 released Thread-Index: BK7DezytfvtJwAXffw5HZhf19obAaA== X-Barracuda-Connect: mx6-phx2.redhat.com[209.132.183.39] X-Barracuda-Start-Time: 1403151091 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6767 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Subject: [pcp-announce] Performance Co-Pilot 3.9.5 released X-BeenThere: pcp-announce@oss.sgi.com X-Mailman-Version: 2.1.14 Precedence: list Reply-To: Nathan Scott List-Id: pcp announcements List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: pcp-announce-bounces@oss.sgi.com Sender: pcp-announce-bounces@oss.sgi.com Hi all, The latest version of PCP is out, and built for all the usual platforms... http://www.performancecopilot.org/ Enjoy! pcp-3.9.5 (18 June 2014) - porting work on the GNU/Hurd platform - porting work on Windows (early MinGW-64 work) - pmdalinux: add in the new mem.util.available metric - pmchart: new vCPU view, resolve guest time reporting - pmwebd: add CORS "Access-Control-Allow-Origin: *" to JSON response headers - pmatop: improvements to value fitting - packaging: gui debuginfo/testsuite correctly replaced - pmconfig: moved install location for Solaris conflict - pmstat: fix hostname reporting when in cluster mode - Coverity scan fixes in libpcp, python, and elsewhere - packaging: pcp-doc now contains all of the tutorial bits - python: timeval/metricspec error handling improvements - pmatop: handle curses problems more gracefully - pmdapostfix: run as postfix user, not the pcp user - python: fix pmParseInterval failure segfault - python: fix segfault when printing empty units - libpcp: functions for collecting server port numbers - pmcd.services metric reflecting PCP daemon usage - libpcp, pmfind: active service probing - pmproxy, pmwebd: support for service discovery - pmcollectl, pmatop: improved log writing support - pmie: long option support - pmquery: neater output formatting - pmchart, pmtime: long option support - pmdasystemd: install the built binary - python: significant work on the pcp.pmcc module, adding long option support, scale conversion, an initial fetch loop method, and entirely new convenience classes - pmlogcheck: fix bad memory access sigsegv on some logs - Fix infinite loop in build scripts without Qt enabled - pmdalinux: add metrics from /proc/net/netstat - pmdumptext: long option support - pmcollectl: support for sub-second sampling intervals - Revive support for RHEL5-era builds, post pcp-gui merge -- Nathan _______________________________________________ pcp-announce mailing list pcp-announce@oss.sgi.com http://oss.sgi.com/mailman/listinfo/pcp-announce From pcp-announce-bounces@oss.sgi.com Thu Jun 19 02:16:10 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from oss.sgi.com (localhost [IPv6:::1]) by oss.sgi.com (Postfix) with ESMTP id 54D137F4E; Thu, 19 Jun 2014 02:16:10 -0500 (CDT) X-Original-To: pcp-announce@oss.sgi.com Delivered-To: pcp-announce@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 9F0017F3F for ; Thu, 19 Jun 2014 02:16:08 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 8895C8F804B for ; Thu, 19 Jun 2014 00:16:05 -0700 (PDT) X-ASG-Debug-ID: 1403162160-04cb6c78c630f380001-87ZIJf Received: from mx5-phx2.redhat.com (mx5-phx2.redhat.com [209.132.183.37]) by cuda.sgi.com with ESMTP id 2uHHXVQQ3K5nONoT for ; Thu, 19 Jun 2014 00:16:00 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.37 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx5-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5J7G062004801 for ; Thu, 19 Jun 2014 03:16:00 -0400 Date: Thu, 19 Jun 2014 03:16:00 -0400 (EDT) From: Nathan Scott To: pcp-announce Message-ID: <1103922821.29222207.1403162160063.JavaMail.zimbra@redhat.com> In-Reply-To: <1505634896.29206893.1403158887854.JavaMail.zimbra@redhat.com> MIME-Version: 1.0 X-ASG-Orig-Subj: PCP developers conference call X-Originating-IP: [10.5.82.12] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: PCP developers conference call Thread-Index: PyriGJqCwFpky3Xx2ICGx7+f16cA2g== X-Barracuda-Connect: mx5-phx2.redhat.com[209.132.183.37] X-Barracuda-Start-Time: 1403162160 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6770 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Subject: [pcp-announce] PCP developers conference call X-BeenThere: pcp-announce@oss.sgi.com X-Mailman-Version: 2.1.14 Precedence: list Reply-To: Nathan Scott List-Id: pcp announcements List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: pcp-announce-bounces@oss.sgi.com Sender: pcp-announce-bounces@oss.sgi.com Hi all, It's high time we had another developers conference call! For those new to the game, we have these calls approximately once every 3 months - they are open to anyone who has even a passing interest in PCP. Please let me know if you'll be on the call (we'll wait a bit if we're expecting people) and if there's any topics you'd like to discuss. An initial agenda follows, below. The usual aftermath is a collation of any note-keeping effort anyone has made, and summaries emailed to the pcp list. We may be able to record the call as well, if there is any interest in that? (Paul Evans or anyone else in UK/Europe - this might suit you well?) Details for the call: - Starting at 7am on Thursday 26th June in Melbourne, track your local start date/time here: http://www.timeanddate.com/worldclock/fixedtime.html?msg=PCP+Meeting&iso=20140626T07&p1=152 - Phone number to call from your location is here: https://www.intercallonline.com/listNumbersByCode.action?confCode=6409801839 - When prompted, enter the conference code: 6409801839 Initial agenda: - welcome - milestones and upcoming dates - releases [nathans] - conferences / presentations [nathans] - administration - closed/open mailing list [nathans, fche, (max?)] - github request [nathans] - code reviews [nathans] - release builds [nathans] - quality assurance - testing kernel PMDAs [nathans] - archives [nathans] - RFCs - pmdapipe [nathans] - pmcd co-process (pending, will send before weeks end) [nathans] - ... any other design work to discuss? - WIP - web interface(s) [fche, kenj, netflix folks?] - python [nathans, scox? mgoodwin? michele?] - memory blowout [brolley? nathans] - pmdapapi? [lukas?] - discovery? [brolley] - ... any other hacking in progress? - anyone need help with anything? - anyone have any production stories/needs they want to share? - any other topics? Looking forward to it - I'll talk to you all next week! cheers. -- Nathan _______________________________________________ pcp-announce mailing list pcp-announce@oss.sgi.com http://oss.sgi.com/mailman/listinfo/pcp-announce From fche@redhat.com Thu Jun 19 09:37:24 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 024D67F3F for ; Thu, 19 Jun 2014 09:37:24 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 92A0BAC00A for ; Thu, 19 Jun 2014 07:37:23 -0700 (PDT) X-ASG-Debug-ID: 1403188638-04cb6c78c33215b0001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id jZguP0AyFfI9Sh5A (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 19 Jun 2014 07:37:19 -0700 (PDT) X-Barracuda-Envelope-From: fche@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s5JEbEte030932 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 19 Jun 2014 10:37:15 -0400 Received: from fche.csb (vpn-56-123.rdu2.redhat.com [10.10.56.123]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5JEbDp3004124; Thu, 19 Jun 2014 10:37:14 -0400 Received: by fche.csb (Postfix, from userid 2569) id 7F0A358161; Thu, 19 Jun 2014 10:37:13 -0400 (EDT) To: Ken McDonell Cc: pcp@oss.sgi.com Subject: Re: pcp+graphite, take 2 References: <20140616214301.GB6693@redhat.com> <539F7C0B.9050507@internode.on.net> <53A2297A.6000202@internode.on.net> X-ASG-Orig-Subj: Re: pcp+graphite, take 2 From: fche@redhat.com (Frank Ch. Eigler) Date: Thu, 19 Jun 2014 10:37:13 -0400 In-Reply-To: <53A2297A.6000202@internode.on.net> (Ken McDonell's message of "Thu, 19 Jun 2014 10:06:18 +1000") Message-ID: User-Agent: Gnus/5.1008 (Gnus v5.10.8) Emacs/21.4 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Scanned-By: MIMEDefang 2.68 on 10.5.11.22 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1403188638 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Ken McDonell writes: > [...] > With my latest fix to libpcp, pmwebd is no longer a CPU and memory hog > ... in the attached image the aqua region is the load average before I > changed libpcp, the region to the right is after various iterations of > the fix. Thanks a lot, after rebasing fche/pmwebd to your tree, this part seems to be working great! (It turns out that -M1 etc. still crashes quickly, so we have some way to go before multithreaded speedorama.) - FChE From brolley@redhat.com Thu Jun 19 13:56:38 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HTML_MESSAGE autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 49B4329DF8 for ; Thu, 19 Jun 2014 13:56:38 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id AEF6DAC002 for ; Thu, 19 Jun 2014 11:56:34 -0700 (PDT) X-ASG-Debug-ID: 1403204192-04cb6c76d200e10001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id kqOznSEfbYD2eC90 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 19 Jun 2014 11:56:33 -0700 (PDT) X-Barracuda-Envelope-From: brolley@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s5JIuVVm024684 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Thu, 19 Jun 2014 14:56:32 -0400 Received: from [10.15.16.130] (dhcp-10-15-16-130.yyz.redhat.com [10.15.16.130]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5JIuVEG003438 for ; Thu, 19 Jun 2014 14:56:31 -0400 Message-ID: <53A33308.3060201@redhat.com> Date: Thu, 19 Jun 2014 14:59:20 -0400 From: Dave Brolley User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0 MIME-Version: 1.0 To: PCP Mailing List Subject: PCP Updates: Service Discovery Additions Content-Type: multipart/alternative; boundary="------------060905020906010300060004" X-ASG-Orig-Subj: PCP Updates: Service Discovery Additions X-Scanned-By: MIMEDefang 2.68 on 10.5.11.22 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1403204193 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 This is a multi-part message in MIME format. --------------060905020906010300060004 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Hi All, A couple of additions to the service discovery API and pmfind(1). 1. For service discovery options, I finally decided on adding a new globalOptions string to pmDiscoverServices and leaving the local options as overloads in the existing service (no overloads yet) and mechanism (probe mechanism has a maxThreads option) strings. I had originally leaned toward overloading the service string for global options, but then thought that there could be legitimate reasons down the road to do this for possible service-specific options. I used this to implement a new "resolve" option in the API which corresponds to new -r and --resolve options for pmfind(1). This asks for host name resolution in the results. 2. I added a new pmServiceDiscoveryInterrupt(3) API for interrupting the discovery process. When called, the process is interrupted, finishes normally and reports whatever results were discovered (if any) up the point of the interruption. Using this new API, pmfind(1) now catches SIGHUP, SIGPIPE, SIGINT, SIGTERM, SIGXFSZ, and SIGXCPU and interrupts the service discovery when it receives them. Man pages have been updated/created. See the following commits to my brolley/dev branch in pcpfans. Dave --------------------------------------------------------------------------------- commit e35998585c8795781a48a53d66212c90f5f34575 Author: Dave Brolley Date: Thu Jun 19 13:04:52 2014 -0400 Update service discover man pages. - New parameter to pmDiscoverServices(1) - New command line flags for pmfind(1) - New man page for pmServiceDiscoveryInterrupt(1) commit a8b87e24ec15ed1ec798b1e39f815d528cb0f17a Author: Dave Brolley Date: Thu Jun 19 12:07:58 2014 -0400 New pmServiceDiscoveryInterrupt() API. Used to interrupt service discovery. The service discovery process will be interrupted and will finish normally, returning whatever results (if any) were discovered to that point. pmfind(1) now uses this API to implement response to several common signals: SIGHUP, SIGPIPE, SIGINT, SIGTERM, SIGXFSZ, SIGXCPU. When one of these signals is received, pmfind(1) will interrupt the discovery process and print the results obtained up to that point. Also made the service discovery API re-usable by ensuring that all options and settings are reset on each use. Author: Dave Brolley Date: Mon Jun 16 14:15:23 2014 -0400 Update existing pmfind(1) tests to test the -r and --resolve options. commit 1380d1bbf57327077cc9c0424fe49882c914f958 Author: Dave Brolley Date: Mon Jun 16 14:12:30 2014 -0400 Add a global options argument to the __pmDiscoverServices() internal API. All callers updated. Use it to implement the "resolve" option in the API which reqests resolution of the discovered addresses. Used by pmfind(1) to implement the -r and --resolve command line options. --------------060905020906010300060004 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Hi All,

A couple of additions to the service discovery API and pmfind(1).

  1. For service discovery options, I finally decided on adding a new globalOptions string to pmDiscoverServices and leaving the local options as overloads in the existing service (no overloads yet) and mechanism (probe mechanism has a maxThreads option) strings. I had originally leaned toward overloading the service string for global options, but then thought that there could be legitimate reasons down the road to do this for possible service-specific options.

    I used this to implement a new "resolve" option in the API which corresponds to new -r and --resolve options for pmfind(1). This asks for host name resolution in the results.

  2. I added a new pmServiceDiscoveryInterrupt(3) API for interrupting the discovery process. When called, the process is interrupted, finishes normally and reports whatever results were discovered (if any) up the point of the interruption. Using this new API, pmfind(1) now catches SIGHUP, SIGPIPE,  SIGINT,  SIGTERM,  SIGXFSZ,  and SIGXCPU and interrupts the service discovery when it receives them.
Man pages have been updated/created. See the following commits to my brolley/dev branch in pcpfans.

Dave

---------------------------------------------------------------------------------

commit e35998585c8795781a48a53d66212c90f5f34575
Author: Dave Brolley <brolley@redhat.com>
Date:   Thu Jun 19 13:04:52 2014 -0400

    Update service discover man pages.
    
    - New parameter to pmDiscoverServices(1)
    - New command line flags for pmfind(1)
    - New man page for pmServiceDiscoveryInterrupt(1)

commit a8b87e24ec15ed1ec798b1e39f815d528cb0f17a
Author: Dave Brolley <brolley@redhat.com>
Date:   Thu Jun 19 12:07:58 2014 -0400

    New pmServiceDiscoveryInterrupt() API.
    
    Used to interrupt service discovery. The service discovery
    process will be interrupted and will finish normally, returning
    whatever results (if any) were discovered to that point.
    
    pmfind(1) now uses this API to implement response to several
    common signals: SIGHUP, SIGPIPE, SIGINT, SIGTERM, SIGXFSZ, SIGXCPU.
    When one of these signals is received, pmfind(1) will interrupt the
    discovery process and print the results obtained up to that point.
    
    Also made the service discovery API re-usable by ensuring that
    all options and settings are reset on each use.

Author: Dave Brolley <brolley@redhat.com>
Date:   Mon Jun 16 14:15:23 2014 -0400

    Update existing pmfind(1) tests to test the -r and --resolve options.

commit 1380d1bbf57327077cc9c0424fe49882c914f958
Author: Dave Brolley <brolley@redhat.com>
Date:   Mon Jun 16 14:12:30 2014 -0400

    Add a global options argument to the __pmDiscoverServices() internal API.
   
    All callers updated.
   
    Use it to implement the "resolve" option in the API which reqests
    resolution of the discovered addresses. Used by
    pmfind(1) to implement the -r and --resolve command line options.

--------------060905020906010300060004-- From brolley@redhat.com Thu Jun 19 14:05:23 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id EED8929DF8 for ; Thu, 19 Jun 2014 14:05:23 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id C0884304032 for ; Thu, 19 Jun 2014 12:05:20 -0700 (PDT) X-ASG-Debug-ID: 1403204715-04bdf0566934c2b0001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id SdilANCTfKksVXGG (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 19 Jun 2014 12:05:16 -0700 (PDT) X-Barracuda-Envelope-From: brolley@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s5JJ5FOT021698 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Thu, 19 Jun 2014 15:05:15 -0400 Received: from [10.15.16.130] (dhcp-10-15-16-130.yyz.redhat.com [10.15.16.130]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5JJ5FIe012818 for ; Thu, 19 Jun 2014 15:05:15 -0400 Message-ID: <53A33514.1000501@redhat.com> Date: Thu, 19 Jun 2014 15:08:04 -0400 From: Dave Brolley User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0 MIME-Version: 1.0 To: PCP Mailing List Subject: PCP Updates: fedora.spec Content-Type: text/plain; charset=ISO-8859-1; format=flowed X-ASG-Orig-Subj: PCP Updates: fedora.spec Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.26 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1403204716 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 brolley/dev in pcpfans .... -------------------------------------------------------------- commit 5d84ce678cf64c75aaf7c64923cf42b862bbb41a Author: Dave Brolley Date: Thu Jun 19 15:05:01 2014 -0400 Update fedora.spec with changes needed to build for epel5 (el5). From fche@redhat.com Thu Jun 19 14:44:50 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 96ACC29DF8 for ; Thu, 19 Jun 2014 14:44:50 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 86A118F8054 for ; Thu, 19 Jun 2014 12:44:50 -0700 (PDT) X-ASG-Debug-ID: 1403207085-04cb6c76d1032c0001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id Fhq2evjo4lpLnUdh (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 19 Jun 2014 12:44:46 -0700 (PDT) X-Barracuda-Envelope-From: fche@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s5JJij1o006893 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Thu, 19 Jun 2014 15:44:45 -0400 Received: from fche.csb (vpn-56-123.rdu2.redhat.com [10.10.56.123]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5JJiiml001855; Thu, 19 Jun 2014 15:44:44 -0400 Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by fche.csb (Postfix) with ESMTP id 3B03D58015; Thu, 19 Jun 2014 15:44:44 -0400 (EDT) To: brolley@redhat.com cc: pcp@oss.sgi.com Subject: pmServiceDiscoveryInterrupt() commit a8b87e2 et al. From: fche@redhat.com (Frank Ch. Eigler) X-ASG-Orig-Subj: pmServiceDiscoveryInterrupt() commit a8b87e2 et al. Date: Thu, 19 Jun 2014 15:44:43 -0400 Message-Id: <20140619194444.3B03D58015@fche.csb> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.22 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1403207086 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Hi, Dave - I have a couple of concerns about this commit and its friends. By making the multithreaded discovery context global (static), the discovery function is no longer safe to call from a multithreaded application. (Same by the way with the globalOptionsInfo.) The "no unsafe side-effects" and "single-threaded scope" check-statics observations are mistaken, as indeed two concurrent threads calling pmDiscoverServices() will overwrite and corrupt each other. I see why this approach seemed right, considering your idea for the pmDiscoveryInterrupt() function, which has no way to identify the operation in progress. When I briefly considered this problem, I thought perhaps you could give (a new version of) pmDiscoverServices an sig_atomic_t* parameter, which the various threads would periodically dereference, and which another thread or signal handler of the embedding application could set. Interrupting then would not need to be a function call, just a change of that pointed-to value (almost exactly the "interrupted" flag from your new pmfind.c). If you adopt this, you could make the discovery-context back into a stack-resident thread-safe object. For that matter, all the statics in src/probe.c should be stack/context-resident for the same reason. Regarding __pmAvahiServiceDiscoveryInterrupt() being a no-op, that is probably not necessarily a good idea. We can/will get much longer timeouts than 0.5 seconds, because incomplete results have been observed in the wild already. If we are to replace the function-based interruptor with a flag-based one, perhaps it can be made to work by having avahi.c's avahi_simple_poll_loop() be replaced with a looped call to avahi_simple_poll_iterate() with a short timeout, aborting if the interrupt flag was set. Also we need to keep in mind a general concern about changing the API of a function (adding the globalOptions parameter) that's already in the ABI (pmDiscoverServices): it cannot be done as simply as per commit #1380d1bb. Old sources won't compile, and worse, old binaries against the new library will crash. The function would need a new name (or else wily tricks with symbol-versioning/aliasing would be called for, but IMHO let's not go there). If this "globalOptions" field is truly necessary, then it'll have to be passed to the renamed function only. Have you considered simply parsing global options out of a single mechanism string? Or just replicating the "global" parsing logic in the two mechanisms we currently have? Though OTOH if you were to add that interrupt flag I propose, then there's API/ABI breakage anyway. Re. the resolution logic and thread stack size connection, could the probe.c main thread do the resolution in a loop at the end, rather than invoking the resolver and whatnot from within each thread? It would slow things down, sure, but we wouldn't have to rely on hope that a twice-minimum stack is always going to be enough. (At least we're fortunate that getnameinfo(), the heavy lifter behind __pmGetNameInfo(), is supposed to be thread-safe as per POSIX docs. We can't assume such things without checking.) - FChE From brolley@redhat.com Thu Jun 19 15:18:24 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 5429C29DF8 for ; Thu, 19 Jun 2014 15:18:24 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 26A228F806F for ; Thu, 19 Jun 2014 13:18:21 -0700 (PDT) X-ASG-Debug-ID: 1403209099-04bdf056693504d0001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id EPdl9wc4z7ptLmAq (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 19 Jun 2014 13:18:19 -0700 (PDT) X-Barracuda-Envelope-From: brolley@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s5JKII8v021630 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Thu, 19 Jun 2014 16:18:19 -0400 Received: from [10.15.16.130] (dhcp-10-15-16-130.yyz.redhat.com [10.15.16.130]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5JKIIn9031646; Thu, 19 Jun 2014 16:18:18 -0400 Message-ID: <53A34633.2040006@redhat.com> Date: Thu, 19 Jun 2014 16:21:07 -0400 From: Dave Brolley User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0 MIME-Version: 1.0 To: "Frank Ch. Eigler" CC: pcp@oss.sgi.com Subject: Re: pmServiceDiscoveryInterrupt() commit a8b87e2 et al. References: <20140619194444.3B03D58015@fche.csb> X-ASG-Orig-Subj: Re: pmServiceDiscoveryInterrupt() commit a8b87e2 et al. In-Reply-To: <20140619194444.3B03D58015@fche.csb> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1403209099 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Thanks Frank, Your points re: threading are all good and well taken. WRT the API, the various options for overloading the current strings were considered and discussed and, while I knew that changing the ABI could be problematic, it seemed to me that Nathan was encouraging the addition of a new options string. This in turn lead me to believe that it was not too late to change this API. Your comments all come with proposed solutions -- thanks. I'll look into them all. Dave On 06/19/2014 03:44 PM, Frank Ch. Eigler wrote: > Hi, Dave - > > I have a couple of concerns about this commit and its friends. > > By making the multithreaded discovery context global (static), the > discovery function is no longer safe to call from a multithreaded > application. (Same by the way with the globalOptionsInfo.) The "no > unsafe side-effects" and "single-threaded scope" check-statics > observations are mistaken, as indeed two concurrent threads calling > pmDiscoverServices() will overwrite and corrupt each other. > > I see why this approach seemed right, considering your idea for the > pmDiscoveryInterrupt() function, which has no way to identify the > operation in progress. When I briefly considered this problem, I > thought perhaps you could give (a new version of) pmDiscoverServices > an sig_atomic_t* parameter, which the various threads would > periodically dereference, and which another thread or signal handler > of the embedding application could set. Interrupting then would not > need to be a function call, just a change of that pointed-to value > (almost exactly the "interrupted" flag from your new pmfind.c). If > you adopt this, you could make the discovery-context back into a > stack-resident thread-safe object. For that matter, all the statics > in src/probe.c should be stack/context-resident for the same reason. > > Regarding __pmAvahiServiceDiscoveryInterrupt() being a no-op, that is > probably not necessarily a good idea. We can/will get much longer > timeouts than 0.5 seconds, because incomplete results have been > observed in the wild already. If we are to replace the function-based > interruptor with a flag-based one, perhaps it can be made to work by > having avahi.c's avahi_simple_poll_loop() be replaced with a looped > call to avahi_simple_poll_iterate() with a short timeout, aborting if > the interrupt flag was set. > > Also we need to keep in mind a general concern about changing the API > of a function (adding the globalOptions parameter) that's already in > the ABI (pmDiscoverServices): it cannot be done as simply as per > commit #1380d1bb. Old sources won't compile, and worse, old binaries > against the new library will crash. The function would need a new > name (or else wily tricks with symbol-versioning/aliasing would be > called for, but IMHO let's not go there). > > If this "globalOptions" field is truly necessary, then it'll have to > be passed to the renamed function only. Have you considered simply > parsing global options out of a single mechanism string? Or just > replicating the "global" parsing logic in the two mechanisms we > currently have? Though OTOH if you were to add that interrupt flag I > propose, then there's API/ABI breakage anyway. > > Re. the resolution logic and thread stack size connection, could the > probe.c main thread do the resolution in a loop at the end, rather > than invoking the resolver and whatnot from within each thread? It > would slow things down, sure, but we wouldn't have to rely on hope > that a twice-minimum stack is always going to be enough. (At least > we're fortunate that getnameinfo(), the heavy lifter behind > __pmGetNameInfo(), is supposed to be thread-safe as per POSIX docs. > We can't assume such things without checking.) > > > - FChE From wcohen@redhat.com Thu Jun 19 15:38:38 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id CF4AC29DF8 for ; Thu, 19 Jun 2014 15:38:37 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 48994AC005 for ; Thu, 19 Jun 2014 13:38:34 -0700 (PDT) X-ASG-Debug-ID: 1403210312-04cb6c76d205510001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id jiCEX1nOT3cB9Elh (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 19 Jun 2014 13:38:33 -0700 (PDT) X-Barracuda-Envelope-From: wcohen@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s5JKcVeb003222 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Thu, 19 Jun 2014 16:38:32 -0400 Received: from [10.13.129.207] (dhcp129-207.rdu.redhat.com [10.13.129.207]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5JKcV57015455 for ; Thu, 19 Jun 2014 16:38:31 -0400 Message-ID: <53A34A47.3060008@redhat.com> Date: Thu, 19 Jun 2014 16:38:31 -0400 From: William Cohen User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.6.0 MIME-Version: 1.0 To: pcp@oss.sgi.com Subject: PCP Network Latency PMDA Content-Type: text/plain; charset=ISO-8859-1 X-ASG-Orig-Subj: PCP Network Latency PMDA Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.27 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1403210312 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 I have been looking at a PMDA that provides information about how long it takes for packets to make their way from userspace to the network device and from network device to userspace. People might be interested to know whether the network traffic has too much latency in the kernel. The kernel tracepoints and the perf netdev-times script [+] that allow the user to determine how long it takes for network packets to make their way through the networking stacks. However, it isn't appropriate using the netdev-times script for production systems. The script provides too much detail (information on every packet) and results in WAY too much overhead. It is not able to process significant network traffice in real time. The same tracepoints are available to systemtap and a systemtap script could provide more appropriate summary style information to pcp as a pmda with much lower overhead. The thought is that it would probably be sufficient to provide metrics for latency for packet send and receive of each network device. I have some questions on implementing the performance metric names. Thinking maybe somethingn like the following names: network.interface.in.latency instance "devname" network.interface.out.latency instance "devname" The value would be the average latency on the device. This would be similar to the kernel.all.cpu.* metrics in the respect that the latencies would be average over some window of time. Would it be better to provide raw monotonic sums of the delays and number of network packets in the pmda and have pcp derive the average latency from the raw metric values? This would allow arbtrary window times to be used by pcp. So for some time t and delta between measurements could do: (latency_sum[t]-latency_sum[t-delta])/(packets[t]-packets[t-delta]) The systemtap script could use systemtap PROCFS probes to make it to read that information out when pcp desires it [*]. Maybe something that echos the /proc/net/dev format (there might be more latency fields in there to give a finer grained picture where the packet spends its time: Inter-| Receive | Transmit face | packets latency | packets latency wlp3s0: 0 0 0 0 lo: 1738527854 1373704 1738527854 1373704 virbr0-nic: 0 0 0 0 virbr0: 0 0 0 0 em1: 87683319 105450 11920860 62401 Any thoughts or comments about this proposed network latency PMDA? -Will [+] http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/tools/perf/scripts/python/netdev-times.py [*] https://sourceware.org/systemtap/langref/Probe_points.html#SECTION00057000000000000000 From fche@redhat.com Thu Jun 19 15:59:37 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 329F629DF8 for ; Thu, 19 Jun 2014 15:59:37 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id C0F08AC008 for ; Thu, 19 Jun 2014 13:59:36 -0700 (PDT) X-ASG-Debug-ID: 1403211571-04cbb00a021dd350001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id ZCxxvCpIPapsmQHL (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 19 Jun 2014 13:59:32 -0700 (PDT) X-Barracuda-Envelope-From: fche@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s5JKxVdA004359 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Thu, 19 Jun 2014 16:59:31 -0400 Received: from fche.csb (vpn-56-123.rdu2.redhat.com [10.10.56.123]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5JKxUB0024953; Thu, 19 Jun 2014 16:59:31 -0400 Received: by fche.csb (Postfix, from userid 2569) id 5BC2358161; Thu, 19 Jun 2014 16:59:30 -0400 (EDT) To: William Cohen Cc: pcp@oss.sgi.com Subject: Re: PCP Network Latency PMDA References: <53A34A47.3060008@redhat.com> X-ASG-Orig-Subj: Re: PCP Network Latency PMDA From: fche@redhat.com (Frank Ch. Eigler) Date: Thu, 19 Jun 2014 16:59:30 -0400 In-Reply-To: <53A34A47.3060008@redhat.com> (William Cohen's message of "Thu, 19 Jun 2014 16:38:31 -0400") Message-ID: User-Agent: Gnus/5.1008 (Gnus v5.10.8) Emacs/21.4 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Scanned-By: MIMEDefang 2.68 on 10.5.11.27 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1403211572 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 William Cohen writes: > I have been looking at a PMDA that provides information about how long > it takes for packets to make their way from userspace to the network > device and from network device to userspace. [...] Neat. > network.interface.in.latency instance "devname" > network.interface.out.latency instance "devname" > [...] > (latency_sum[t]-latency_sum[t-delta])/(packets[t]-packets[t-delta]) This sounds like just the sort of thing that we'd use dsmith's richer pcp-systemtap interface widgetry, currently being designed, and this computation could be one of its examples. Keep the ideas coming, and work with dsmith. (I would not suggest building just this into a separate PMDA.) - FChE From kenj@internode.on.net Thu Jun 19 16:12:50 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 1B34D29DF8 for ; Thu, 19 Jun 2014 16:12:50 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 0111A8F8049 for ; Thu, 19 Jun 2014 14:12:46 -0700 (PDT) X-ASG-Debug-ID: 1403212363-04cb6c76d206a50001-S8gJnT Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id Wlj8VFZiG4QEDCvu for ; Thu, 19 Jun 2014 14:12:44 -0700 (PDT) X-Barracuda-Envelope-From: kenj@internode.on.net X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: ArofAOhRo1N20YDzPGdsb2JhbAANTItduRODFAGBJQQBAQEBOIQ5AQEEOEARCyEWDwkDAgECATEUEwgBAbYenx0Xjn0WhC0EsW8 Received: from ppp118-209-128-243.lns20.mel6.internode.on.net (HELO [192.168.1.100]) ([118.209.128.243]) by ipmail04.adl6.internode.on.net with ESMTP; 20 Jun 2014 06:42:43 +0930 Message-ID: <53A352FF.9090906@internode.on.net> Date: Fri, 20 Jun 2014 07:15:43 +1000 From: Ken McDonell User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0 MIME-Version: 1.0 To: pcp@oss.sgi.com Subject: Re: [pcp] PCP Network Latency PMDA References: <53A34A47.3060008@redhat.com> X-ASG-Orig-Subj: Re: [pcp] PCP Network Latency PMDA In-Reply-To: <53A34A47.3060008@redhat.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1403212364 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6785 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Will, welcome to the list ... On 20/06/14 06:38, William Cohen wrote: > ...The thought is that it would probably > be sufficient to provide metrics for latency for packet send and > receive of each network device. Sounds like a good idea and a natural extension to the coverage of the existing network interface metrics. > ... I have some questions on implementing > the performance metric names. Thinking maybe somethingn like the > following names: > > network.interface.in.latency instance "devname" > network.interface.out.latency instance "devname" > > The value would be the average latency on the device. This would be > similar to the kernel.all.cpu.* metrics in the respect that the > latencies would be average over some window of time. Would it be > better to provide raw monotonic sums of the delays and number of > network packets in the pmda and have pcp derive the average latency > from the raw metric values? ... As a general rule we're very strongly in favour of PMDAs exporting running counters when they are available. This reduces state and complexity in the PMDA, avoids hard-wired decisions about the "average time period" in the PMDA and dodges the whole (statistically) messy issue of rolling time averages and delays in average calculation and reporting for the PMDA ... all of these issues dilute the semantic value of the exported data and are better handled by the clients. For simple counters all PCP clients are able to deal with their own averaging to match their needs, with consistency for multiple clients that may be sampling the same metrics at different times and rates. Now the data you're talking about probably requires the more complicated delta(v1) / delta(v2) calculation for a user-facing client (but not pmlogger), where v1 is the sum of latencies and v2 is the packet count, but this can be automagically produced by "derived metrics" that a client can choose to use (see an example in the second para of the pmRegisterDerived(3) man page), or done by pmie(1). > ... Any thoughts or comments about this proposed network latency PMDA? For the other network interface metrics, we only incur an overhead when the data is requested (when the metrics are not being requested there is zero additional cost because the instrumentation is already being done in the kernel). This might not be the case here, where I expect the instrumentation would need to be enabled, even if the metrics are not being requested. Depending on the overhead of this instrumentation, you may wish to consider using an additional control variable and pmStore(1) to allow a user to enable or disable the collection, with the metrics returning PM_ERR_VALUE or PM_ERR_APPVERSION if the metrics are requested but the collection is disabled. For examples of PMDA behaviour being modified by pmStore metrics, see (as in pminfo -T) xfs.control.reset or sample.dodgey.control). Cheers, Ken. From wcohen@redhat.com Thu Jun 19 16:19:07 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 59F5029DF8 for ; Thu, 19 Jun 2014 16:19:07 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 3DDBA8F8059 for ; Thu, 19 Jun 2014 14:19:06 -0700 (PDT) X-ASG-Debug-ID: 1403212745-04cb6c76d106e70001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id GytqudHQGSd4oE9H (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 19 Jun 2014 14:19:06 -0700 (PDT) X-Barracuda-Envelope-From: wcohen@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s5JLJ4go004135 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Thu, 19 Jun 2014 17:19:04 -0400 Received: from [10.13.129.207] (dhcp129-207.rdu.redhat.com [10.13.129.207]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5JLJ4kZ022716; Thu, 19 Jun 2014 17:19:04 -0400 Message-ID: <53A353C8.8030704@redhat.com> Date: Thu, 19 Jun 2014 17:19:04 -0400 From: William Cohen User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.6.0 MIME-Version: 1.0 To: "Frank Ch. Eigler" , David Smith CC: pcp@oss.sgi.com Subject: Re: PCP Network Latency PMDA References: <53A34A47.3060008@redhat.com> X-ASG-Orig-Subj: Re: PCP Network Latency PMDA In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.26 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1403212745 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On 06/19/2014 04:59 PM, Frank Ch. Eigler wrote: > William Cohen writes: > >> I have been looking at a PMDA that provides information about how long >> it takes for packets to make their way from userspace to the network >> device and from network device to userspace. [...] > > Neat. > >> network.interface.in.latency instance "devname" >> network.interface.out.latency instance "devname" >> [...] >> (latency_sum[t]-latency_sum[t-delta])/(packets[t]-packets[t-delta]) > > This sounds like just the sort of thing that we'd use dsmith's richer > pcp-systemtap interface widgetry, currently being designed, and this > computation could be one of its examples. Keep the ideas coming, and > work with dsmith. (I would not suggest building just this into a > separate PMDA.) > > > - FChE > Hi Frank, Is the a pointer to the pcp/systemtap integration that David Smith is working on? It is possible that similar latency measurements could be done for the block io layer like the stuff that blktrace does. However, one concern is there could be a huge number of items to track (in the tens of thousands) that might not fit easily in a default sized associative array. -Will From dsmith@redhat.com Thu Jun 19 16:54:15 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 263A929DF8 for ; Thu, 19 Jun 2014 16:54:15 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id ED501304067 for ; Thu, 19 Jun 2014 14:54:14 -0700 (PDT) X-ASG-Debug-ID: 1403214850-04cb6c76d008220001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id HTQgodJRaymdOlyO (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 19 Jun 2014 14:54:11 -0700 (PDT) X-Barracuda-Envelope-From: dsmith@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s5JLsAOc005417 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Thu, 19 Jun 2014 17:54:10 -0400 Received: from t540p.usersys.redhat.com (dhcp-10-15-1-9.hsv.redhat.com [10.15.1.9]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5JLs8rP014471 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NO); Thu, 19 Jun 2014 17:54:09 -0400 Message-ID: <53A35C00.1070703@redhat.com> Date: Thu, 19 Jun 2014 16:54:08 -0500 From: David Smith User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.6.0 MIME-Version: 1.0 To: William Cohen , "Frank Ch. Eigler" CC: pcp@oss.sgi.com, Nathan Scott Subject: Re: PCP Network Latency PMDA References: <53A34A47.3060008@redhat.com> <53A353C8.8030704@redhat.com> X-ASG-Orig-Subj: Re: PCP Network Latency PMDA In-Reply-To: <53A353C8.8030704@redhat.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1403214850 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On 06/19/2014 04:19 PM, William Cohen wrote: > On 06/19/2014 04:59 PM, Frank Ch. Eigler wrote: >> William Cohen writes: >> >>> I have been looking at a PMDA that provides information about how long >>> it takes for packets to make their way from userspace to the network >>> device and from network device to userspace. [...] >> >> Neat. >> >>> network.interface.in.latency instance "devname" >>> network.interface.out.latency instance "devname" >>> [...] >>> (latency_sum[t]-latency_sum[t-delta])/(packets[t]-packets[t-delta]) >> >> This sounds like just the sort of thing that we'd use dsmith's richer >> pcp-systemtap interface widgetry, currently being designed, and this >> computation could be one of its examples. Keep the ideas coming, and >> work with dsmith. (I would not suggest building just this into a >> separate PMDA.) >> >> >> - FChE >> > > Hi Frank, > > Is the a pointer to the pcp/systemtap integration that David Smith > is working on? At this point most of it is in my head. But, here's the original plan (although "plan" is probably too strong a word at this point). The plan is for stap to provide dynamic values to pcp. This would be a lot like pcp's mmv library/pmda, that allows pcp to monitor memory mapped values from a program. In this case, systemtap would be providing the values. Note that it probably won't end up 100% compatible with pcp's mmv library/pmda. (In a perfect world, perhaps systemtap's dyninst side could actually use pcp's mmv library. I'd hope to make things look the same from the user's point of view inside systemtap.) > It is possible that similar latency measurements could be done for > the block io layer like the stuff that blktrace does. However, one > concern is there could be a huge number of items to track (in the > tens of thousands) that might not fit easily in a default sized > associative array. Here's where things get interesting. I mentioned this "plan" to Nathan, and he suggested we might need to go further. If we're going to provide real tracing information back to pcp, we're going to need to provide timestamp'ed information, read on demand from pcp. This means we'd need to buffer it inside systemtap. This might be a phase 2. Back to your original idea for a second. Are you at the point where you've got a systemtap script that produces the data you want? If so, I'd love to see it and use it for a test when I get to that point. -- David Smith dsmith@redhat.com Red Hat http://www.redhat.com 256.217.0141 (direct) 256.837.0057 (fax) From nscott@redhat.com Thu Jun 19 17:54:06 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 80D7529DF8 for ; Thu, 19 Jun 2014 17:54:06 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 2B12BAC002 for ; Thu, 19 Jun 2014 15:54:03 -0700 (PDT) X-ASG-Debug-ID: 1403218438-04bdf056693577e0001-S8gJnT Received: from mx4-phx2.redhat.com (mx4-phx2.redhat.com [209.132.183.25]) by cuda.sgi.com with ESMTP id VlZfDBS0dbgdImbo for ; Thu, 19 Jun 2014 15:53:58 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.25 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx4-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id s5JMrwRh023182; Thu, 19 Jun 2014 18:53:58 -0400 Date: Thu, 19 Jun 2014 18:53:58 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: Dave Brolley Cc: "Frank Ch. Eigler" , pcp@oss.sgi.com Message-ID: <1626292250.29748592.1403218438153.JavaMail.zimbra@redhat.com> In-Reply-To: <53A34633.2040006@redhat.com> References: <20140619194444.3B03D58015@fche.csb> <53A34633.2040006@redhat.com> Subject: Re: [pcp] pmServiceDiscoveryInterrupt() commit a8b87e2 et al. MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [pcp] pmServiceDiscoveryInterrupt() commit a8b87e2 et al. Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: pmServiceDiscoveryInterrupt() commit a8b87e2 et al. Thread-Index: BjJB7wia5mHaG5wwZO+OTZP7Ese92A== X-Barracuda-Connect: mx4-phx2.redhat.com[209.132.183.25] X-Barracuda-Start-Time: 1403218438 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.03 X-Barracuda-Spam-Status: No, SCORE=0.03 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA_TO_FROM_DOMAIN_MATCH, THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6788 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 0.01 BSF_SC0_SA_TO_FROM_DOMAIN_MATCH Sender Domain Matches Recipient Domain ----- Original Message ----- > [...] > > WRT the API, the various options for overloading the current strings > were considered and discussed and, while I knew that changing the ABI > could be problematic, it seemed to me that Nathan was encouraging the > addition of a new options string. This in turn lead me to believe that > it was not too late to change this API. Yeah, this PMAPI addition can only be made via a new function. IIRC (gettin' old, there's a good chance I'm not RC), I had said something to the effect that the two externally visible APIs would call a single internal API, or the old would call the new with NULL options. If I didn't, that was the intention - sorry 'bout the ambiguity there. cheers. -- Nathan From fche@redhat.com Thu Jun 19 20:57:20 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 306247F3F for ; Thu, 19 Jun 2014 20:57:20 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 0ADDF304048 for ; Thu, 19 Jun 2014 18:57:19 -0700 (PDT) X-ASG-Debug-ID: 1403229435-04bdf056663600d0001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id kDMUlrQoZ2bHdjzK (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 19 Jun 2014 18:57:15 -0700 (PDT) X-Barracuda-Envelope-From: fche@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s5K1vCFJ008341 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 19 Jun 2014 21:57:12 -0400 Received: from fche.csb (vpn-56-123.rdu2.redhat.com [10.10.56.123]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5K1vBWb029768; Thu, 19 Jun 2014 21:57:12 -0400 Received: by fche.csb (Postfix, from userid 2569) id 1163258161; Thu, 19 Jun 2014 21:57:11 -0400 (EDT) To: Ken McDonell Cc: pcp@oss.sgi.com Subject: Re: PCP Network Latency PMDA References: <53A34A47.3060008@redhat.com> <53A352FF.9090906@internode.on.net> X-ASG-Orig-Subj: Re: PCP Network Latency PMDA From: fche@redhat.com (Frank Ch. Eigler) Date: Thu, 19 Jun 2014 21:57:10 -0400 In-Reply-To: <53A352FF.9090906@internode.on.net> (Ken McDonell's message of "Fri, 20 Jun 2014 07:15:43 +1000") Message-ID: User-Agent: Gnus/5.1008 (Gnus v5.10.8) Emacs/21.4 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Scanned-By: MIMEDefang 2.68 on 10.5.11.22 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1403229435 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 kenj wrote: > [...] Depending on the overhead of this instrumentation, you may > wish to consider using an additional control variable and pmStore(1) > to allow a user to enable or disable the collection [...] FWIW, I wish we leaned less on this particular technique. The pmda infrastructure has the ability to track individual pcp clients coming and going. So, a pmda can/should activate collection on demand, not based on a contentious and non-obvious global variable. - FChE From kenj@internode.on.net Fri Jun 20 00:09:00 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id E838E7F3F for ; Fri, 20 Jun 2014 00:09:00 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id D84AE8F804C for ; Thu, 19 Jun 2014 22:08:57 -0700 (PDT) X-ASG-Debug-ID: 1403240931-04cb6c76d21d910001-S8gJnT Received: from ipmail06.adl6.internode.on.net (ipmail06.adl6.internode.on.net [150.101.137.145]) by cuda.sgi.com with ESMTP id qGUBpKqsYhZVGnEj for ; Thu, 19 Jun 2014 22:08:52 -0700 (PDT) X-Barracuda-Envelope-From: kenj@internode.on.net X-Barracuda-Apparent-Source-IP: 150.101.137.145 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Ap+XAM3Ao1N5LaeaPGdsb2JhbABZgw2DSIUIvCgDAgGBCRcEAQEBATg1hAMBAQUIAh4SHCMMAQMCBgMRBAEBKAcZIAoDCQgCBBMLBYgxy1QXjnYHBoQ9BJBfoRAr Received: from ppp121-45-167-154.lns20.syd6.internode.on.net (HELO bozohorize) ([121.45.167.154]) by ipmail06.adl6.internode.on.net with ESMTP; 20 Jun 2014 14:38:50 +0930 From: "Ken McDonell" To: "'Frank Ch. Eigler'" Cc: References: <20140616214301.GB6693@redhat.com> <539F7C0B.9050507@internode.on.net> <53A2297A.6000202@internode.on.net> In-Reply-To: Subject: RE: pcp+graphite, take 2 Date: Fri, 20 Jun 2014 15:08:49 +1000 X-ASG-Orig-Subj: RE: pcp+graphite, take 2 Message-ID: <005d01cf8c45$b9efdb50$2dcf91f0$@internode.on.net> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit X-Mailer: Microsoft Outlook 15.0 Thread-Index: AQMFYlM3q7i8zsnFcP5mMmn8PppB7AD8Ejm3AxKfV0UBsloF25jfvRow Content-Language: en-au X-Barracuda-Connect: ipmail06.adl6.internode.on.net[150.101.137.145] X-Barracuda-Start-Time: 1403240931 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.01 X-Barracuda-Spam-Status: No, SCORE=0.01 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, THREAD_INDEX X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6794 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header Frank, Just a quick update ... I have pmwebd working with -M 4 now ... but it required a lobotomy for the read_cache used in interp.c ... given the risks here and the complexity of the code, don't expect a commit "any time real soon", but don't waste time trying to debug in parallel either. Initial speedup is only 10% on a 2 CPU VM ... so that's not too encouraging ... but let's wait until I have the final fix done before we get too excited or too depressed. > -----Original Message----- > From: Frank Ch. Eigler [mailto:fche@redhat.com] > Sent: Friday, 20 June 2014 12:37 AM > To: Ken McDonell > Cc: pcp@oss.sgi.com > Subject: Re: pcp+graphite, take 2 > ... > (It turns out that -M1 etc. still crashes quickly, so we have some way to go > before multithreaded speedorama.) From brolley@redhat.com Fri Jun 20 09:09:49 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 89AF47F3F for ; Fri, 20 Jun 2014 09:09:49 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 77FF48F8035 for ; Fri, 20 Jun 2014 07:09:49 -0700 (PDT) X-ASG-Debug-ID: 1403273384-04cbb00a0321dea0001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id 2Zd9IKCW95m6p7qA (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Fri, 20 Jun 2014 07:09:45 -0700 (PDT) X-Barracuda-Envelope-From: brolley@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s5KE9hfR012556 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Fri, 20 Jun 2014 10:09:44 -0400 Received: from [10.10.54.153] (vpn-54-153.rdu2.redhat.com [10.10.54.153]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5KE9gkS012130; Fri, 20 Jun 2014 10:09:42 -0400 Message-ID: <53A44150.1060709@redhat.com> Date: Fri, 20 Jun 2014 10:12:32 -0400 From: Dave Brolley User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0 MIME-Version: 1.0 To: Nathan Scott CC: "Frank Ch. Eigler" , pcp@oss.sgi.com Subject: Re: [pcp] pmServiceDiscoveryInterrupt() commit a8b87e2 et al. References: <20140619194444.3B03D58015@fche.csb> <53A34633.2040006@redhat.com> <1626292250.29748592.1403218438153.JavaMail.zimbra@redhat.com> X-ASG-Orig-Subj: Re: [pcp] pmServiceDiscoveryInterrupt() commit a8b87e2 et al. In-Reply-To: <1626292250.29748592.1403218438153.JavaMail.zimbra@redhat.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.27 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1403273385 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On 06/19/2014 06:53 PM, Nathan Scott wrote: > > ----- Original Message ----- >> [...] >> >> WRT the API, the various options for overloading the current strings >> were considered and discussed and, while I knew that changing the ABI >> could be problematic, it seemed to me that Nathan was encouraging the >> addition of a new options string. This in turn lead me to believe that >> it was not too late to change this API. > Yeah, this PMAPI addition can only be made via a new function. IIRC > (gettin' old, there's a good chance I'm not RC), I had said something > to the effect that the two externally visible APIs would call a single > internal API, or the old would call the new with NULL options. If I > didn't, that was the intention - sorry 'bout the ambiguity there. > Understood. Probably my misinterpretation. Dave From kenj@internode.on.net Sat Jun 21 03:12:07 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id B41197F3F for ; Sat, 21 Jun 2014 03:12:07 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id A18E730404E for ; Sat, 21 Jun 2014 01:12:07 -0700 (PDT) X-ASG-Debug-ID: 1403338321-04cb6c76d0d68d0001-S8gJnT Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id s6aaSZsNPWTePTwN for ; Sat, 21 Jun 2014 01:12:02 -0700 (PDT) X-Barracuda-Envelope-From: kenj@internode.on.net X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AihjAOU9pVN20W4YPGdsb2JhbABYgw1SgnaFCLwuA4ELFwQBAQEBODWECggCMBwwBQYXSyAKFQEEEwsFiDGcIa1ojxOELQSQYKESKw Received: from ppp118-209-110-24.lns20.mel4.internode.on.net (HELO bozohorize) ([118.209.110.24]) by ipmail04.adl6.internode.on.net with ESMTP; 21 Jun 2014 17:42:00 +0930 From: "Ken McDonell" To: Subject: pcp updates - thread safe improvements for archive contexts Date: Sat, 21 Jun 2014 18:11:54 +1000 X-ASG-Orig-Subj: pcp updates - thread safe improvements for archive contexts Message-ID: <038001cf8d28$77783a90$6668afb0$@internode.on.net> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit X-Mailer: Microsoft Outlook 15.0 Thread-Index: Ac+NKF/Tx6eXeFAIQz646OFToQYZOg== Content-Language: en-au X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1403338322 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.01 X-Barracuda-Spam-Status: No, SCORE=0.01 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6825 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== Frank ... try this with your -M x option to pmwebd ... works for me (tm) ... 8^)> Changes committed to git://oss.sgi.com/kenj/pcp.git dev src/include/pcp/impl.h | 2 src/libpcp/src/check-statics | 2 src/libpcp/src/context.c | 30 +++++-- src/libpcp/src/interp.c | 167 ++++++++++++++++++++++++------------------- src/libpcp/src/logutil.c | 1 5 files changed, 121 insertions(+), 81 deletions(-) commit 4c6700cca88b47556953c4b9aad947f741959259 Author: Ken McDonell Date: Sat Jun 21 17:51:58 2014 +1000 libpcp - interp mode rework to make read cache thread safe This commit addresses the problems Frank encountered when trying to run pmwebd in multi-threaded mode. Basically, the read cache used by interp mode with archive contexts has been refactored. It used to be sort of global, which was just plain wrong. The new implementation instantiates one read cache for each archive context. From wwwrun@oss.sgi.com Sat Jun 21 22:55:50 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HTML_MESSAGE,NO_RELAYS autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: by oss.sgi.com (Postfix, from userid 30) id 24F6A7F4E; Sat, 21 Jun 2014 22:55:50 -0500 (CDT) From: bugzilla-daemon@oss.sgi.com To: pcp@oss.sgi.com Subject: [Bug 1055] multithreaded libpcp race conditions Date: Sun, 22 Jun 2014 03:55:49 +0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Classification: Unclassified X-Bugzilla-Product: pcp X-Bugzilla-Component: pcp X-Bugzilla-Keywords: X-Bugzilla-Severity: major X-Bugzilla-Who: fche@redhat.com X-Bugzilla-Status: NEW X-Bugzilla-Priority: P5 X-Bugzilla-Assigned-To: pcp@kenj.com.au X-Bugzilla-Target-Milestone: --- X-Bugzilla-Changed-Fields: Message-ID: In-Reply-To: References: Content-Type: multipart/alternative; boundary="1403409350.c8fF1.4720"; charset="us-ascii" X-Bugzilla-URL: http://oss.sgi.com/bugzilla/ Auto-Submitted: auto-generated MIME-Version: 1.0 --1403409350.c8fF1.4720 Date: Sat, 21 Jun 2014 22:55:50 -0500 MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8" http://oss.sgi.com/bugzilla/show_bug.cgi?id=1055 --- Comment #1 from Frank Ch. Eigler --- Another likely race condition instance seen in the wild: pmwebd -M16 on 4-core machine, with some hundreds of archives in the job queue: Program received signal SIGSEGV, Segmentation fault. [Switching to Thread 0x2aaabcab6700 (LWP 30465)] __strncmp_sse42 () at ../sysdeps/x86_64/multiarch/strcmp-sse42.S:236 236 movdqa (%rsi), %xmm1 Missing separate debuginfos, use: debuginfo-install cyrus-sasl-lib-2.1.26-10.fc19.x86_64 freetype-freeworld-2.4.11-3.fc19.x86_64 gnome-keyring-3.8.2-1.fc19.x86_64 libtasn1-3.6-1.fc19.x86_64 mesa-libEGL-9.2.4-1.20131128.fc19.x86_64 mesa-libgbm-9.2.4-1.20131128.fc19.x86_64 mesa-libglapi-9.2.4-1.20131128.fc19.x86_64 nettle-2.6-2.fc19.x86_64 p11-kit-0.18.7-1.fc19.x86_64 p11-kit-trust-0.18.7-1.fc19.x86_64 (gdb) bt #0 __strncmp_sse42 () at ../sysdeps/x86_64/multiarch/strcmp-sse42.S:236 #1 0x00002aaaaace9a82 in locate (name=, root=) at pmns.c:1324 #2 0x00002aaaaaceb80d in pmLookupName (numpmid=1, namelist=0x2aaabcab59e0, pmidlist=0x2aaabcab59d0) at pmns.c:1484 #3 0x000055555556d01e in pmgraphite_fetch_series (spec=0x5555558ea960) at pmgraphite.cxx:790 #4 0x00005555555768f8 in fetch_series_jobqueue::thread_main (cls=0x7fffffffbc10) at pmgraphite.cxx:638 #5 0x00002aaaac52ac53 in start_thread (arg=0x2aaabcab6700) at pthread_create.c:308 #6 0x00002aaaac257dbd in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:113 (gdb) frame 2 #2 0x00002aaaaaceb80d in pmLookupName (numpmid=1, namelist=0x2aaabcab59e0, pmidlist=0x2aaabcab59d0) at pmns.c:1484 1484 np = locate(namelist[i], curr_pmns->root); (gdb) p namelist $1 = (char **) 0x2aaabcab59e0 (gdb) p i $2 = (gdb) down #1 0x00002aaaaace9a82 in locate (name=, root=) at pmns.c:1324 1324 if (strncmp(name, np->name, (int)nch) == 0 && np->name[(int)nch] == '\0' && (gdb) p name $3 = (gdb) p np $4 = (__pmnsNode *) 0x555556f02f80 (gdb) p *np $5 = {parent = 0x7a0, next = 0x40, first = 0x555556f02fe0, hash = 0xfcfcfcfcfcfcfcfc, name = 0xfcfcfcfcfcfcfcfc
, pmid = 4244438268} (gdb) bt #0 __strncmp_sse42 () at ../sysdeps/x86_64/multiarch/strcmp-sse42.S:236 #1 0x00002aaaaace9a82 in locate (name=, root=) at pmns.c:1324 #2 0x00002aaaaaceb80d in pmLookupName (numpmid=1, namelist=0x2aaabcab59e0, pmidlist=0x2aaabcab59d0) at pmns.c:1484 #3 0x000055555556d01e in pmgraphite_fetch_series (spec=0x5555558ea960) at pmgraphite.cxx:790 #4 0x00005555555768f8 in fetch_series_jobqueue::thread_main (cls=0x7fffffffbc10) at pmgraphite.cxx:638 #5 0x00002aaaac52ac53 in start_thread (arg=0x2aaabcab6700) at pthread_create.c:308 #6 0x00002aaaac257dbd in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:113 (gdb) frame 2 #2 0x00002aaaaaceb80d in pmLookupName (numpmid=1, namelist=0x2aaabcab59e0, pmidlist=0x2aaabcab59d0) at pmns.c:1484 1484 np = locate(namelist[i], curr_pmns->root); (gdb) l 1479 /* 1480 * if we locate the name and it is a leaf in the PMNS 1481 * this is good 1482 */ 1483 PM_LOCK(__pmLock_libpcp); 1484 np = locate(namelist[i], curr_pmns->root); 1485 PM_UNLOCK(__pmLock_libpcp); 1486 if (np != NULL ) { 1487 if (np->first == NULL) 1488 pmidlist[i] = np->pmid; (gdb) p curr_pmns $6 = (__pmnsTree *) 0x555556f02740 (gdb) p * curr_pmns $7 = {root = 0x555556f02ed0, htab = 0xfcfcfcfcfcfcfcfc, htabsize = -50529028, symbol = 0xfcfcfcfcfcfcfcfc
, contiguous = -50529028, mark_state = -50529028} -- You are receiving this mail because: You are on the CC list for the bug. --1403409350.c8fF1.4720 Date: Sat, 21 Jun 2014 22:55:50 -0500 MIME-Version: 1.0 Content-Type: text/html; charset="UTF-8"

Comment # 1 on bug 1055 from
Another likely race condition instance seen in the wild:
pmwebd -M16 on 4-core machine, with some hundreds of archives
in the job queue:


Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x2aaabcab6700 (LWP 30465)]
__strncmp_sse42 () at ../sysdeps/x86_64/multiarch/strcmp-sse42.S:236
236        movdqa    (%rsi), %xmm1
Missing separate debuginfos, use: debuginfo-install
cyrus-sasl-lib-2.1.26-10.fc19.x86_64 freetype-freeworld-2.4.11-3.fc19.x86_64
gnome-keyring-3.8.2-1.fc19.x86_64 libtasn1-3.6-1.fc19.x86_64
mesa-libEGL-9.2.4-1.20131128.fc19.x86_64
mesa-libgbm-9.2.4-1.20131128.fc19.x86_64
mesa-libglapi-9.2.4-1.20131128.fc19.x86_64 nettle-2.6-2.fc19.x86_64
p11-kit-0.18.7-1.fc19.x86_64 p11-kit-trust-0.18.7-1.fc19.x86_64
(gdb) bt
#0  __strncmp_sse42 () at ../sysdeps/x86_64/multiarch/strcmp-sse42.S:236
#1  0x00002aaaaace9a82 in locate (name=<optimized out>, root=<optimized out>)
at pmns.c:1324
#2  0x00002aaaaaceb80d in pmLookupName (numpmid=1, namelist=0x2aaabcab59e0,
pmidlist=0x2aaabcab59d0) at pmns.c:1484
#3  0x000055555556d01e in pmgraphite_fetch_series (spec=0x5555558ea960) at
pmgraphite.cxx:790
#4  0x00005555555768f8 in
fetch_series_jobqueue<fetch_series_jobspec>::thread_main (cls=0x7fffffffbc10)
at pmgraphite.cxx:638
#5  0x00002aaaac52ac53 in start_thread (arg=0x2aaabcab6700) at
pthread_create.c:308
#6  0x00002aaaac257dbd in clone () at
../sysdeps/unix/sysv/linux/x86_64/clone.S:113
(gdb) frame 2
#2  0x00002aaaaaceb80d in pmLookupName (numpmid=1, namelist=0x2aaabcab59e0,
pmidlist=0x2aaabcab59d0) at pmns.c:1484
1484            np = locate(namelist[i], curr_pmns->root);
(gdb) p namelist
$1 = (char **) 0x2aaabcab59e0
(gdb) p i
$2 = <optimized out>
(gdb) down
#1  0x00002aaaaace9a82 in locate (name=<optimized out>, root=<optimized out>)
at pmns.c:1324
1324        if (strncmp(name, np->name, (int)nch) == 0 && np->name[(int)nch] ==
'\0' &&
(gdb) p name
$3 = <optimized out>
(gdb) p np
$4 = (__pmnsNode *) 0x555556f02f80
(gdb) p *np
$5 = {parent = 0x7a0, next = 0x40, first = 0x555556f02fe0, hash =
0xfcfcfcfcfcfcfcfc, 
  name = 0xfcfcfcfcfcfcfcfc <Address 0xfcfcfcfcfcfcfcfc out of bounds>, pmid =
4244438268}
(gdb) bt
#0  __strncmp_sse42 () at ../sysdeps/x86_64/multiarch/strcmp-sse42.S:236
#1  0x00002aaaaace9a82 in locate (name=<optimized out>, root=<optimized out>)
at pmns.c:1324
#2  0x00002aaaaaceb80d in pmLookupName (numpmid=1, namelist=0x2aaabcab59e0,
pmidlist=0x2aaabcab59d0) at pmns.c:1484
#3  0x000055555556d01e in pmgraphite_fetch_series (spec=0x5555558ea960) at
pmgraphite.cxx:790
#4  0x00005555555768f8 in
fetch_series_jobqueue<fetch_series_jobspec>::thread_main (cls=0x7fffffffbc10)
at pmgraphite.cxx:638
#5  0x00002aaaac52ac53 in start_thread (arg=0x2aaabcab6700) at
pthread_create.c:308
#6  0x00002aaaac257dbd in clone () at
../sysdeps/unix/sysv/linux/x86_64/clone.S:113
(gdb) frame 2
#2  0x00002aaaaaceb80d in pmLookupName (numpmid=1, namelist=0x2aaabcab59e0,
pmidlist=0x2aaabcab59d0) at pmns.c:1484
1484            np = locate(namelist[i], curr_pmns->root);
(gdb) l
1479            /*
1480             * if we locate the name and it is a leaf in the PMNS
1481             * this is good
1482             */
1483            PM_LOCK(__pmLock_libpcp);
1484            np = locate(namelist[i], curr_pmns->root);
1485            PM_UNLOCK(__pmLock_libpcp);
1486            if (np != NULL ) {
1487            if (np->first == NULL)
1488                pmidlist[i] = np->pmid;
(gdb) p curr_pmns
$6 = (__pmnsTree *) 0x555556f02740
(gdb) p * curr_pmns
$7 = {root = 0x555556f02ed0, htab = 0xfcfcfcfcfcfcfcfc, htabsize = -50529028,
symbol = 0xfcfcfcfcfcfcfcfc <Address 0xfcfcfcfcfcfcfcfc out of bounds>, 
  contiguous = -50529028, mark_state = -50529028}


You are receiving this mail because:
  • You are on the CC list for the bug.
--1403409350.c8fF1.4720-- From kenj@kenj.com.au Sat Jun 21 23:53:01 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=DATE_IN_PAST_12_24 autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 7426B7F3F for ; Sat, 21 Jun 2014 23:53:01 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 56A858F8054 for ; Sat, 21 Jun 2014 21:52:58 -0700 (PDT) X-ASG-Debug-ID: 1403412771-04cb6c76d0133920001-S8gJnT Received: from ipmail06.adl6.internode.on.net (ipmail06.adl6.internode.on.net [150.101.137.145]) by cuda.sgi.com with ESMTP id 72GoCd6BE871xmG0 for ; Sat, 21 Jun 2014 21:52:52 -0700 (PDT) X-Barracuda-Envelope-From: kenj@kenj.com.au X-Barracuda-Apparent-Source-IP: 150.101.137.145 Received: from ppp118-209-128-243.lns20.mel6.internode.on.net (HELO bozo-vm.localdomain) ([118.209.128.243]) by ipmail06.adl6.internode.on.net with ESMTP; 22 Jun 2014 14:22:51 +0930 Received: by bozo-vm.localdomain (Postfix, from userid 1000) id A4E93A358E; Sat, 21 Jun 2014 17:59:59 +1000 (EST) To: pcp@oss.sgi.com Subject: pcp updates - thread safe improvements for archive contexts Message-Id: <20140621075959.A4E93A358E@bozo-vm.localdomain> X-ASG-Orig-Subj: pcp updates - thread safe improvements for archive contexts Date: Sat, 21 Jun 2014 17:59:59 +1000 (EST) From: kenj@kenj.com.au (Ken McDonell) X-Barracuda-Connect: ipmail06.adl6.internode.on.net[150.101.137.145] X-Barracuda-Start-Time: 1403412772 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.81 X-Barracuda-Spam-Status: No, SCORE=0.81 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DATE_IN_PAST_12_24, DATE_IN_PAST_12_24_2 X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6846 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 DATE_IN_PAST_12_24 Date: is 12 to 24 hours before Received: date 0.80 DATE_IN_PAST_12_24_2 DATE_IN_PAST_12_24_2 Changes committed to git://oss.sgi.com/kenj/pcp.git dev src/include/pcp/impl.h | 2 src/libpcp/src/check-statics | 2 src/libpcp/src/context.c | 30 +++++-- src/libpcp/src/interp.c | 167 ++++++++++++++++++++++++------------------- src/libpcp/src/logutil.c | 1 5 files changed, 121 insertions(+), 81 deletions(-) commit 4c6700cca88b47556953c4b9aad947f741959259 Author: Ken McDonell Date: Sat Jun 21 17:51:58 2014 +1000 libpcp - interp mode rework to make read cache thread safe This commit addresses the problems Frank encountered when trying to run pmwebd in multi-threaded mode. Basically, the read cache used by interp mode with archive contexts has been refactored. It used to be sort of global, which was just plain wrong. The new implementation instantiates one read cache for each archive context. From nscott@redhat.com Sun Jun 22 20:35:14 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id AD0897F3F for ; Sun, 22 Jun 2014 20:35:14 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 8BCA38F8033 for ; Sun, 22 Jun 2014 18:35:11 -0700 (PDT) X-ASG-Debug-ID: 1403487306-04bdf056674e0860001-S8gJnT Received: from mx3-phx2.redhat.com (mx3-phx2.redhat.com [209.132.183.24]) by cuda.sgi.com with ESMTP id JTfIFgRzeiBzEEl2 for ; Sun, 22 Jun 2014 18:35:06 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.24 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx3-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id s5N1Z3ev025872; Sun, 22 Jun 2014 21:35:03 -0400 Date: Sun, 22 Jun 2014 21:35:02 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: "Frank Ch. Eigler" , Ken McDonell Cc: pcp@oss.sgi.com Message-ID: <1241706054.31171165.1403487302812.JavaMail.zimbra@redhat.com> In-Reply-To: References: <53A34A47.3060008@redhat.com> <53A352FF.9090906@internode.on.net> Subject: Re: [pcp] PCP Network Latency PMDA MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [pcp] PCP Network Latency PMDA Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: PCP Network Latency PMDA Thread-Index: C8yGt/dDMFW5yPw79mkuNROwXo+oDg== X-Barracuda-Connect: mx3-phx2.redhat.com[209.132.183.24] X-Barracuda-Start-Time: 1403487306 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.03 X-Barracuda-Spam-Status: No, SCORE=0.03 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA_TO_FROM_DOMAIN_MATCH, THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6869 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 0.01 BSF_SC0_SA_TO_FROM_DOMAIN_MATCH Sender Domain Matches Recipient Domain ----- Original Message ----- > > kenj wrote: > > > [...] Depending on the overhead of this instrumentation, you may > > wish to consider using an additional control variable and pmStore(1) > > to allow a user to enable or disable the collection [...] > > FWIW, I wish we leaned less on this particular technique. The missing piece is better (client) tool support - its needed for not just enabling expensive metrics, but also server-side filtering. It'd be neat for pmchart to offer this kind of capability, as well as the many console tools. > The pmda > infrastructure has the ability to track individual pcp clients coming > and going. > So, a pmda can/should activate collection on demand, A client simply showing interest in the metrics from a PMDA is not enough information to know whether expensive collection should be enabled or not though. A PMDA can export both expensive and inexpensive metrics too, or the enabled state may be system wide (like hardware counters, or gluster volume stats, or any of a number of other things that the underlying data domain creators have chosen not to enable by default). cheers. -- Nathan From fche@redhat.com Sun Jun 22 20:41:08 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id E2E2D7F3F for ; Sun, 22 Jun 2014 20:41:08 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id CBEAE304053 for ; Sun, 22 Jun 2014 18:41:08 -0700 (PDT) X-ASG-Debug-ID: 1403487667-04cb6c76d2186220001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id IvqVg6lyXQFwmlpP (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Sun, 22 Jun 2014 18:41:07 -0700 (PDT) X-Barracuda-Envelope-From: fche@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s5N1f4Qc013545 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Sun, 22 Jun 2014 21:41:04 -0400 Received: from fche.csb (vpn-56-123.rdu2.redhat.com [10.10.56.123]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5N1f38E026206; Sun, 22 Jun 2014 21:41:03 -0400 Received: by fche.csb (Postfix, from userid 2569) id F058F584EC; Sun, 22 Jun 2014 21:41:02 -0400 (EDT) Date: Sun, 22 Jun 2014 21:41:02 -0400 From: "Frank Ch. Eigler" To: Nathan Scott Cc: Ken McDonell , pcp@oss.sgi.com Subject: Re: [pcp] PCP Network Latency PMDA Message-ID: <20140623014102.GI8337@redhat.com> X-ASG-Orig-Subj: Re: [pcp] PCP Network Latency PMDA References: <53A34A47.3060008@redhat.com> <53A352FF.9090906@internode.on.net> <1241706054.31171165.1403487302812.JavaMail.zimbra@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1241706054.31171165.1403487302812.JavaMail.zimbra@redhat.com> User-Agent: Mutt/1.4.2.2i X-Scanned-By: MIMEDefang 2.68 on 10.5.11.22 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1403487667 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Hi - > > > [...] Depending on the overhead of this instrumentation, you may > > > wish to consider using an additional control variable and pmStore(1) > > > to allow a user to enable or disable the collection [...] > > > > FWIW, I wish we leaned less on this particular technique. > > The missing piece is better (client) tool support - its needed for not > just enabling expensive metrics, but also server-side filtering. [...] Server-side filtering would still be a per-client proposition. I wouldn't want my run pmlogger to become silent just because some other guy is filtering his stream. > > The pmda infrastructure has the ability to track individual pcp > > clients coming and going. So, a pmda can/should activate > > collection on demand, > A client simply showing interest in the metrics from a PMDA is not enough > information to know whether expensive collection should be enabled or not > though. Why not? > A PMDA can export both expensive and inexpensive metrics too, or the > enabled state may be system wide (like hardware counters, or gluster > volume stats, or any of a number of other things that the underlying > data domain creators have chosen not to enable by default). Sure, these statistics may not be worth keeping if no one's listening. But we're talking about the case where a PCP client has expressed specific interest in them: it's the opposite case. - FChE From nscott@redhat.com Sun Jun 22 20:49:56 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 7CE557F3F for ; Sun, 22 Jun 2014 20:49:56 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id F3E55AC001 for ; Sun, 22 Jun 2014 18:49:52 -0700 (PDT) X-ASG-Debug-ID: 1403488190-04cb6c76d0186a10001-S8gJnT Received: from mx4-phx2.redhat.com (mx4-phx2.redhat.com [209.132.183.25]) by cuda.sgi.com with ESMTP id t6mh72Qs6miMWEdI for ; Sun, 22 Jun 2014 18:49:51 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.25 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx4-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id s5N1nACk001033; Sun, 22 Jun 2014 21:49:11 -0400 Date: Sun, 22 Jun 2014 21:49:10 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: "Frank Ch. Eigler" Cc: Ken McDonell , pcp@oss.sgi.com Message-ID: <1830537766.31176499.1403488150780.JavaMail.zimbra@redhat.com> In-Reply-To: <20140623014102.GI8337@redhat.com> References: <53A34A47.3060008@redhat.com> <53A352FF.9090906@internode.on.net> <1241706054.31171165.1403487302812.JavaMail.zimbra@redhat.com> <20140623014102.GI8337@redhat.com> Subject: Re: [pcp] PCP Network Latency PMDA MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [pcp] PCP Network Latency PMDA Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: PCP Network Latency PMDA Thread-Index: KHF4bbLpuW9StEA986tq9SeD2nmy0g== X-Barracuda-Connect: mx4-phx2.redhat.com[209.132.183.25] X-Barracuda-Start-Time: 1403488190 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.03 X-Barracuda-Spam-Status: No, SCORE=0.03 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, BSF_SC0_SA_TO_FROM_DOMAIN_MATCH, THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6870 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.01 BSF_SC0_SA_TO_FROM_DOMAIN_MATCH Sender Domain Matches Recipient Domain ----- Original Message ----- > > A client simply showing interest in the metrics from a PMDA is not enough > > information to know whether expensive collection should be enabled or not > > though. > > Why not? > PMDAs can export many metrics, some may be expensive others not. Take Wills example of network.* for example, which would be handled by the Linux kernel PMDA. It exports many other metrics, and enabling every single expensive metric that might make sense for it to export, simply because pminfo connected and asked for a value (of an unrelated metric) would not be sensible. Nor should it become a requirement that any PMDA that has expensive metrics, can only export those expensive metrics and not inexpensive ones. cheers. -- Nathan From fche@redhat.com Sun Jun 22 20:54:14 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 4146A7F3F for ; Sun, 22 Jun 2014 20:54:14 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id B61F0AC003 for ; Sun, 22 Jun 2014 18:54:13 -0700 (PDT) X-ASG-Debug-ID: 1403488451-04cbb00a02352190001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id rJvzYBYKZYLDerkV (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Sun, 22 Jun 2014 18:54:12 -0700 (PDT) X-Barracuda-Envelope-From: fche@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s5N1s9Cb018883 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Sun, 22 Jun 2014 21:54:09 -0400 Received: from fche.csb (vpn-56-123.rdu2.redhat.com [10.10.56.123]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5N1s8Od006720; Sun, 22 Jun 2014 21:54:09 -0400 Received: by fche.csb (Postfix, from userid 2569) id 35187584EC; Sun, 22 Jun 2014 21:54:08 -0400 (EDT) Date: Sun, 22 Jun 2014 21:54:08 -0400 From: "Frank Ch. Eigler" To: Nathan Scott Cc: Ken McDonell , pcp@oss.sgi.com Subject: Re: [pcp] PCP Network Latency PMDA Message-ID: <20140623015408.GJ8337@redhat.com> X-ASG-Orig-Subj: Re: [pcp] PCP Network Latency PMDA References: <53A34A47.3060008@redhat.com> <53A352FF.9090906@internode.on.net> <1241706054.31171165.1403487302812.JavaMail.zimbra@redhat.com> <20140623014102.GI8337@redhat.com> <1830537766.31176499.1403488150780.JavaMail.zimbra@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1830537766.31176499.1403488150780.JavaMail.zimbra@redhat.com> User-Agent: Mutt/1.4.2.2i X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1403488452 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Hi - > PMDAs can export many metrics, some may be expensive others not. > [...] It exports many other metrics, and enabling every single > expensive metric that might make sense for it to export, simply > because pminfo connected and asked for a value (of an unrelated > metric) would not be sensible. I don't think anyone was suggesting an all-or-none sort of collection behavior. I only said on-demand, referring to the metrics actually requested by a client (suffering PM_ERR_VALUE or PM_ERR_AGAIN or PM_ERR_PMDANOTREADY or whatever for that first pmFetch). - FChE From nscott@redhat.com Sun Jun 22 20:59:28 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id DC5C57F3F for ; Sun, 22 Jun 2014 20:59:27 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 5A03AAC001 for ; Sun, 22 Jun 2014 18:59:27 -0700 (PDT) X-ASG-Debug-ID: 1403488765-04bdf056674e2540001-S8gJnT Received: from mx3-phx2.redhat.com (mx3-phx2.redhat.com [209.132.183.24]) by cuda.sgi.com with ESMTP id alIRgRj8ScYiCeq6 for ; Sun, 22 Jun 2014 18:59:25 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.24 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx3-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id s5N1xPZT029259; Sun, 22 Jun 2014 21:59:25 -0400 Date: Sun, 22 Jun 2014 21:59:24 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: "Frank Ch. Eigler" Cc: pcp@oss.sgi.com, William Cohen Message-ID: <1795109201.31180783.1403488764848.JavaMail.zimbra@redhat.com> In-Reply-To: References: <1582052329.18672839.1401703216956.JavaMail.zimbra@redhat.com> <740708456.18675715.1401703776506.JavaMail.zimbra@redhat.com> Subject: Re: [RFC] Command pipe PMDA MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [RFC] Command pipe PMDA Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: Command pipe PMDA Thread-Index: OpZ2dytHEBH1J9ZxR9S7cpRLGGSARg== X-Barracuda-Connect: mx3-phx2.redhat.com[209.132.183.24] X-Barracuda-Start-Time: 1403488765 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.03 X-Barracuda-Spam-Status: No, SCORE=0.03 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, BSF_SC0_SA_TO_FROM_DOMAIN_MATCH, THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6870 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.01 BSF_SC0_SA_TO_FROM_DOMAIN_MATCH Sender Domain Matches Recipient Domain ----- Original Message ----- > > Hi, Nathan - > Hey - thanks for reading. > > > My colleague Will Cohen recently floated the idea of using PCP to > > carefully lift some permissions restrictions in tools like perf, > > and to enable perf functionality to be injected into PCP to some > > extent. [...] > > It seems to me that the perf angle to this is peripheral; the > hypothetical new pcp capability is on-demand remote invocation of > console programs and collection of their outputs. Yep, certainly - I mention that only to give the background of where Will's inspiration came from (and one extremely good use case). > > [...] We could tackle this problem with a new pmdapipe(1) agent in > > PCP > > (Just toolshedding, but I'd suggest "pmdaexec" or similar instead of > "pipe", which reflects an internal implementation artifact.) Heh - "exec" seems far more the implementation detail (& only a small part of the picture) - the "pipe" here is more of the shell pipe (|) rather than the popen(3) vs exec(3) detail, reflecting that output from one command feeds back to another separate command. The simple "exec" doesn't express that flavour, which is really at the core of the concept. Yes, you could simply exec something with this, but there's not alot of point & the power comes from pmevent driving it. > Consider also system overview type commands, which could be quite > informative if logged periodically, along with some crazier ideas: > > "kill $1" > "service $1 $2" Er, yep, thats pretty out there. Under what situations would it be desirable for a sysadmin to enable that level of crazy? Surely this is the realm of sudo, and noone would want to expose that kind of thing onto the network via PCP...? > "ps -ef" > "smartctl -a $1" > "dmidecode" > [...] Many of these things seem more suited to that old pmdapaste concept too, btw, which was more generalised again & without the restriction of having to have thought about the need for certain commands well ahead of needing to log 'em. [ http://oss.sgi.com/archives/pcp/2013-09/msg00068.html ] cheers. -- Nathan From nscott@redhat.com Sun Jun 22 21:12:00 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 6BCEA7F3F for ; Sun, 22 Jun 2014 21:12:00 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 5841A304053 for ; Sun, 22 Jun 2014 19:11:57 -0700 (PDT) X-ASG-Debug-ID: 1403489515-04cb6c76d1188140001-S8gJnT Received: from mx5-phx2.redhat.com (mx5-phx2.redhat.com [209.132.183.37]) by cuda.sgi.com with ESMTP id PHcNxoyFyDGAkOOb for ; Sun, 22 Jun 2014 19:11:55 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.37 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx5-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5N2BpLN018321; Sun, 22 Jun 2014 22:11:51 -0400 Date: Sun, 22 Jun 2014 22:11:51 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: "Frank Ch. Eigler" Cc: Ken McDonell , pcp@oss.sgi.com Message-ID: <223453324.31184588.1403489511833.JavaMail.zimbra@redhat.com> In-Reply-To: <20140623015408.GJ8337@redhat.com> References: <53A34A47.3060008@redhat.com> <53A352FF.9090906@internode.on.net> <1241706054.31171165.1403487302812.JavaMail.zimbra@redhat.com> <20140623014102.GI8337@redhat.com> <1830537766.31176499.1403488150780.JavaMail.zimbra@redhat.com> <20140623015408.GJ8337@redhat.com> Subject: Re: [pcp] PCP Network Latency PMDA MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [pcp] PCP Network Latency PMDA Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: PCP Network Latency PMDA Thread-Index: 2inUxi9UGhS5CcHuBxvil15/9tMGHg== X-Barracuda-Connect: mx5-phx2.redhat.com[209.132.183.37] X-Barracuda-Start-Time: 1403489515 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.03 X-Barracuda-Spam-Status: No, SCORE=0.03 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, BSF_SC0_SA_TO_FROM_DOMAIN_MATCH, THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6870 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.01 BSF_SC0_SA_TO_FROM_DOMAIN_MATCH Sender Domain Matches Recipient Domain ----- Original Message ----- > Hi - > > > PMDAs can export many metrics, some may be expensive others not. > > [...] It exports many other metrics, and enabling every single > > expensive metric that might make sense for it to export, simply > > because pminfo connected and asked for a value (of an unrelated > > metric) would not be sensible. > > I don't think anyone was suggesting an all-or-none sort of collection > behavior. I only said on-demand, referring to the metrics actually > requested by a client (suffering PM_ERR_VALUE or PM_ERR_AGAIN or > PM_ERR_PMDANOTREADY or whatever for that first pmFetch). Its common for someone to run something like "pminfo -f network" to get a high level look, then browse through the result, maybe iterating on further with pminfo to something more specific, or switching to pmchart or another tool for a different view. pminfo and pmprobe are the classic short-lived-clients cases that should show why this would be a problem in practice (the PMDAs do not know what the nature of the connecting clients are, and nor should they). cheers. -- Nathan From nscott@redhat.com Sun Jun 22 21:31:10 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 495947F3F for ; Sun, 22 Jun 2014 21:31:10 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 1BBFC8F8035 for ; Sun, 22 Jun 2014 19:31:06 -0700 (PDT) X-ASG-Debug-ID: 1403490664-04bdf056684e5040001-S8gJnT Received: from mx4-phx2.redhat.com (mx4-phx2.redhat.com [209.132.183.25]) by cuda.sgi.com with ESMTP id i2UtcLAb3LF1A1Dk for ; Sun, 22 Jun 2014 19:31:04 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.25 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx4-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id s5N2V4gJ007556; Sun, 22 Jun 2014 22:31:04 -0400 Date: Sun, 22 Jun 2014 22:31:04 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: David Smith Cc: William Cohen , "Frank Ch. Eigler" , pcp@oss.sgi.com Message-ID: <132241477.31190933.1403490664246.JavaMail.zimbra@redhat.com> In-Reply-To: <53A35C00.1070703@redhat.com> References: <53A34A47.3060008@redhat.com> <53A353C8.8030704@redhat.com> <53A35C00.1070703@redhat.com> Subject: Re: PCP Network Latency PMDA MIME-Version: 1.0 X-ASG-Orig-Subj: Re: PCP Network Latency PMDA Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: PCP Network Latency PMDA Thread-Index: 0XMF6WxDS27xTkc8mc4QTwgPzGUwnA== X-Barracuda-Connect: mx4-phx2.redhat.com[209.132.183.25] X-Barracuda-Start-Time: 1403490664 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.03 X-Barracuda-Spam-Status: No, SCORE=0.03 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA_TO_FROM_DOMAIN_MATCH, THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6870 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 0.01 BSF_SC0_SA_TO_FROM_DOMAIN_MATCH Sender Domain Matches Recipient Domain Hi David, ----- Original Message ----- > [...] > At this point most of it is in my head. But, here's the original plan > (although "plan" is probably too strong a word at this point). The plan :) Please do send an RFC (nothing formal) out to the pcp list once some ideas start to fall into place, and you have a good direction in mind to head down - lots of heads older & more experienced than mine lurk here. Keep in mind that we could partition the MMV code in such a way that the generalised metric description side of things is separate from the value reading side of things, if that helps. e.g. It may make sense to use the former but with a different value-reading strategy perhaps (there's a bit of complexity in managing the metrics/instance offsets, that might not make sense to put into the kernel - even via systemtap; and perhaps using the existing sysfs/proc file/dir mechanisms would be a better fit). There are also subtle issues with MMV as we discussed, in terms of having to synchronise the instrumented application (or kernel) view of metrics, with whats exported - sometimes direct memory value is not sufficient, and calculations may need to be made on a value before its exported. With a memory mapping that is made tricky (since it can be sampled any time with no coordination between the process doing the sampling, and the code doing the exporting). Whereas, the usual way of sampling (proc/sysfs reader or whatever) has a natural sample time point where such transformations, or collections (e.g. perhaps summing all in-flight-I/O times - that kind of thing), can be made. See MMV_TYPE_ELAPSED for one approach that's been used there in the past, that'll give an example of this class of problem anyway - it is a more general problem than the specific one solved by that MMV type though. cheers. -- Nathan From nscott@redhat.com Sun Jun 22 21:43:47 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 7401C7F3F for ; Sun, 22 Jun 2014 21:43:47 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 6247B8F8037 for ; Sun, 22 Jun 2014 19:43:47 -0700 (PDT) X-ASG-Debug-ID: 1403491424-04cb6c76d218a560001-S8gJnT Received: from mx3-phx2.redhat.com (mx3-phx2.redhat.com [209.132.183.24]) by cuda.sgi.com with ESMTP id ltxZsIGG36xx1KSc for ; Sun, 22 Jun 2014 19:43:44 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.24 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx3-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id s5N2hiSR003733 for ; Sun, 22 Jun 2014 22:43:44 -0400 Date: Sun, 22 Jun 2014 22:43:44 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: PCP Message-ID: <1148738692.31195610.1403491424074.JavaMail.zimbra@redhat.com> In-Reply-To: <1349782638.31195581.1403491410809.JavaMail.zimbra@redhat.com> Subject: pcp updates: kenj merge + a pmns debug tweak MIME-Version: 1.0 X-ASG-Orig-Subj: pcp updates: kenj merge + a pmns debug tweak Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: pcp updates: kenj merge + a pmns debug tweak Thread-Index: BU+xeoB6DYzObaCJl1NQj7DsOKrYEQ== X-Barracuda-Connect: mx3-phx2.redhat.com[209.132.183.24] X-Barracuda-Start-Time: 1403491424 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6870 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Changes committed to git://git.performancecopilot.org/pcp.git dev src/include/pcp/impl.h | 3 src/libpcp/src/check-statics | 2 src/libpcp/src/context.c | 30 +++++-- src/libpcp/src/exports | 1 src/libpcp/src/interp.c | 179 +++++++++++++++++++++++-------------------- src/libpcp/src/logutil.c | 1 src/libpcp/src/pmns.c | 16 ++- 7 files changed, 136 insertions(+), 96 deletions(-) commit e4e8d34220f7d47e6d1237f5c5168b73e397e117 Merge: a6c824e 4c6700c Author: Nathan Scott Date: Mon Jun 23 12:34:05 2014 +1000 Merge branch 'dev' of git://git.performancecopilot.org/kenj/pcp into dev commit 4c6700cca88b47556953c4b9aad947f741959259 Author: Ken McDonell Date: Sat Jun 21 17:51:58 2014 +1000 libpcp - interp mode rework to make read cache thread safe This commit addresses the problems Frank encountered when trying to run pmwebd in multi-threaded mode. Basically, the read cache used by interp mode with archive contexts has been refactored. It used to be sort of global, which was just plain wrong. The new implementation instantiates one read cache for each archive context. commit a6c824ec37090973e2a783f5c3874c5dc4e1f2d6 Author: Nathan Scott Date: Fri Jun 20 14:18:45 2014 +1000 Export existing libpcp diagnostic routine for namespace debugging Add a __pmDumpNameNode interface to access the __pmDumpNameSpace functionality in libpcp. Handy for debugging PMDAs with dynamic metric names. commit b1fa8d138d2184e578ba66723968d8b961c05140 Author: Ken McDonell Date: Thu Jun 19 11:52:19 2014 +1000 libpcp/interp.c - modify read cache cleaning in __pmFreeInterpData() Instead of hand crafted code, use the existing __pmLogCacheClear() routine ... with the added benefit of the this part now being thread safe! From nscott@redhat.com Mon Jun 23 01:31:40 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 1A6DD7F3F for ; Mon, 23 Jun 2014 01:31:40 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 9AB548F8033 for ; Sun, 22 Jun 2014 23:31:36 -0700 (PDT) X-ASG-Debug-ID: 1403505090-04bdf056674faa50001-S8gJnT Received: from mx4-phx2.redhat.com (mx4-phx2.redhat.com [209.132.183.25]) by cuda.sgi.com with ESMTP id oCOnqkyvCeAHcLvp for ; Sun, 22 Jun 2014 23:31:30 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.25 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx4-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id s5N6VU5j011420 for ; Mon, 23 Jun 2014 02:31:30 -0400 Date: Mon, 23 Jun 2014 02:31:30 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: PCP Message-ID: <25800551.31292134.1403505090072.JavaMail.zimbra@redhat.com> In-Reply-To: <1828964541.31278424.1403503516163.JavaMail.zimbra@redhat.com> Subject: [RFC] A privileged pmcd co-process MIME-Version: 1.0 X-ASG-Orig-Subj: [RFC] A privileged pmcd co-process Content-Type: multipart/mixed; boundary="----=_Part_31292128_2087979633.1403505090068" X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: A privileged pmcd co-process Thread-Index: iZdR9gyNukyCTt60RQQPtkezhsiigQ== X-Barracuda-Connect: mx4-phx2.redhat.com[209.132.183.25] X-Barracuda-Start-Time: 1403505090 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6874 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... ------=_Part_31292128_2087979633.1403505090068 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Having recently looked into the requirements of supporting the Linux kernel container technologies, I propose here an extension to the way in which pmcd operates. This extension would also be a mechanism for tackling a couple of other pre-existing issues in pmcd too, so hopefully the fairly small bump in complexity worth the cost. Firstly, a bit of background. Linux container technologies like Docker, LXR Linux-VServer, lmctfy, OpenVZ and others make extensive use of two kernel features in particular - cgroups and namespaces. We have for some time had an initial implementation providing cgroup metrics, via the cgroup.* metric tree that the pmda_proc(1) agent exports. However, we currently do not have support for the concept of namespaces at all; this proposal aims to provide a mechanism whereby we could start to provide PMDAs with the ability to set the namespace(s) they use. The concept of namespaces is important to us, because we'd like to be able to peek through into the container to obtain performance information about that container. Important stuff, like the hostname being presented by the container to its processes (pmcd.hostname, kernel.uname.*), the filesystem mount namespaces (filesys.*), networking namespace (network.interface.*), IPC namespace (ipc.*), and the running processes namespace - these are all namespaces that can and will differ within the container. Ideally, we would not force the installation of PCP inside the containers, but instead provide mechanisms whereby client tools can obtain performance data about the environment within a container, from the containing host. Attached little programs are closely based on the examples of the clone(2) and setns(2) man pages, which are the two fundamental system calls that manipulate namespaces. The programs show the sort of things that must be performed in order for a process to change its reporting namespace(s)... [nathans@boing namespaces]$ sudo ./newuts bizarro & [1] 31609 [nathans@boing namespaces]$ clone() returned 31614 uts.nodename in child: bizarro uts.nodename in parent: boing Fundamentally, we need to have an open file descriptor from a procfs file (/proc/pid/ns/{ipc,mnt,net,pid,uts}) from a contained process, in order that a PCP collector can (temporarily) switch the reporting namespace it uses to that of the container, allowing clients to request values specific to a named container running on a PCP collector host. Thus we hit our first stumbling block. Since pmcd runs as an unprivileged process, we often will not be able to open these files in order to briefly assume the namespaces of the container, for metrics which would differ in the container. There exists a secondary, related issue in that many PMDAs will be running as unprivileged processes as well, and they may also wish to be able to effect a call to setns(2) for their metrics (IOW, beyond the scope of the pmcd(1) process, using pmda_linux.so for the above metrics). Naturally, it would be highly undesirable to require all PMDAs (and pmcd) to run as root once again in order to manipulate namespaces. The setns(2) man page documents a mechanism for tackling this problem that we could use, however. If the procfs file is opened by one (privileged) process the file descriptor can be passed across an AF_UNIX socket using SCM_RIGHTS, to be used by an unprivileged pmcd or process PMDA. To fit this into the PCP collector system of pmcd and PMDAs, I propose we fork(2) pmcd early during its startup, have one process continue as today (continuing on to make itself unprivileged) and have the other co-process continue to run as root. This co-process would not accept any network connections, and would have a tightly-defined, restricted interface to the primary pmcd. Its not clear if it'd be best if this co-process exec(2) a helper, or continue on with the pmcd code - I'm suspecting the latter may be simpler. The co-process would communicate with the primary pmcd by AF_UNIX socket only, and would be responsible for resolving container names and the associated namespace requests, to file descriptors. This same socket would be available to any PMDA to use - as mentioned above, these may have similar needs to the in- process DSO PMDAs. New APIs in libpcp_pmda could hide these differences, as well as the internal details of the socket communication, and would be able to return file descriptors for a requested namespace. >From the client tool and user perspective, the starting point would be the request to source metrics related to a named container. This name needs to be passed to pmcd (presumably once would suffice, per PMAPI context) - a connection attribute could provide an appropriate mechanism, e.g. pcp --host pcp://bigiron?container=www.acme.com pcp --host local://?container=buildserver I'll skip over the details of resolving a container name to an individual process running within that named container (which is needed in order for the co-process to be able to obtain the namespace file descriptors) as an implementation detail. The implementations I looked at have cgroups that represent the containers; processes can be found by marrying cgroup paths, container names, and the processes listed in the cgroup tasks files. More research needed there, to see if a general mechanism can be found for all container implementations (optimistically, so far I think so - there also appears to be a libcontainer effort underway that might help us out here). So, that's the meat of accessing metric values within containers from the outside (well, one approach anyway). I mentioned earlier other issues in pmcd(1) we could tackle using the kind of privileged co-process described here, in addition to container namespaces. 2. Restarting / Installing PMDAs We introduced a limitation when making pmcd unprivileged in that it could no longer start arbitrary PMDAs anymore, after it has dropped privileges. If a PMDA requires non-pcp user access, it requires a full pmcd(1) restart instead of the lighter SIGHUP mechanism previously available. A hack was added to the PMDA installation process (forced_restart) to workaround this but its far from ideal. This limitation could be lifted if the co-process was used to start out-of-process PMDAs, and pass the open file descriptors back to pmcd(1) over the AF_UNIX socket. 3. Authentication We have a problem using SASL with pmcd(1) in that it cannot do all forms of authentication (some popular forms require privilege to access /etc/shadow, for example - these cannot work out-of-the-box, and would require saslauthd to work, which we'd ideally not depend on). If the libsasl calls were made from the privileged co-process on accepting new connections, instead of the unprivileged pmcd, this issue could be resolved. These three desires would be used to define a co-process/pmcd/PMDA protocol - a request type, parameters (container name and namespace types, or sasl user, passwd, etc) would be sent one way; a series of integers would be sent back (open file descriptors for namespaces or new agents, user IDs and/or group IDs). That is probably a bit of a simplification, certainly for SASL it is - but roughly something equivalent to that should do the trick. Thanks for reading this far. :) Any thoughts or insights you might have would be much appreciated - please send 'em through! cheers. -- Nathan ------=_Part_31292128_2087979633.1403505090068 Content-Type: text/x-makefile; name=makefile Content-Disposition: attachment; filename=makefile Content-Transfer-Encoding: base64 ZGVmYXVsdDoKCWdjYyAtV2FsbCBuZXd1dHMuYyAtbyBuZXd1dHMKCWdjYyAtV2FsbCBuc19leGVj LmMgLW8gbnNfZXhlYwoK ------=_Part_31292128_2087979633.1403505090068 Content-Type: text/x-c++src; name=newuts.c Content-Disposition: attachment; filename=newuts.c Content-Transfer-Encoding: base64 I2RlZmluZSBfR05VX1NPVVJDRQojaW5jbHVkZSA8c3lzL3dhaXQuaD4KI2luY2x1ZGUgPHN5cy91 dHNuYW1lLmg+CiNpbmNsdWRlIDxzY2hlZC5oPgojaW5jbHVkZSA8c3RyaW5nLmg+CiNpbmNsdWRl IDxzdGRpby5oPgojaW5jbHVkZSA8c3RkbGliLmg+CiNpbmNsdWRlIDx1bmlzdGQuaD4KCiNkZWZp bmUgZXJyRXhpdChtc2cpICAgIGRvIHsgcGVycm9yKG1zZyk7IGV4aXQoRVhJVF9GQUlMVVJFKTsg XAogICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICgwKQoKc3RhdGljIGludCAgICAgICAg ICAgICAgLyogU3RhcnQgZnVuY3Rpb24gZm9yIGNsb25lZCBjaGlsZCAqLwpjaGlsZEZ1bmModm9p ZCAqYXJnKQp7CiAgICBzdHJ1Y3QgdXRzbmFtZSB1dHM7CgogICAgLyogQ2hhbmdlIGhvc3RuYW1l IGluIFVUUyBuYW1lc3BhY2Ugb2YgY2hpbGQgKi8KCiAgICBpZiAoc2V0aG9zdG5hbWUoYXJnLCBz dHJsZW4oYXJnKSkgPT0gLTEpCiAgICAgICAgZXJyRXhpdCgic2V0aG9zdG5hbWUiKTsKCiAgICAv KiBSZXRyaWV2ZSBhbmQgZGlzcGxheSBob3N0bmFtZSAqLwoKICAgIGlmICh1bmFtZSgmdXRzKSA9 PSAtMSkKICAgICAgICBlcnJFeGl0KCJ1bmFtZSIpOwogICAgcHJpbnRmKCJ1dHMubm9kZW5hbWUg aW4gY2hpbGQ6ICAlc1xuIiwgdXRzLm5vZGVuYW1lKTsKCiAgICAvKiBLZWVwIHRoZSBuYW1lc3Bh Y2Ugb3BlbiBmb3IgYSB3aGlsZSwgYnkgc2xlZXBpbmcuCiAgICAgICBUaGlzIGFsbG93cyBzb21l IGV4cGVyaW1lbnRhdGlvbi0tZm9yIGV4YW1wbGUsIGFub3RoZXIKICAgICAgIHByb2Nlc3MgbWln aHQgam9pbiB0aGUgbmFtZXNwYWNlLiAqLwoKICAgIHBhdXNlKCk7CgogICAgcmV0dXJuIDA7ICAg ICAgICAgICAvKiBDaGlsZCB0ZXJtaW5hdGVzIG5vdyAqLwp9CiNkZWZpbmUgU1RBQ0tfU0laRSAo MTAyNCAqIDEwMjQpICAgIC8qIFN0YWNrIHNpemUgZm9yIGNsb25lZCBjaGlsZCAqLwoKaW50Cm1h aW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKewogICAgY2hhciAqc3RhY2s7ICAgICAgICAgICAg ICAgICAgICAvKiBTdGFydCBvZiBzdGFjayBidWZmZXIgKi8KICAgIGNoYXIgKnN0YWNrVG9wOyAg ICAgICAgICAgICAgICAgLyogRW5kIG9mIHN0YWNrIGJ1ZmZlciAqLwogICAgcGlkX3QgcGlkOwog ICAgc3RydWN0IHV0c25hbWUgdXRzOwoKICAgIGlmIChhcmdjIDwgMikgewogICAgICAgIGZwcmlu dGYoc3RkZXJyLCAiVXNhZ2U6ICVzIDxjaGlsZC1ob3N0bmFtZT5cbiIsIGFyZ3ZbMF0pOwogICAg ICAgIGV4aXQoRVhJVF9TVUNDRVNTKTsKICAgIH0KCiAgICAvKiBBbGxvY2F0ZSBzdGFjayBmb3Ig Y2hpbGQgKi8KCiAgICBzdGFjayA9IG1hbGxvYyhTVEFDS19TSVpFKTsKICAgIGlmIChzdGFjayA9 PSBOVUxMKQogICAgICAgIGVyckV4aXQoIm1hbGxvYyIpOwogICAgc3RhY2tUb3AgPSBzdGFjayAr IFNUQUNLX1NJWkU7ICAvKiBBc3N1bWUgc3RhY2sgZ3Jvd3MgZG93bndhcmQgKi8KCiAgICAvKiBD cmVhdGUgY2hpbGQgdGhhdCBoYXMgaXRzIG93biBVVFMgbmFtZXNwYWNlOwogICAgICAgY2hpbGQg Y29tbWVuY2VzIGV4ZWN1dGlvbiBpbiBjaGlsZEZ1bmMoKSAqLwoKICAgIHBpZCA9IGNsb25lKGNo aWxkRnVuYywgc3RhY2tUb3AsIENMT05FX05FV1VUUyB8IFNJR0NITEQsIGFyZ3ZbMV0pOwogICAg aWYgKHBpZCA9PSAtMSkKICAgICAgICBlcnJFeGl0KCJjbG9uZSIpOwogICAgcHJpbnRmKCJjbG9u ZSgpIHJldHVybmVkICVsZFxuIiwgKGxvbmcpIHBpZCk7CgogICAgLyogUGFyZW50IGZhbGxzIHRo cm91Z2ggdG8gaGVyZSAqLwoKICAgIHNsZWVwKDEpOyAgICAgICAgICAgLyogR2l2ZSBjaGlsZCB0 aW1lIHRvIGNoYW5nZSBpdHMgaG9zdG5hbWUgKi8KICAgIC8qIERpc3BsYXkgaG9zdG5hbWUgaW4g cGFyZW50J3MgVVRTIG5hbWVzcGFjZS4gVGhpcyB3aWxsIGJlCiAgICAgICBkaWZmZXJlbnQgZnJv bSBob3N0bmFtZSBpbiBjaGlsZCdzIFVUUyBuYW1lc3BhY2UuICovCgogICAgaWYgKHVuYW1lKCZ1 dHMpID09IC0xKQogICAgICAgIGVyckV4aXQoInVuYW1lIik7CiAgICBwcmludGYoInV0cy5ub2Rl bmFtZSBpbiBwYXJlbnQ6ICVzXG4iLCB1dHMubm9kZW5hbWUpOwoKICAgIGlmICh3YWl0cGlkKHBp ZCwgTlVMTCwgMCkgPT0gLTEpICAgIC8qIFdhaXQgZm9yIGNoaWxkICovCiAgICAgICAgZXJyRXhp dCgid2FpdHBpZCIpOwogICAgcHJpbnRmKCJjaGlsZCBoYXMgdGVybWluYXRlZFxuIik7CgogICAg ZXhpdChFWElUX1NVQ0NFU1MpOwp9Cg== ------=_Part_31292128_2087979633.1403505090068 Content-Type: text/x-c++src; name=ns_exec.c Content-Disposition: attachment; filename=ns_exec.c Content-Transfer-Encoding: base64 I2RlZmluZSBfR05VX1NPVVJDRQojaW5jbHVkZSA8ZmNudGwuaD4KI2luY2x1ZGUgPHNjaGVkLmg+ CiNpbmNsdWRlIDx1bmlzdGQuaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8c3RkaW8u aD4KCiNkZWZpbmUgZXJyRXhpdChtc2cpICAgIGRvIHsgcGVycm9yKG1zZyk7IGV4aXQoRVhJVF9G QUlMVVJFKTsgXAogICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICgwKQoKaW50Cm1haW4o aW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKewogICAgaW50IGZkOwoKICAgIGlmIChhcmdjIDwgMykg ewogICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXMgL3Byb2MvUElEL25zL0ZJTEUgY21kIGFyZ3Mu Li5cbiIsIGFyZ3ZbMF0pOwogICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKICAgIH0KCiAgICBm ZCA9IG9wZW4oYXJndlsxXSwgT19SRE9OTFkpOyAgIC8qIEdldCBkZXNjcmlwdG9yIGZvciBuYW1l c3BhY2UgKi8KICAgIGlmIChmZCA9PSAtMSkKICAgICAgICBlcnJFeGl0KCJvcGVuIik7CgogICAg aWYgKHNldG5zKGZkLCAwKSA9PSAtMSkgICAgICAgICAvKiBKb2luIHRoYXQgbmFtZXNwYWNlICov CiAgICAgICAgZXJyRXhpdCgic2V0bnMiKTsKCiAgICBleGVjdnAoYXJndlsyXSwgJmFyZ3ZbMl0p OyAgICAgIC8qIEV4ZWN1dGUgYSBjb21tYW5kIGluIG5hbWVzcGFjZSAqLwogICAgZXJyRXhpdCgi ZXhlY3ZwIik7Cn0KCg== ------=_Part_31292128_2087979633.1403505090068-- From fche@redhat.com Mon Jun 23 09:12:41 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 4E0957F3F for ; Mon, 23 Jun 2014 09:12:41 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id E00ACAC007 for ; Mon, 23 Jun 2014 07:12:37 -0700 (PDT) X-ASG-Debug-ID: 1403532753-04bdf05668524cb0001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id FQ0v7PdKK4aVdXyB (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Mon, 23 Jun 2014 07:12:33 -0700 (PDT) X-Barracuda-Envelope-From: fche@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s5NECHtW030153 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 23 Jun 2014 10:12:17 -0400 Received: from fche.csb (vpn-56-123.rdu2.redhat.com [10.10.56.123]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5NECGKI029610; Mon, 23 Jun 2014 10:12:17 -0400 Received: by fche.csb (Postfix, from userid 2569) id 241FC581C7; Mon, 23 Jun 2014 10:12:16 -0400 (EDT) Date: Mon, 23 Jun 2014 10:12:16 -0400 From: "Frank Ch. Eigler" To: Nathan Scott Cc: Ken McDonell , pcp@oss.sgi.com Subject: Re: [pcp] PCP Network Latency PMDA Message-ID: <20140623141216.GK8337@redhat.com> X-ASG-Orig-Subj: Re: [pcp] PCP Network Latency PMDA References: <53A34A47.3060008@redhat.com> <53A352FF.9090906@internode.on.net> <1241706054.31171165.1403487302812.JavaMail.zimbra@redhat.com> <20140623014102.GI8337@redhat.com> <1830537766.31176499.1403488150780.JavaMail.zimbra@redhat.com> <20140623015408.GJ8337@redhat.com> <223453324.31184588.1403489511833.JavaMail.zimbra@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <223453324.31184588.1403489511833.JavaMail.zimbra@redhat.com> User-Agent: Mutt/1.4.2.2i X-Scanned-By: MIMEDefang 2.68 on 10.5.11.22 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1403532753 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Hi - > > I don't think anyone was suggesting an all-or-none sort of collection > > behavior. I only said on-demand, referring to the metrics actually > > requested by a client (suffering PM_ERR_VALUE or PM_ERR_AGAIN or > > PM_ERR_PMDANOTREADY or whatever for that first pmFetch). > > Its common for someone to run something like "pminfo -f network" to get > a high level look, then browse through the result, maybe iterating on > further with pminfo to something more specific, or switching to pmchart > or another tool for a different view. I think it's reasonable for such one-shot clients to suffer from the indignity of a PM_ERR_PMDANOTREADY for such metrics. (That's not too surprising, considering that the semantics would probably be COUNTER, which are meaningless in isolation.) - FChE From fche@redhat.com Mon Jun 23 10:37:56 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 8739E7F3F for ; Mon, 23 Jun 2014 10:37:56 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id E915BAC001 for ; Mon, 23 Jun 2014 08:37:52 -0700 (PDT) X-ASG-Debug-ID: 1403537867-04cbb00a0239aa90001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id EPAkXrww3FBEENSa (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Mon, 23 Jun 2014 08:37:48 -0700 (PDT) X-Barracuda-Envelope-From: fche@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s5NFbkMF026706 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Mon, 23 Jun 2014 11:37:47 -0400 Received: from fche.csb (vpn-56-123.rdu2.redhat.com [10.10.56.123]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5NFbkpq029479; Mon, 23 Jun 2014 11:37:46 -0400 Received: by fche.csb (Postfix, from userid 2569) id 9AA73581C7; Mon, 23 Jun 2014 11:37:45 -0400 (EDT) Date: Mon, 23 Jun 2014 11:37:45 -0400 From: "Frank Ch. Eigler" To: Nathan Scott Cc: pcp@oss.sgi.com, William Cohen Subject: Re: [RFC] Command pipe PMDA Message-ID: <20140623153745.GL8337@redhat.com> X-ASG-Orig-Subj: Re: [RFC] Command pipe PMDA References: <1582052329.18672839.1401703216956.JavaMail.zimbra@redhat.com> <740708456.18675715.1401703776506.JavaMail.zimbra@redhat.com> <1795109201.31180783.1403488764848.JavaMail.zimbra@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1795109201.31180783.1403488764848.JavaMail.zimbra@redhat.com> User-Agent: Mutt/1.4.2.2i X-Scanned-By: MIMEDefang 2.68 on 10.5.11.22 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1403537868 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Hi - > [...] > > > [...] We could tackle this problem with a new pmdapipe(1) agent in > > > PCP > > > > (Just toolshedding, but I'd suggest "pmdaexec" or similar instead of > > "pipe", which reflects an internal implementation artifact.) > > Heh - "exec" seems far more the implementation detail (& only a small > part of the picture) - the "pipe" here is more of the shell pipe (|) > rather than the popen(3) vs exec(3) detail, reflecting that output > from one command feeds back to another separate command. [...] FWIW, I don't see the piping-into-separate-command angle here. The configured command is EXECuted, and its output is collected, whether by pipe, named-pipe, pty, socket. It's not sent to another program for processing on its standard input. (pmevent's output is very noisy to be used for piping, and it is just ONE client, so it doesn't deserve to name the pmda.) > > Consider also system overview type commands, which could be quite > > informative if logged periodically, along with some crazier ideas: > > > > "kill $1" > > "service $1 $2" > Er, yep, thats pretty out there. Under what situations would it be > desirable for a sysadmin to enable that level of crazy? Surely this > is the realm of sudo, and noone would want to expose that kind of > thing onto the network via PCP...? Note that you introduced the notion of a deliberate privilege escalation here (letting remote pcp clients invoke normally root-only commands); I'm just showing some logical endpoints of that. > > "ps -ef" > > "smartctl -a $1" > > "dmidecode" > > [...] > > Many of these things seem more suited to that old pmdapaste concept > too [...] pmdapaste is indeed interesting, but it is not a way of *executing a command on the pmcd server side*. You'd need remote execution widget or a cron job, have it run the client side of pmdapaste. Whereas with this scheme (adding ps -ef etc. as remote-execution commands for pmdapipe), a remote client can log these on demand. - FChE From fche@redhat.com Mon Jun 23 11:32:21 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 3C1887F3F for ; Mon, 23 Jun 2014 11:32:21 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id BC482AC004 for ; Mon, 23 Jun 2014 09:32:17 -0700 (PDT) X-ASG-Debug-ID: 1403541131-04bdf05669536ed0001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id 1iDWIhAHvhJ7isRe (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Mon, 23 Jun 2014 09:32:11 -0700 (PDT) X-Barracuda-Envelope-From: fche@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s5NFvLr8018710 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Mon, 23 Jun 2014 11:57:21 -0400 Received: from fche.csb (vpn-56-123.rdu2.redhat.com [10.10.56.123]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5NFvKEf016096; Mon, 23 Jun 2014 11:57:20 -0400 Received: by fche.csb (Postfix, from userid 2569) id D69A3581C7; Mon, 23 Jun 2014 11:57:19 -0400 (EDT) To: Nathan Scott Cc: pcp@oss.sgi.com Subject: Re: PCP Network Latency PMDA References: <53A34A47.3060008@redhat.com> <53A352FF.9090906@internode.on.net> <1241706054.31171165.1403487302812.JavaMail.zimbra@redhat.com> <20140623014102.GI8337@redhat.com> <1830537766.31176499.1403488150780.JavaMail.zimbra@redhat.com> <20140623015408.GJ8337@redhat.com> <223453324.31184588.1403489511833.JavaMail.zimbra@redhat.com> <20140623141216.GK8337@redhat.com> X-ASG-Orig-Subj: Re: PCP Network Latency PMDA From: fche@redhat.com (Frank Ch. Eigler) Date: Mon, 23 Jun 2014 11:57:19 -0400 In-Reply-To: <20140623141216.GK8337@redhat.com> (Frank Ch. Eigler's message of "Mon, 23 Jun 2014 10:12:16 -0400") Message-ID: User-Agent: Gnus/5.1008 (Gnus v5.10.8) Emacs/21.4 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1403541131 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 >> Its common for someone to run something like "pminfo -f network" to get >> a high level look, then browse through the result, maybe iterating on >> further with pminfo to something more specific, or switching to pmchart >> or another tool for a different view. > > I think it's reasonable for such one-shot clients to suffer from the > indignity of a PM_ERR_PMDANOTREADY for such metrics. (That's not too > surprising, considering that the semantics would probably be COUNTER, > which are meaningless in isolation.) By the way, it would not be a big stretch for the PMDA retain collection of these statistics for some time after a PCP client closes, in case of a reconnection soon by an equivalent context. This way, even % pminfo -f papi.system.FOOBAR -ERR_NOTREADY % pminfo -f papi.system.FOOBAR 12345 % pminfo -f papi.system.FOOBAR 23456 would work. - FChE From fche@redhat.com Mon Jun 23 12:20:33 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id EC0D37F3F for ; Mon, 23 Jun 2014 12:20:32 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 77D18AC001 for ; Mon, 23 Jun 2014 10:20:29 -0700 (PDT) X-ASG-Debug-ID: 1403544028-04bdf0566853eec0001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id xi56NeAZ1LAUonxe (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Mon, 23 Jun 2014 10:20:28 -0700 (PDT) X-Barracuda-Envelope-From: fche@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s5NHKR4l011415 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Mon, 23 Jun 2014 13:20:28 -0400 Received: from fche.csb (vpn-56-123.rdu2.redhat.com [10.10.56.123]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5NHKRVx015739; Mon, 23 Jun 2014 13:20:27 -0400 Received: by fche.csb (Postfix, from userid 2569) id 0C30E581C7; Mon, 23 Jun 2014 13:20:26 -0400 (EDT) To: Nathan Scott Cc: PCP Subject: Re: [RFC] A privileged pmcd co-process References: <1828964541.31278424.1403503516163.JavaMail.zimbra@redhat.com> <25800551.31292134.1403505090072.JavaMail.zimbra@redhat.com> X-ASG-Orig-Subj: Re: [RFC] A privileged pmcd co-process From: fche@redhat.com (Frank Ch. Eigler) Date: Mon, 23 Jun 2014 13:20:26 -0400 In-Reply-To: <25800551.31292134.1403505090072.JavaMail.zimbra@redhat.com> (Nathan Scott's message of "Mon, 23 Jun 2014 02:31:30 -0400 (EDT)") Message-ID: User-Agent: Gnus/5.1008 (Gnus v5.10.8) Emacs/21.4 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Scanned-By: MIMEDefang 2.68 on 10.5.11.27 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1403544028 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Hi - > Having recently looked into the requirements of supporting the Linux > kernel container technologies, I propose here an extension to the > way in which pmcd operates. [...] Looks good. It sounds like a meta-pmcd kind of like inetd, launching pmcds on demand, nailing some of them into containers if desired. It could even defer the startup of the primary pmcd/pmdas until a client arrives. It does not preclude people installing vanilla PMCD's into containers. Do you see the meta-pmcd functioning as a communication relay for the inferior pmcds (since a host-side client cannot in general talk to / address the networks of the containers). Or perhaps passing a per-client file descriptor to the appropriate sub-pmcd (in which case, take care of NSS / sockname / etc. issues). In any case the meta-sub-pmcd protocol would be a bit tricky. The meta-pmcd's authentication credentials need bear no resemblance to the credentials valid within a random container. So if the meta-pmcd uses the credentials, it should not pass them to sub-pmcds (esp. in plaintext). Thus, authenticated per-container access would not be possible without more extensions. Or maybe leave this problem up to a dedicated setuid pmcd-authenticator widget? Use of the meta-pmcd to restart PMDAs on demand could be helpful, if one can work out the details of scoping (are PMDAs of containerized sub-pmcds included?) and implementation (creation & passing of the pmcd<->pmda pipes, notification of pmcd, killing an orphaned pmda, etc.). Or maybe leave this problem up to a new dedicated setuid pmda-restarter widget? - FChE From myllynen@redhat.com Mon Jun 23 12:55:24 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 57FD27F3F for ; Mon, 23 Jun 2014 12:55:24 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 2233F304032 for ; Mon, 23 Jun 2014 10:55:20 -0700 (PDT) X-ASG-Debug-ID: 1403546118-04bdf056675411e0001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id Q1wUfcZGABd96Eh1 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Mon, 23 Jun 2014 10:55:19 -0700 (PDT) X-Barracuda-Envelope-From: myllynen@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s5NHtFu5027729 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Mon, 23 Jun 2014 13:55:17 -0400 Received: from mmyllyne.csb (vpn1-7-33.ams2.redhat.com [10.36.7.33]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5NHtCul025911; Mon, 23 Jun 2014 13:55:12 -0400 Message-ID: <53A869FF.8080703@redhat.com> Date: Mon, 23 Jun 2014 20:55:11 +0300 From: Marko Myllynen Reply-To: myllynen@redhat.com Organization: Red Hat User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.4.0 MIME-Version: 1.0 To: "Frank Ch. Eigler" CC: pcp@oss.sgi.com Subject: Re: pcp+graphite, take 2 References: <20140616214301.GB6693@redhat.com> <53A181C4.5050402@redhat.com> X-ASG-Orig-Subj: Re: pcp+graphite, take 2 In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.24 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1403546119 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Hi, On 2014-06-18 15:57, Frank Ch. Eigler wrote: > >> [...] >> - PCP+Graphite worked ok but there was a usability issue: if you want to >> graph a period which is scattered in several archives then clicking >> through all of them (especially if adding several metrics) quickly get >> tedious. I'm not very familiar with Graphite so I don't know whether >> there would be a way to avoid this there. > > Before all that, we can take advantage of the graphite wildcarding > facilities. Metric names can contain *, which refers to the union of > matching metrics. So e.g. in graphlot or the graphite browser > subwindow ("Graph Data") where you edit metric names, type > > *SUBSTRING*.FOO.BAR > > to get all the archives containing SUBSTRING rendered together. > Natural candidates for SUBSTRING would include partial host names > or timestamp MMDD substrings. ah, this was helpful, thanks. > Another possible change would be to have a less impressive > default.json dashboard in other ways, maybe cutting down from two > graphs to one, or restricting it to a smaller timeframe, or something > like that. Btw, the blinkenlights demo updates the URL dynamically based on the rules created, the result is then easy the share with others. Did you try to share Grafana dashboards with others by providing a URL? The "Share temp copy" didn't quite work for me and a JSON file from "Export dashboard" is not very practical. Thanks, -- Marko Myllynen From fche@redhat.com Mon Jun 23 13:15:07 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 8D6AA7F3F for ; Mon, 23 Jun 2014 13:15:07 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 77564304059 for ; Mon, 23 Jun 2014 11:15:04 -0700 (PDT) X-ASG-Debug-ID: 1403547299-04cbb06536046d0001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id wBm3Vuoji2FWlSa3 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Mon, 23 Jun 2014 11:15:00 -0700 (PDT) X-Barracuda-Envelope-From: fche@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s5NIEpIi000644 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Mon, 23 Jun 2014 14:14:58 -0400 Received: from fche.csb (vpn-56-123.rdu2.redhat.com [10.10.56.123]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5NI4cxK029079; Mon, 23 Jun 2014 14:04:38 -0400 Received: by fche.csb (Postfix, from userid 2569) id AA485581C7; Mon, 23 Jun 2014 14:04:36 -0400 (EDT) Date: Mon, 23 Jun 2014 14:04:36 -0400 From: "Frank Ch. Eigler" To: Marko Myllynen Cc: pcp@oss.sgi.com Subject: Re: pcp+graphite, take 2 Message-ID: <20140623180436.GM8337@redhat.com> X-ASG-Orig-Subj: Re: pcp+graphite, take 2 References: <20140616214301.GB6693@redhat.com> <53A181C4.5050402@redhat.com> <53A869FF.8080703@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <53A869FF.8080703@redhat.com> User-Agent: Mutt/1.4.2.2i X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1403547300 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Hi, Marko - > [...] > > Another possible change would be to have a less impressive > > default.json dashboard in other ways, maybe cutting down from two > > graphs to one, or restricting it to a smaller timeframe, or something > > like that. > [...] Did you try to share Grafana dashboards with others by > providing a URL? The "Share temp copy" didn't quite work for me and (Will look into it; might need to remove the related web buttons. Grafana & graphite appear covetous of fileservers like elasticsearch to store such stuff.) > a JSON file from "Export dashboard" is not very practical. One possibility is to do an export-dashboard, and plop the resulting .json file under the jsdemos/grafana/app/dashboards directory. That enables a custom URL with no action from the reader: see how the current jsdemos/index.html file selects between .../default.json and .../default-png.json. - FChE From kenj@internode.on.net Mon Jun 23 17:31:06 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 075F57F3F for ; Mon, 23 Jun 2014 17:31:06 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 82AF1AC004 for ; Mon, 23 Jun 2014 15:31:02 -0700 (PDT) X-ASG-Debug-ID: 1403562659-04cb6c76d01eef00001-S8gJnT Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id XGY5qtBNx87h0B5z for ; Mon, 23 Jun 2014 15:31:00 -0700 (PDT) X-Barracuda-Envelope-From: kenj@internode.on.net X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AuMSADSqqFN20YDzPGdsb2JhbAANTYtdvGABgSUEAQEBATiEOQEBBCcRQBEsFg8JAwIBAgExFBMIAQGsTp50F44lXhaELQEDsgOBXQ Received: from ppp118-209-128-243.lns20.mel6.internode.on.net (HELO [192.168.1.100]) ([118.209.128.243]) by ipmail06.adl2.internode.on.net with ESMTP; 24 Jun 2014 08:00:40 +0930 Message-ID: <53A8AB4E.9090003@internode.on.net> Date: Tue, 24 Jun 2014 08:33:50 +1000 From: Ken McDonell User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.6.0 MIME-Version: 1.0 To: pcp@oss.sgi.com Subject: RFC - pmie "ruleset" extension References: <53A8AA17.5070205@internode.on.net> X-ASG-Orig-Subj: RFC - pmie "ruleset" extension In-Reply-To: <53A8AA17.5070205@internode.on.net> X-Forwarded-Message-Id: <53A8AA17.5070205@internode.on.net> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1403562659 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6894 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- There is a usability issue with pmie's grammar, that becomes particularly obvious when you try to connect pmie to an active alerting system like nagios. In this use case, pmie needs to be able to (a) emit a message to indicate an alert, else (b) emit "OK" (or the moral equivalent) Not emitting "OK" is not an option as the alerting subsystem consuming the messages takes this to mean pmie has died (as opposed to the pmie world view that silence is golden). Historically this has been implemented with crafty_boolean_expression -> print "alarm"; not (crafty_boolean_expression) -> print "OK"; which is clumsy and error prone. It gets even messier for more than 2 states of output, e.g. "panic", "alarm", "warning", "ok". I've tried to see if I could twist the grammar to allow a disjunction of rules, but we're already at the limit of LALR(1) grammars, and I just don't have the strength or the skill to refactor the grammar to correctly handle the ambiguities that a disjunction of rules introduces. So instead I am proposed the coward's approach, namely a new keyword to introduce a disjunction of rules and a new keyword to separate rules, e.g. ruleset rule1 else rule2 ... ; So the first example above becomes ruleset crafty_boolean_expression -> print "alarm" else true -> print "ok"; For extra credit, the last alternative may be written as else rather than else when the associated is "true" as above. And the multistate example becomes ruleset extreme_predicate -> print "panic" else bad_predicate -> print "alarm" else unusual_predicate -> print "warning" else print "OK"; I've done enough of the implementation to know this will work for the parser and the execution engine without major disruption. Of course "ruleset ... else ... ;" could be replaced by "if ... elif ... elif ... else ...;" or any equivalent cosmetic change to the suggested syntax. Warm up the flame throwers ... From nscott@redhat.com Mon Jun 23 17:50:46 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 9CF507F3F for ; Mon, 23 Jun 2014 17:50:46 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 23118AC002 for ; Mon, 23 Jun 2014 15:50:45 -0700 (PDT) X-ASG-Debug-ID: 1403563843-04cb6c76cf1ef780001-S8gJnT Received: from mx6-phx2.redhat.com (mx6-phx2.redhat.com [209.132.183.39]) by cuda.sgi.com with ESMTP id cEBgkcDQCFHHSvz5 for ; Mon, 23 Jun 2014 15:50:43 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.39 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx6-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5NModnA023641; Mon, 23 Jun 2014 18:50:39 -0400 Date: Mon, 23 Jun 2014 18:50:39 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: Ken McDonell Cc: PCP Message-ID: <405933196.32075123.1403563839496.JavaMail.zimbra@redhat.com> In-Reply-To: <1336774609.32074769.1403563699677.JavaMail.zimbra@redhat.com> Subject: QA test 828 has started failing MIME-Version: 1.0 X-ASG-Orig-Subj: QA test 828 has started failing Content-Type: multipart/mixed; boundary="----=_Part_32075121_189698024.1403563839494" X-Originating-IP: [10.5.82.12] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: QA test 828 has started failing Thread-Index: K5xQ7bep02T4uabToQw/iZvGLjdVIQ== X-Barracuda-Connect: mx6-phx2.redhat.com[209.132.183.39] X-Barracuda-Start-Time: 1403563843 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 2.27 X-Barracuda-Spam-Status: No, SCORE=2.27 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_RULE_7580D, BSF_RULE_7580F, BSF_RULE_7580G, THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6895 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 0.75 BSF_RULE_7580G Custom Rule 7580G 0.75 BSF_RULE_7580F Custom Rule 7580F 0.75 BSF_RULE_7580D Custom Rule 7580D ------=_Part_32075121_189698024.1403563839494 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Hi Ken, I'm seeing 828 failing atm - looks like an unrecognised valgrind option is the cause? (see attached .bad file) This is on RHEL6. $ valgrind --version valgrind-3.6.0 $ valgrind --help usage: valgrind [options] prog-and-args tool-selection option, with default in [ ]: --tool= use the Valgrind tool named [memcheck] basic user options for all Valgrind tools, with defaults in [ ]: -h --help show this message --help-debug show this message, plus debugging options --version show version -q --quiet run silently; only print error msgs -v --verbose be more verbose -- show misc extra info --trace-children=no|yes Valgrind-ise child processes (follow execve)? [no] --trace-children-skip=patt1,patt2,... specifies a list of executables that --trace-children=yes should not trace into --child-silent-after-fork=no|yes omit child output between fork & exec? [no] --track-fds=no|yes track open file descriptors? [no] --time-stamp=no|yes add timestamps to log messages? [no] --log-fd= log messages to file descriptor [2=stderr] --log-file= log messages to --log-socket=ipaddr:port log messages to socket ipaddr:port user options for Valgrind tools that report errors: --xml=yes emit error output in XML (some tools only) --xml-fd= XML output to file descriptor --xml-file= XML output to --xml-socket=ipaddr:port XML output to socket ipaddr:port --xml-user-comment=STR copy STR verbatim into XML output --demangle=no|yes automatically demangle C++ names? [yes] --num-callers= show callers in stack traces [12] --error-limit=no|yes stop showing new errors if too many? [yes] --error-exitcode= exit code to return if errors found [0=disable] --show-below-main=no|yes continue stack traces below main() [no] --suppressions= suppress errors described in --gen-suppressions=no|yes|all print suppressions for errors? [no] --db-attach=no|yes start debugger when errors detected? [no] --db-command= command to start debugger [/usr/bin/gdb -nw %f %p] --input-fd= file descriptor for input [0=stdin] --dsymutil=no|yes run dsymutil on Mac OS X when helpful? [no] --max-stackframe= assume stack switch for SP changes larger than bytes [2000000] --main-stacksize= set size of main thread's stack (in bytes) [use current 'ulimit' value] user options for Valgrind tools that replace malloc: --alignment= set minimum alignment of heap allocations [16] uncommon user options for all Valgrind tools: --fullpath-after= (with nothing after the '=') show full source paths in call stacks --fullpath-after=string like --fullpath-after=, but only show the part of the path after 'string'. Allows removal of path prefixes. Use this flag multiple times to specify a set of prefixes to remove. --smc-check=none|stack|all checks for self-modifying code: none, only for code found in stacks, or all [stack] --read-var-info=yes|no read debug info on stack and global variables and use it to print better error messages in tools that make use of it (Memcheck, Helgrind, DRD) [no] --run-libc-freeres=no|yes free up glibc memory at exit on Linux? [yes] --sim-hints=hint1,hint2,... known hints: lax-ioctls, enable-outer [none] --kernel-variant=variant1,variant2,... known variants: bproc [none] handle non-standard kernel variants --show-emwarns=no|yes show warnings about emulation limits? [no] --require-text-symbol=:sonamepattern:symbolpattern abort run if the stated shared object doesn't have the stated text symbol. Patterns can contain ? and *. user options for Memcheck: --leak-check=no|summary|full search for memory leaks at exit? [summary] --leak-resolution=low|med|high differentiation of leak stack traces [high] --show-reachable=no|yes show reachable blocks in leak check? [no] --show-possibly-lost=no|yes show possibly lost blocks in leak check? [yes] --undef-value-errors=no|yes check for undefined value errors [yes] --track-origins=no|yes show origins of undefined values? [no] --partial-loads-ok=no|yes too hard to explain here; see manual [no] --freelist-vol= volume of freed blocks queue [20000000] --workaround-gcc296-bugs=no|yes self explanatory [no] --ignore-ranges=0xPP-0xQQ[,0xRR-0xSS] assume given addresses are OK --malloc-fill= fill malloc'd areas with given value --free-fill= fill free'd areas with given value Extra options read from ~/.valgrindrc, $VALGRIND_OPTS, ./.valgrindrc Memcheck is Copyright (C) 2002-2010, and GNU GPL'd, by Julian Seward et al. Valgrind is Copyright (C) 2000-2010, and GNU GPL'd, by Julian Seward et al. LibVEX is Copyright (C) 2004-2010, and GNU GPL'd, by OpenWorks LLP et al. Bug reports, feedback, admiration, abuse, etc, to: www.valgrind.org. cheers. -- Nathan ------=_Part_32075121_189698024.1403563839494 Content-Type: application/octet-stream; name=828.out.bad Content-Disposition: attachment; filename=828.out.bad Content-Transfer-Encoding: base64 UUEgb3V0cHV0IGNyZWF0ZWQgYnkgODI4Cj09PSBwbU5ld0NvbnRleHQgPT09Cj09PSBzdGQgb3V0 ID09PQo9PT0gc3RkIGVyciA9PT0KdmFsZ3JpbmQ6IEJhZCBvcHRpb246IC0tc2hvdy1sZWFrLWtp bmRzPWFsbAp2YWxncmluZDogVXNlIC0taGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvciBjb25z dWx0IHRoZSB1c2VyIG1hbnVhbC4KY2F0OiAvdG1wLzgyOC0yOTQwOC52YWxncmluZDogTm8gc3Vj aCBmaWxlIG9yIGRpcmVjdG9yeQo9PT0gZmlsdGVyZWQgdmFsZ3JpbmQgcmVwb3J0ID09PQo4Mjg6 IGxpbmUgMjIyOiAvdG1wLzgyOC0yOTQwOC52YWxncmluZDogTm8gc3VjaCBmaWxlIG9yIGRpcmVj dG9yeQoKPT09IHBtRHVwQ29udGV4dCA9PT0KPT09IHN0ZCBvdXQgPT09Cj09PSBzdGQgZXJyID09 PQp2YWxncmluZDogQmFkIG9wdGlvbjogLS1zaG93LWxlYWsta2luZHM9YWxsCnZhbGdyaW5kOiBV c2UgLS1oZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uIG9yIGNvbnN1bHQgdGhlIHVzZXIgbWFudWFs LgpjYXQ6IC90bXAvODI4LTI5NDA4LnZhbGdyaW5kOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5 Cj09PSBmaWx0ZXJlZCB2YWxncmluZCByZXBvcnQgPT09CjgyODogbGluZSAyMjI6IC90bXAvODI4 LTI5NDA4LnZhbGdyaW5kOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5Cg== ------=_Part_32075121_189698024.1403563839494-- From nscott@redhat.com Mon Jun 23 18:44:30 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 5A4FB7F3F for ; Mon, 23 Jun 2014 18:44:30 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 3D0E48F8040 for ; Mon, 23 Jun 2014 16:44:26 -0700 (PDT) X-ASG-Debug-ID: 1403567064-04cb6c76d01f0d60001-S8gJnT Received: from mx4-phx2.redhat.com (mx4-phx2.redhat.com [209.132.183.25]) by cuda.sgi.com with ESMTP id 5IT3ApsuvGKwhW94 for ; Mon, 23 Jun 2014 16:44:25 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.25 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx4-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id s5NNiLcB004226; Mon, 23 Jun 2014 19:44:21 -0400 Date: Mon, 23 Jun 2014 19:44:21 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: Ken McDonell Cc: pcp@oss.sgi.com Message-ID: <1236963897.32105713.1403567061347.JavaMail.zimbra@redhat.com> In-Reply-To: <53A8AB4E.9090003@internode.on.net> References: <53A8AA17.5070205@internode.on.net> <53A8AB4E.9090003@internode.on.net> Subject: Re: [pcp] RFC - pmie "ruleset" extension MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [pcp] RFC - pmie "ruleset" extension Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.12] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: RFC - pmie "ruleset" extension Thread-Index: yt6kWTYCkbdDUETv/HXObHlG2wwIKA== X-Barracuda-Connect: mx4-phx2.redhat.com[209.132.183.25] X-Barracuda-Start-Time: 1403567065 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6896 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Hi Ken, ----- Original Message ----- > [...] > And the multistate example becomes > > ruleset > extreme_predicate -> print "panic" > else bad_predicate -> print "alarm" > else unusual_predicate -> print "warning" > else print "OK"; > > I've done enough of the implementation to know this will work for the > parser and the execution engine without major disruption. > Oh, I'm a big fan of this approach - I remember us chatting about it back when Aconex first encountered this problem (back when I proposed to do it in one day for a hackathon - rightly becoming the subject of much mirth!). One issue was the way there isn't just true or false, there's also "maybe" (first sample for a counter, or host is down) - what would be the approach there? Would it just fall through into that final else catch-all branch? Heh, that would be the one that says "OK" above? ;) Might need some other syntax for that case? > Of course "ruleset ... else ... ;" could be replaced by "if ... elif ... > elif ... else ...;" or any equivalent cosmetic change to the suggested > syntax. (personally I don't have a strong preference either way) > Warm up the flame throwers ... Not at all, as far as I'm concerned - if you think this is doable, I'd love to see it happen. I know of some production environments where it would be immediately put to use. cheers. -- Nathan From fche@redhat.com Mon Jun 23 19:22:17 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 42D677F3F for ; Mon, 23 Jun 2014 19:22:17 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id BEC7BAC001 for ; Mon, 23 Jun 2014 17:22:13 -0700 (PDT) X-ASG-Debug-ID: 1403569331-04cb6c76d21f20f0001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id HqiC8ruOUnGzbxET (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Mon, 23 Jun 2014 17:22:12 -0700 (PDT) X-Barracuda-Envelope-From: fche@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s5O0M9DJ021019 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 23 Jun 2014 20:22:09 -0400 Received: from fche.csb (vpn-56-123.rdu2.redhat.com [10.10.56.123]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5O0M9xK025833; Mon, 23 Jun 2014 20:22:09 -0400 Received: by fche.csb (Postfix, from userid 2569) id 787C6581C7; Mon, 23 Jun 2014 20:22:08 -0400 (EDT) To: Ken McDonell Cc: pcp@oss.sgi.com Subject: Re: RFC - pmie "ruleset" extension References: <53A8AA17.5070205@internode.on.net> <53A8AB4E.9090003@internode.on.net> X-ASG-Orig-Subj: Re: RFC - pmie "ruleset" extension From: fche@redhat.com (Frank Ch. Eigler) Date: Mon, 23 Jun 2014 20:22:08 -0400 In-Reply-To: <53A8AB4E.9090003@internode.on.net> (Ken McDonell's message of "Tue, 24 Jun 2014 08:33:50 +1000") Message-ID: User-Agent: Gnus/5.1008 (Gnus v5.10.8) Emacs/21.4 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Scanned-By: MIMEDefang 2.68 on 10.5.11.24 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1403569332 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 kenj wrote: > [...] > In this use case, pmie needs to be able to > > (a) emit a message to indicate an alert, else > (b) emit "OK" (or the moral equivalent) > [...] Is the idea to have pmie normally report OK every polling interval (10 seconds or whatever?)? Can you say more about the interconnection of pmie and nagios? - FChE From keith.owens@messagemedia.com.au Mon Jun 23 20:16:57 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id A73F57F4E for ; Mon, 23 Jun 2014 20:16:57 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 76BC4304048 for ; Mon, 23 Jun 2014 18:16:57 -0700 (PDT) X-ASG-Debug-ID: 1403572610-04bdf05669555390001-S8gJnT Received: from remote.messagemedia.com.au (mail.messagemedia.com.au [175.45.83.34]) by cuda.sgi.com with ESMTP id oFYS8bsqSVxBW6Ls (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Mon, 23 Jun 2014 18:16:51 -0700 (PDT) X-Barracuda-Envelope-From: keith.owens@messagemedia.com.au X-Barracuda-Apparent-Source-IP: 175.45.83.34 Received: from [10.8.3.70] (10.8.3.70) by MM-SVR-RDC1.messagemedia.local (192.168.19.3) with Microsoft SMTP Server id 8.3.342.0; Tue, 24 Jun 2014 11:16:48 +1000 Message-ID: <53A8D17C.8060808@messagemedia.com.au> Date: Tue, 24 Jun 2014 11:16:44 +1000 From: Keith Owens User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.3.0 MIME-Version: 1.0 To: Subject: Re: [pcp] RFC - pmie "ruleset" extension References: <53A8AA17.5070205@internode.on.net> <53A8AB4E.9090003@internode.on.net> X-ASG-Orig-Subj: Re: [pcp] RFC - pmie "ruleset" extension In-Reply-To: Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-TM-AS-Product-Ver: SMEX-10.1.0.2244-7.000.1014-20774.006 X-TM-AS-Result: No--9.733900-0.000000-31 X-TM-AS-User-Approved-Sender: Yes X-TM-AS-User-Blocked-Sender: No X-Barracuda-Connect: mail.messagemedia.com.au[175.45.83.34] X-Barracuda-Start-Time: 1403572611 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6901 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- We have complicated tests with multiple errors, multiples warnings and a final OK if everything is sane. Nagios expects a single packet every minute or so giving a return code and a line of text. With the emphasis on 'single'. Currently I have to resort to repeated test negation to ensure that only one rule will trigger, it's messy. delta = 1 min; held_critical = <%= held_critical %>; deferred_critical = <%= deferred_critical %>; incoming_critical = <%= incoming_critical %>; active_critical = <%= active_critical %>; active_warning = <%= active_warning %>; // Any held email is critical (postfix.queues.hold #total >= $held_critical) -> shell "$send_nagios -S POSTFIX -s 2 %v held emails\n"; // Check for deferred emails, critical only !(postfix.queues.hold #total >= $held_critical) && (postfix.queues.deferred #total >= $deferred_critical) -> shell "$send_nagios -S POSTFIX -s 2 %v deferred emails\n"; // Check for incoming/maildrop emails, critical only !(postfix.queues.hold #total >= $held_critical) && !(postfix.queues.deferred #total >= $deferred_critical) && (postfix.queues.incoming #total + postfix.queues.maildrop #total >= $incoming_critical) -> shell "$send_nagios -S POSTFIX -s 2 %v incoming/maildrop emails\n"; // Check for active emails, critical and warning !(postfix.queues.hold #total >= $held_critical) && !(postfix.queues.deferred #total >= $deferred_critical) && !(postfix.queues.incoming #total + postfix.queues.maildrop #total >= $incoming_critical) && (postfix.queues.active #total >= $active_critical) -> shell "$send_nagios -S POSTFIX -s 2 %v active emails\n"; !(postfix.queues.hold #total >= $held_critical) && !(postfix.queues.deferred #total >= $deferred_critical) && !(postfix.queues.incoming #total + postfix.queues.maildrop #total >= $incoming_critical) && !(postfix.queues.active #total >= $active_critical) && (postfix.queues.active #total >= $active_warning) -> shell "$send_nagios -S POSTFIX -s 1 %v active emails\n"; // Otherwise OK !(postfix.queues.hold #total >= $held_critical) && !(postfix.queues.deferred #total >= $deferred_critical) && !(postfix.queues.incoming #total + postfix.queues.maildrop #total >= $incoming_critical) && !(postfix.queues.active #total >= $active_critical) && !(postfix.queues.active #total >= $active_warning) -> shell "$send_nagios -S POSTFIX -s 0 %v active emails\n"; On 24/06/14 10:22, Frank Ch. Eigler wrote: > kenj wrote: > >> [...] >> In this use case, pmie needs to be able to >> >> (a) emit a message to indicate an alert, else >> (b) emit "OK" (or the moral equivalent) >> [...] > Is the idea to have pmie normally report OK every polling interval (10 > seconds or whatever?)? Can you say more about the interconnection of > pmie and nagios? > > - FChE > > _______________________________________________ > pcp mailing list > pcp@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/pcp From mgoodwin@redhat.com Mon Jun 23 20:33:51 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id AE22C7F4E for ; Mon, 23 Jun 2014 20:33:51 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 8951A304059 for ; Mon, 23 Jun 2014 18:33:51 -0700 (PDT) X-ASG-Debug-ID: 1403573629-04cbb0653517000001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id 6FmUHFeGS6jSlQBI (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Mon, 23 Jun 2014 18:33:50 -0700 (PDT) X-Barracuda-Envelope-From: mgoodwin@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s5O1XnKS019694 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Mon, 23 Jun 2014 21:33:49 -0400 Received: from [10.64.51.28] (vpn1-51-28.bne.redhat.com [10.64.51.28]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5O1XjZQ028971 for ; Mon, 23 Jun 2014 21:33:47 -0400 Message-ID: <53A8D578.90806@redhat.com> Date: Tue, 24 Jun 2014 11:33:44 +1000 From: Mark Goodwin User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0 MIME-Version: 1.0 To: pcp@oss.sgi.com Subject: Re: [pcp] RFC - pmie "ruleset" extension References: <53A8AA17.5070205@internode.on.net> <53A8AB4E.9090003@internode.on.net> <53A8D17C.8060808@messagemedia.com.au> X-ASG-Orig-Subj: Re: [pcp] RFC - pmie "ruleset" extension In-Reply-To: <53A8D17C.8060808@messagemedia.com.au> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.27 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1403573630 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On 06/24/2014 11:16 AM, Keith Owens wrote: > We have complicated tests with multiple errors, multiples warnings and a final > OK if everything is sane. Nagios expects a single packet every minute or so > giving a return code and a line of text. With the emphasis on 'single'. > Currently I have to resort to repeated test negation to ensure that only one > rule will trigger, it's messy. Not just messy, but rather inefficient and probably error prone too because despite the repeated negation, the postfix.queues.* metrics could change between the multiple rule evaluations (so more than one rule could trigger). Actually - it depends on whether pmie does one fetch per rule or one fetch per update cycle(?) In any case, Ken's syntax extension is a winner :) -- Mark > > delta = 1 min; > > held_critical = <%= held_critical %>; > deferred_critical = <%= deferred_critical %>; > incoming_critical = <%= incoming_critical %>; > active_critical = <%= active_critical %>; > active_warning = <%= active_warning %>; > > // Any held email is critical > > (postfix.queues.hold #total >= $held_critical) > -> shell "$send_nagios -S POSTFIX -s 2 %v held emails\n"; > > // Check for deferred emails, critical only > > !(postfix.queues.hold #total >= $held_critical) && > (postfix.queues.deferred #total >= $deferred_critical) > -> shell "$send_nagios -S POSTFIX -s 2 %v deferred emails\n"; > > // Check for incoming/maildrop emails, critical only > > !(postfix.queues.hold #total >= $held_critical) && > !(postfix.queues.deferred #total >= $deferred_critical) && > (postfix.queues.incoming #total + postfix.queues.maildrop #total >= > $incoming_critical) > -> shell "$send_nagios -S POSTFIX -s 2 %v incoming/maildrop emails\n"; > > // Check for active emails, critical and warning > > !(postfix.queues.hold #total >= $held_critical) && > !(postfix.queues.deferred #total >= $deferred_critical) && > !(postfix.queues.incoming #total + postfix.queues.maildrop #total >= > $incoming_critical) && > (postfix.queues.active #total >= $active_critical) > -> shell "$send_nagios -S POSTFIX -s 2 %v active emails\n"; > > !(postfix.queues.hold #total >= $held_critical) && > !(postfix.queues.deferred #total >= $deferred_critical) && > !(postfix.queues.incoming #total + postfix.queues.maildrop #total >= > $incoming_critical) && > !(postfix.queues.active #total >= $active_critical) && > (postfix.queues.active #total >= $active_warning) > -> shell "$send_nagios -S POSTFIX -s 1 %v active emails\n"; > > // Otherwise OK > > !(postfix.queues.hold #total >= $held_critical) && > !(postfix.queues.deferred #total >= $deferred_critical) && > !(postfix.queues.incoming #total + postfix.queues.maildrop #total >= > $incoming_critical) && > !(postfix.queues.active #total >= $active_critical) && > !(postfix.queues.active #total >= $active_warning) > -> shell "$send_nagios -S POSTFIX -s 0 %v active emails\n"; > > > On 24/06/14 10:22, Frank Ch. Eigler wrote: >> kenj wrote: >> >>> [...] >>> In this use case, pmie needs to be able to >>> >>> (a) emit a message to indicate an alert, else >>> (b) emit "OK" (or the moral equivalent) >>> [...] >> Is the idea to have pmie normally report OK every polling interval (10 >> seconds or whatever?)? Can you say more about the interconnection of >> pmie and nagios? >> >> - FChE >> >> _______________________________________________ >> pcp mailing list >> pcp@oss.sgi.com >> http://oss.sgi.com/mailman/listinfo/pcp > > _______________________________________________ > pcp mailing list > pcp@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/pcp From kenj@internode.on.net Mon Jun 23 23:03:26 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 76D797F5A for ; Mon, 23 Jun 2014 23:03:26 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 619C9304059 for ; Mon, 23 Jun 2014 21:03:26 -0700 (PDT) X-ASG-Debug-ID: 1403582600-04cbb065361c710001-S8gJnT Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id 7U0JdAwEKPELK3IW for ; Mon, 23 Jun 2014 21:03:20 -0700 (PDT) X-Barracuda-Envelope-From: kenj@internode.on.net X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AmQuAP/3qFN20YDzPGdsb2JhbAANTYcmwQcDAgGBIgQBAQEBOIQ4AQEBBCMEEUANBBwDAQIBAgIFFgsCAgkDAgECATEKAggTBgIBAa1wd510F4EqjVkGEIJhgUwBA7ID Received: from ppp118-209-128-243.lns20.mel6.internode.on.net (HELO [192.168.1.100]) ([118.209.128.243]) by ipmail06.adl2.internode.on.net with ESMTP; 24 Jun 2014 13:32:58 +0930 Message-ID: <53A8F92F.9030201@internode.on.net> Date: Tue, 24 Jun 2014 14:06:07 +1000 From: Ken McDonell User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.6.0 MIME-Version: 1.0 To: pcp@oss.sgi.com Subject: Fwd: Re: [pcp] RFC - pmie "ruleset" extension References: <53A8F90F.8080809@internode.on.net> X-ASG-Orig-Subj: Fwd: Re: [pcp] RFC - pmie "ruleset" extension In-Reply-To: <53A8F90F.8080809@internode.on.net> X-Forwarded-Message-Id: <53A8F90F.8080809@internode.on.net> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1403582600 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6904 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- oops meant to Cc to the list. -------- Original Message -------- Subject: Re: [pcp] RFC - pmie "ruleset" extension Date: Tue, 24 Jun 2014 14:05:35 +1000 From: Ken McDonell To: Nathan Scott On 24/06/14 09:44, Nathan Scott wrote: > ... > One issue was the way there isn't just true or false, there's also "maybe" > (first sample for a counter, or host is down) - what would be the approach > there? Would it just fall through into that final else catch-all branch? > Heh, that would be the one that says "OK" above? ;) Might need some other > syntax for that case? Hmm had not thought of that. Let me "think out loud" ... Let's assume there are 3 rules (so no else ) part ... now composite ruleset behaves like a giant disjunction on the 3 rule predicates, so the ruleset evaluates to a boolean. The 3-state boolean logic we use dictates that the ruleset will be TRUE as soon as one predicate is TRUE and FALSE if all predicates are FALSE ... so if no predicate is TRUE and some are FALSE and some are DUNNO (aka "maybe") then the ruleset will have the value DUNNO. So I need 2 optional clauses after the set of rules ... the exiting ELSE matches the FALSE case (but ELSE may not be appropriate semantically now) and I need some other keyword for the DUNNO case. For example ... ruleset rule1 else rule2 else rule3 else action1 if undefined else action2; There is nothing difficult about this in the execution engine ... it is just a matter of making the grammar look OK (and I'm not sure the above meets this criteria) ... suggestions more than welcome. Actually that won't work at all ... "if" and "undefined" are ambiguous ... could be arguments to action1. Perhaps no "else action" stuff, demand every element in the ruleset be a rule, but add a new symbolic constant "dunno" or "maybe" or "undefined" or ??? like the existing "true" and "false". This would allow the explicit specification as follows: ruleset rule1 else rule2 else rule3 else dunno -> action1 else true -> action2; Now this needs some special semantics for "dunno" in this context, otherwise action1 could never be executed, but that's easy in the engine. From kenj@internode.on.net Mon Jun 23 23:06:31 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 342AE7F5E for ; Mon, 23 Jun 2014 23:06:31 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 1F6D7304059 for ; Mon, 23 Jun 2014 21:06:31 -0700 (PDT) X-ASG-Debug-ID: 1403582789-04cbb065351c870001-S8gJnT Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id j0xHom5sPIDYCFaX for ; Mon, 23 Jun 2014 21:06:29 -0700 (PDT) X-Barracuda-Envelope-From: kenj@internode.on.net X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AuAYAP/3qFN20YDzPGdsb2JhbAANTcUdgxUBgSIEAQEBATiEOAEBAQQ4QBELGAkWDwkDAgECATEUEwgBAa1wnmsXjwMWhC0BA7ID Received: from ppp118-209-128-243.lns20.mel6.internode.on.net (HELO [192.168.1.100]) ([118.209.128.243]) by ipmail06.adl2.internode.on.net with ESMTP; 24 Jun 2014 13:36:29 +0930 Message-ID: <53A8FA02.4060605@internode.on.net> Date: Tue, 24 Jun 2014 14:09:38 +1000 From: Ken McDonell User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.6.0 MIME-Version: 1.0 To: pcp@oss.sgi.com Subject: Re: [pcp] RFC - pmie "ruleset" extension References: <53A8AA17.5070205@internode.on.net> <53A8AB4E.9090003@internode.on.net> <53A8D17C.8060808@messagemedia.com.au> <53A8D578.90806@redhat.com> X-ASG-Orig-Subj: Re: [pcp] RFC - pmie "ruleset" extension In-Reply-To: <53A8D578.90806@redhat.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1403582789 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6904 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 24/06/14 11:33, Mark Goodwin wrote: > ... > Not just messy, but rather inefficient and probably error prone too > because despite the repeated negation, the postfix.queues.* metrics > could change between the multiple rule evaluations (so more than one > rule could trigger). Actually - it depends on whether pmie does one > fetch per rule or one fetch per update cycle(?) I think this is OK in the general case ... Frank's collapsing of the fetch groups makes it much more likely that multiple rules with the same sampling interval and metrics in common will see consistent values across all of the rules. The ruleset builds a single expression tree to span all the rules, so this further enforces consistency for any metrics appearing in multiple rules and actions. From nscott@redhat.com Mon Jun 23 23:26:50 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 0F9E37F5E for ; Mon, 23 Jun 2014 23:26:50 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 8899EAC002 for ; Mon, 23 Jun 2014 21:26:46 -0700 (PDT) X-ASG-Debug-ID: 1403584004-04cb6c76d01f9c00001-S8gJnT Received: from mx3-phx2.redhat.com (mx3-phx2.redhat.com [209.132.183.24]) by cuda.sgi.com with ESMTP id jw0ACQh5bxXmx15x for ; Mon, 23 Jun 2014 21:26:44 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.24 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx3-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id s5O4QifQ009318; Tue, 24 Jun 2014 00:26:44 -0400 Date: Tue, 24 Jun 2014 00:26:44 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: "Frank Ch. Eigler" Cc: PCP Message-ID: <1690334551.32241023.1403584004294.JavaMail.zimbra@redhat.com> In-Reply-To: References: <1828964541.31278424.1403503516163.JavaMail.zimbra@redhat.com> <25800551.31292134.1403505090072.JavaMail.zimbra@redhat.com> Subject: Re: [RFC] A privileged pmcd co-process MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [RFC] A privileged pmcd co-process Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.12] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: A privileged pmcd co-process Thread-Index: CDa6V1+PqcSJ8iWWWNn+DOW0yCkMBg== X-Barracuda-Connect: mx3-phx2.redhat.com[209.132.183.24] X-Barracuda-Start-Time: 1403584004 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.03 X-Barracuda-Spam-Status: No, SCORE=0.03 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, BSF_SC0_SA_TO_FROM_DOMAIN_MATCH, THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6904 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.01 BSF_SC0_SA_TO_FROM_DOMAIN_MATCH Sender Domain Matches Recipient Domain ----- Original Message ----- > > Having recently looked into the requirements of supporting the Linux > > kernel container technologies, I propose here an extension to the > > way in which pmcd operates. [...] > > Looks good. It sounds like a meta-pmcd kind of like inetd, launching > pmcds on demand, nailing some of them into containers if desired. Eh? I'm not sure you read the same RFC I wrote! But I'll happily take the "Looks good" part. :) In this cunning plan, there is only one pmcd, as now, and it has only one helper co-process which provides services (in particular, it serves namespace file descriptors) to the other pmcd (IOW to DSO PMDAs) and to process PMDAs that export data that is affected by specific namespaces. Its a simple isolation of those parts requiring elevated privilege, and ensures those parts are at arms length from network facing parts with a simple, well-defined interface. This is a small, incremental step that solves a specific problem (or 3), not a brain transplant for pmcd. You may be seeing it through the eyes of your plan from long ago to make pmcd like inetd & be able to relaunch itself in the event "something" fails? It is not that at all - it's a far simpler concept. I'm not overly fond of forking one pmcd (+ all of its PMDAs) per-container and definitely not on-demand. That'll quickly fly against Ken's "we're part of the solution, not part of the problem" philosophy IMO. ( We should make that the official PCP mantra, BTW! ) Care needs to be taken to not add processes to a container, as there are are both container lifecycle issues and resource accounting issues there. Some PMDAs also need to be the only process consuming a source of data, so we'd soon get into territory where the many pmcd processes need to be using different configuration files... the stuff of nightmares ...but, we have discussed this all before, many moons ago. Indeed, I envisage numerous issues with the pmcd-as-inetd approach - but if you do feel strongly its worth proceeding in that direction, please write it up & send out an RFC so we have a complete description of the problem + proposed solution? At the moment I'm second-guessing what you might be thinking, which is going to have us on different wavelengths - talking past each other for sure. cheers. -- Nathan From nscott@redhat.com Mon Jun 23 23:46:45 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id B791A7F5E for ; Mon, 23 Jun 2014 23:46:45 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 4A742AC004 for ; Mon, 23 Jun 2014 21:46:45 -0700 (PDT) X-ASG-Debug-ID: 1403585203-04cb6c76d11fa6c0001-S8gJnT Received: from mx5-phx2.redhat.com (mx5-phx2.redhat.com [209.132.183.37]) by cuda.sgi.com with ESMTP id DOStxS6ui57GQgrC for ; Mon, 23 Jun 2014 21:46:43 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.37 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx5-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5O4kdVp013692; Tue, 24 Jun 2014 00:46:39 -0400 Date: Tue, 24 Jun 2014 00:46:39 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: Ken McDonell Cc: pcp@oss.sgi.com Message-ID: <1027658196.32246169.1403585199797.JavaMail.zimbra@redhat.com> In-Reply-To: <53A8FA02.4060605@internode.on.net> References: <53A8AA17.5070205@internode.on.net> <53A8AB4E.9090003@internode.on.net> <53A8D17C.8060808@messagemedia.com.au> <53A8D578.90806@redhat.com> <53A8FA02.4060605@internode.on.net> Subject: Re: [pcp] RFC - pmie "ruleset" extension MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [pcp] RFC - pmie "ruleset" extension Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.12] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: RFC - pmie "ruleset" extension Thread-Index: jwuSNtVBA78VKB9Dr00WOlFL/+SnzQ== X-Barracuda-Connect: mx5-phx2.redhat.com[209.132.183.37] X-Barracuda-Start-Time: 1403585203 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6904 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... ----- Original Message ----- > On 24/06/14 11:33, Mark Goodwin wrote: > > ... > > Not just messy, but rather inefficient and probably error prone too > > because despite the repeated negation, the postfix.queues.* metrics > > could change between the multiple rule evaluations (so more than one > > rule could trigger). Actually - it depends on whether pmie does one > > fetch per rule or one fetch per update cycle(?) > > I think this is OK in the general case ... Frank's collapsing of the > fetch groups Hmm - which? Are you thinking of the pmlogger changes in commits e2301eb9, 0e68280 and finally a7f30720? I don't think those would come into play here (live mode pmie feeding events to Nagios)...? makes it much more likely that multiple rules with the same > sampling interval and metrics in common will see consistent values > across all of the rules. (IOW, this may still need pmie changes - those changes were pmlogger- specific) cheers. -- Nathan From nscott@redhat.com Mon Jun 23 23:52:38 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 3AD607F5A for ; Mon, 23 Jun 2014 23:52:38 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id DE5B7AC005 for ; Mon, 23 Jun 2014 21:52:37 -0700 (PDT) X-ASG-Debug-ID: 1403585556-04bdf0566855bef0001-S8gJnT Received: from mx5-phx2.redhat.com (mx5-phx2.redhat.com [209.132.183.37]) by cuda.sgi.com with ESMTP id MwAMlK5t9A1yA9pp for ; Mon, 23 Jun 2014 21:52:36 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.37 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx5-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5O4qYwi014688; Tue, 24 Jun 2014 00:52:34 -0400 Date: Tue, 24 Jun 2014 00:52:34 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: Ken McDonell Cc: pcp@oss.sgi.com Message-ID: <1296614828.32248110.1403585554418.JavaMail.zimbra@redhat.com> In-Reply-To: <53A8F92F.9030201@internode.on.net> References: <53A8F90F.8080809@internode.on.net> <53A8F92F.9030201@internode.on.net> Subject: Re: [pcp] Fwd: Re: RFC - pmie "ruleset" extension MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [pcp] Fwd: Re: RFC - pmie "ruleset" extension Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.12] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: RFC - pmie "ruleset" extension Thread-Index: MoCOAHiT1SnYv3XOxHd1eHB4BcRIZg== X-Barracuda-Connect: mx5-phx2.redhat.com[209.132.183.37] X-Barracuda-Start-Time: 1403585556 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6905 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... ----- Original Message ----- > -------- Original Message -------- > Subject: Re: [pcp] RFC - pmie "ruleset" extension > Date: Tue, 24 Jun 2014 14:05:35 +1000 > From: Ken McDonell > To: Nathan Scott > > On 24/06/14 09:44, Nathan Scott wrote: > > ... > > One issue was the way there isn't just true or false, there's also "maybe" > > (first sample for a counter, or host is down) - what would be the approach > > there? Would it just fall through into that final else catch-all branch? > > Heh, that would be the one that says "OK" above? ;) Might need some other > > syntax for that case? > > Hmm had not thought of that. Let me "think out loud" ... > > Let's assume there are 3 rules (so no else ) part ... now > composite ruleset behaves like a giant disjunction on the 3 rule > predicates, so the ruleset evaluates to a boolean. The 3-state boolean > logic we use dictates that the ruleset will be TRUE as soon as one > predicate is TRUE and FALSE if all predicates are FALSE ... so if no > predicate is TRUE and some are FALSE and some are DUNNO (aka "maybe") > then the ruleset will have the value DUNNO. *nod* > So I need 2 optional clauses after the set of rules ... the exiting ELSE > matches the FALSE case (but ELSE may not be appropriate semantically > now) and I need some other keyword for the DUNNO case. Perhaps it will help to think of it more like an exception-handling model (so a keyword like "except" alongside the "else" clause to catch any kind of exception, in any part of the if/else/... evaluation). Its a bit like that, since the trigger for DUNNO can be all sorts of whacko things, and for the most part they're exceptional things (lost connections, not enough data yet, and so on). cheers. -- Nathan From nscott@redhat.com Tue Jun 24 02:42:34 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id CF8687F54 for ; Tue, 24 Jun 2014 02:42:34 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id AB87A304051 for ; Tue, 24 Jun 2014 00:42:31 -0700 (PDT) X-ASG-Debug-ID: 1403595746-04bdf05668561a10001-S8gJnT Received: from mx4-phx2.redhat.com (mx4-phx2.redhat.com [209.132.183.25]) by cuda.sgi.com with ESMTP id IGLwA1DWUVOS9mjv for ; Tue, 24 Jun 2014 00:42:26 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.25 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx4-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id s5O7gQf9013116 for ; Tue, 24 Jun 2014 03:42:26 -0400 Date: Tue, 24 Jun 2014 03:42:26 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: PCP Message-ID: <1352244285.32330294.1403595746043.JavaMail.zimbra@redhat.com> In-Reply-To: <2038184075.32330062.1403595715328.JavaMail.zimbra@redhat.com> Subject: pcp updates: getopt folio support MIME-Version: 1.0 X-ASG-Orig-Subj: pcp updates: getopt folio support Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.12] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: pcp updates: getopt folio support Thread-Index: ElRY6q+S+gkWjCko/ublt4Uk+3qw6g== X-Barracuda-Connect: mx4-phx2.redhat.com[209.132.183.25] X-Barracuda-Start-Time: 1403595746 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6907 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Changes committed to git://git.performancecopilot.org/pcp.git dev qa/728.out |binary qa/899 | 97 ++++++++++++++++ qa/899.out | 279 ++++++++++++++++++++++++++++++++++++++++++++++++ qa/978 | 14 ++ qa/978.out | 8 + qa/group | 12 +- qa/src/getoptions.c | 9 + src/include/pcp/impl.h | 1 src/include/pcp/pmapi.h | 11 + src/libpcp/src/exports | 1 src/libpcp/src/getopt.c | 128 +++++++++++++++++++++- src/pmgetopt/pmgetopt.c | 11 + src/python/pcp/pmapi.py | 21 +++ src/python/pmapi.c | 84 ++++++++++++++ 14 files changed, 667 insertions(+), 9 deletions(-) commit 7619d51b43eeabb2a9f6d052565b621b02c9f39b Author: Nathan Scott Date: Tue Jun 24 14:01:49 2014 +1000 Add archive folio parsing mechanism into option handling code After recent discussion with Stan about the needs of python tools that read and write archive folios, this commit adds a mechanism for automatically opening a folio and setting up struct pmOptions with the archive(s) it contains. While there, the exising host and archive list mechanisms are tested further, and added to the automatically available set (as long options only to not conflict on existing short option characters). Extensions are made to the pmgetopt shell utility to access this functionality, and the python wrapper APIs. A new qa/899 test is tossed into the mix, and other existing tests are updated to make sure we have decent functional coverage. Also, a new QA group is added to make it easier to run all the getopts tests at once. From fche@redhat.com Tue Jun 24 07:14:57 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id ABF357F60 for ; Tue, 24 Jun 2014 07:14:57 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 21524AC002 for ; Tue, 24 Jun 2014 05:14:56 -0700 (PDT) X-ASG-Debug-ID: 1403612092-04cbb0653741510001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id Hecg5foQv2MGEkMp (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 24 Jun 2014 05:14:53 -0700 (PDT) X-Barracuda-Envelope-From: fche@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s5OCEpoD002972 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Tue, 24 Jun 2014 08:14:52 -0400 Received: from fche.csb (vpn-56-123.rdu2.redhat.com [10.10.56.123]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5OBvc8x016205; Tue, 24 Jun 2014 07:57:38 -0400 Received: by fche.csb (Postfix, from userid 2569) id 2D3F5584EC; Tue, 24 Jun 2014 07:57:37 -0400 (EDT) Date: Tue, 24 Jun 2014 07:57:37 -0400 From: "Frank Ch. Eigler" To: Nathan Scott Cc: PCP Subject: Re: [RFC] A privileged pmcd co-process Message-ID: <20140624115737.GO8337@redhat.com> X-ASG-Orig-Subj: Re: [RFC] A privileged pmcd co-process References: <1828964541.31278424.1403503516163.JavaMail.zimbra@redhat.com> <25800551.31292134.1403505090072.JavaMail.zimbra@redhat.com> <1690334551.32241023.1403584004294.JavaMail.zimbra@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1690334551.32241023.1403584004294.JavaMail.zimbra@redhat.com> User-Agent: Mutt/1.4.2.2i X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1403612092 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Hi - > [...] In this cunning plan, there is only one pmcd, as now, and it > has only one helper co-process which provides services (in > particular, it serves namespace file descriptors) to the other pmcd > (IOW to DSO PMDAs) and to process PMDAs that export data that is > affected by specific namespaces. You're right, I did totally misread your suggestion. Let me try a second simplified rephrasing: you're envisioning the systemwide pmcd and pmda processes switching to/from container namespaces to service individual requests? Kind of like the linux_proc pmda doing temporary setuid() downgrades? - FChE From minnus@buffalo.edu Tue Jun 24 10:14:23 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id AE6A67F57 for ; Tue, 24 Jun 2014 10:14:23 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 128A2AC005 for ; Tue, 24 Jun 2014 08:14:19 -0700 (PDT) X-ASG-Debug-ID: 1403622854-04cbb0653856220001-S8gJnT Received: from mtareserve1.acsu.buffalo.edu (mtareserve6.acsu.buffalo.edu [128.205.6.4]) by cuda.sgi.com with ESMTP id BBXeokWOAfWMuRKP for ; Tue, 24 Jun 2014 08:14:14 -0700 (PDT) X-Barracuda-Envelope-From: minnus@buffalo.edu X-Barracuda-Apparent-Source-IP: 128.205.6.4 Received: from localmailB.acsu.buffalo.edu (localmailb.acsu.buffalo.edu [128.205.5.200]) by mtareserve1.acsu.buffalo.edu (Postfix) with ESMTP id 871ED983 for ; Tue, 24 Jun 2014 11:14:14 -0400 (EDT) Received: from localmailB.acsu.buffalo.edu (localhost [127.0.0.1]) by localhost (Postfix) with SMTP id 80FF6D1A6 for ; Tue, 24 Jun 2014 11:14:14 -0400 (EDT) Received: from localmailB.acsu.buffalo.edu (localhost [127.0.0.1]) by localmailB.acsu.buffalo.edu (Postfix) with ESMTP id 85398D194 for ; Tue, 24 Jun 2014 11:14:12 -0400 (EDT) Received: from smtp.buffalo.edu (smtp1.acsu.buffalo.edu [128.205.5.253]) by localmailB.acsu.buffalo.edu (Prefixe) with ESMTP id 7CB00D193 for ; Tue, 24 Jun 2014 11:14:12 -0400 (EDT) Received: from gilmour.ccr.buffalo.edu (gilmour.ccr.buffalo.edu [128.205.40.13]) (Authenticated sender: minnus@buffalo.edu) by smtp.buffalo.edu (Postfix) with ESMTPSA id 6C920C625 for ; Tue, 24 Jun 2014 11:14:12 -0400 (EDT) Message-ID: <53A995C8.5020904@buffalo.edu> Date: Tue, 24 Jun 2014 11:14:16 -0400 From: Martins Innus User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:24.0) Gecko/20100101 Thunderbird/24.6.0 MIME-Version: 1.0 To: pcp@oss.sgi.com Subject: nvidia/nvml pmda Content-Type: multipart/mixed; boundary="------------090208040908090900070602" X-ASG-Orig-Subj: nvidia/nvml pmda X-PM-EL-Spam-Prob: : 8% X-Barracuda-Connect: mtareserve6.acsu.buffalo.edu[128.205.6.4] X-Barracuda-Start-Time: 1403622854 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6915 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- This is a multi-part message in MIME format. --------------090208040908090900070602 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Hi, Attached is a nvidia/nvml pmda for general review and suggestions. I still need to do some error checking on metrics that may not be available on all cards, but we have been using it for quite a while and it seems to be working fine. I'd appreciate any general feedback. I've also included the rpm spec file. This pmda depends on both the nvidia driver being installed as well as the NVIDIA GPU deployment kit (which provides NVML). As these are not available as RPMs, let me know if you prefer a different way of generating the spec file from what we have done with respect to specifying the dependencies. Thanks Martins --------------090208040908090900070602 Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0"; name="pcp-pmda-nvidia.spec" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="pcp-pmda-nvidia.spec" Name: pcp-pmda-nvidia Version: 3.9.4 Release: 1 Summary: A PMDA for PCP that tracks metrics for NVIDIA graphics cards Group: Applications/System License: GPLv2+ URL: http://ccr.buffalo.edu/ Source0: %{name}-%{version}.tar.gz BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX) AutoReqProv: no BuildRequires: pcp-libs-devel = 3.9.4 Requires: /bin/sh Requires: libc.so.6()(64bit) Requires: libc.so.6(GLIBC_2.2.5)(64bit) Requires: libc.so.6(GLIBC_2.3.4)(64bit) Requires: libc.so.6(GLIBC_2.4)(64bit) Requires: libdl.so.2()(64bit) Requires: libm.so.6()(64bit) Requires: libpcp.so.3()(64bit) Requires: libpcp_pmda.so.3()(64bit) Requires: libpthread.so.0()(64bit) Requires: pcp = 3.9.4 Requires: rpmlib(CompressedFileNames) <= 3.0.4-1 Requires: rpmlib(FileDigests) <= 4.6.0-1 Requires: rpmlib(PayloadFilesHavePrefix) <= 4.0-1 Requires: rtld(GNU_HASH) Requires: rpmlib(PayloadIsXz) <= 5.2-1 %description The NVIDIA PMDA is a PCP module for gathering metrics on the performance of NVIDIA graphics cards. By default, this package will install the PMDA as both a collector and monitor, and it will run in DSO mode. To use the PMDA in a different configuration, re-run the install script in its folder. It will also first add this PMDA to the PCP namespace file, if it has not already been included. This spec file is partially based on the pcp-pmda-infiniband RPM. %global pmdadir %{_sharedstatedir}/pcp/pmdas/nvidia %global pmnsdir %{_sharedstatedir}/pcp/pmns %prep %setup -q -n nvidia %build make %{?_smp_mflags} %install rm -rf %{buildroot} make install DESTDIR=%{buildroot}%{pmdadir} %clean rm -rf %{buildroot} %files %defattr(-,root,root,-) %doc README %{pmdadir}/* %changelog %post cd %{pmnsdir} # The name and default domain number for the PMDA. pmda_name="NVML" pmda_number=120 # The maximum number a custom PMDA is allowed to use. MAX_VALID_NUMBER=510 # Check if the PMDA has already been added to PCP's namespace files. pmda_found=false while read macro name number other ; do if [ "$name" == "$pmda_name" ] ; then pmda_found=true break fi done < %{pmnsdir}/stdpmid if ! $pmda_found ; then while read name number other ; do if [ "$name" == "$pmda_name" ] ; then pmda_found=true break fi done < %{pmnsdir}/stdpmid.local fi # If it has not been added... if ! $pmda_found ; then # Find a domain number that has not been used in the config file yet, # starting with the default number. If one can't be found in the valid # range, stop looking. available_number_found=false while ! $available_number_found ; do available_number_found=true while read macro name number other ; do if [ "$number" == "$pmda_number" ] ; then available_number_found=false break fi done < %{pmnsdir}/stdpmid if $available_number_found ; then while read name number other ; do if [ "$number" == "$pmda_number" ] ; then available_number_found=false break fi done < %{pmnsdir}/stdpmid.local fi if ! $available_number_found ; then pmda_number=`expr $pmda_number + 1` if [ "$pmda_number" -gt "$MAX_VALID_NUMBER" ] ; then break fi fi done # If no available number was found, report the error and exit. if ! $available_number_found ; then echo "No available domain number found for $pmda_name." >&2 exit 1 fi # Append the PMDA name and number to the local namespace file. printf "$pmda_name\t\t$pmda_number\n" >> %{pmnsdir}/stdpmid.local # Run the script to generate a new combined namespace file. %{pmnsdir}/Make.stdpmid # Report the addition. echo "$pmda_name added to PCP namespace file with number $pmda_number" fi # Run the PMDA install script. cd %{pmdadir} printf "b\ndso\n" | %{pmdadir}/Install %preun # If uninstalling the module completely, # run the PMDA remove script before uninstalling files. if [ "$1" == 0 ] ; then cd %{pmdadir} %{pmdadir}/Remove fi --------------090208040908090900070602 Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0"; name="nvidia.c" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="nvidia.c" #include #include #include #include "domain.h" #include #include // GCARD_INDOM struct, stats that are per card typedef struct { int cardid; char *name; char *busid; int temp; int fanspeed; int perfstate; int gpuactive; int memactive; unsigned long long memused; unsigned long long memtotal; } nvinfo_t; // overall struct, holds instance values, indom arrays and instance struct arrays typedef struct { int numcards; nvinfo_t *nvinfo; pmdaIndom *nvindom; } pcp_nvinfo_t; // each INDOM, this only has one, corresponding to values that change per card pmdaIndom indomtab[] = { #define GCARD_INDOM 0 { GCARD_INDOM, 0, NULL }, }; static pcp_nvinfo_t pcp_nvinfo; // list of metrics we want to export // all in cluster 0, with increasing item ids static pmdaMetric metrictab[] = { /* num cards , no indom */ { NULL, { PMDA_PMID(0,0), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, PMDA_PMUNITS(0, 0, 0, 0, 0, 0) } }, /* card id */ { NULL, { PMDA_PMID(0,1), PM_TYPE_U32, GCARD_INDOM, PM_SEM_INSTANT, PMDA_PMUNITS(0, 0, 0, 0, 0, 0) } }, /* card name */ { NULL, { PMDA_PMID(0,2), PM_TYPE_STRING, GCARD_INDOM, PM_SEM_INSTANT, PMDA_PMUNITS(0, 0, 0, 0, 0, 0) } }, /* bus id */ { NULL, { PMDA_PMID(0,3), PM_TYPE_STRING, GCARD_INDOM, PM_SEM_INSTANT, PMDA_PMUNITS(0, 0, 0, 0, 0, 0) } }, /* temp */ { NULL, { PMDA_PMID(0,4), PM_TYPE_U32, GCARD_INDOM, PM_SEM_INSTANT, PMDA_PMUNITS(0, 0, 0, 0, 0, 0) } }, /* fanspeed */ { NULL, { PMDA_PMID(0,5), PM_TYPE_U32, GCARD_INDOM, PM_SEM_INSTANT, PMDA_PMUNITS(0, 0, 0, 0, 0, 0) } }, /* perf state */ { NULL, { PMDA_PMID(0,6), PM_TYPE_U32, GCARD_INDOM, PM_SEM_INSTANT, PMDA_PMUNITS(0, 0, 0, 0, 0, 0) } }, /* gpu active */ { NULL, { PMDA_PMID(0,7), PM_TYPE_U32, GCARD_INDOM, PM_SEM_INSTANT, PMDA_PMUNITS(0, 0, 0, 0, 0, 0) } }, /* mem active */ { NULL, { PMDA_PMID(0,8), PM_TYPE_U32, GCARD_INDOM, PM_SEM_INSTANT, PMDA_PMUNITS(0, 0, 0, 0, 0, 0) } }, /* mem used */ { NULL, { PMDA_PMID(0,9), PM_TYPE_U64, GCARD_INDOM, PM_SEM_INSTANT, PMDA_PMUNITS(1, 0, 0, PM_SPACE_BYTE, 0, 0) } }, /* mem total */ { NULL, { PMDA_PMID(0,10), PM_TYPE_U64, GCARD_INDOM, PM_SEM_DISCRETE, PMDA_PMUNITS(1, 0, 0, PM_SPACE_BYTE, 0, 0) } }, }; static char mypath[MAXPATHLEN]; static int isDSO = 1; int updatenv( pcp_nvinfo_t *pcp_nvinfo ) { nvmlReturn_t result; unsigned int device_count, i; result = nvmlInit(); result = nvmlDeviceGetCount(&device_count); nvmlDevice_t device; char name[NVML_DEVICE_NAME_BUFFER_SIZE]; nvmlPciInfo_t pci; unsigned int fanspeed; unsigned int temperature; nvmlUtilization_t utilization; nvmlMemory_t memory; nvmlPstates_t pstate; pcp_nvinfo->numcards = device_count; for (i = 0; i < device_count; i++){ result = nvmlDeviceGetHandleByIndex(i, &device); result = nvmlDeviceGetName(device, name, NVML_DEVICE_NAME_BUFFER_SIZE); result = nvmlDeviceGetPciInfo(device, &pci); result = nvmlDeviceGetFanSpeed(device, &fanspeed); result = nvmlDeviceGetTemperature(device, NVML_TEMPERATURE_GPU, &temperature); result = nvmlDeviceGetUtilizationRates(device, &utilization); result = nvmlDeviceGetMemoryInfo(device, &memory); result = nvmlDeviceGetPerformanceState(device, &pstate); pcp_nvinfo->nvinfo[i].cardid = i; if( pcp_nvinfo->nvinfo[i].name == NULL){ pcp_nvinfo->nvinfo[i].name = strdup(name); } if(pcp_nvinfo->nvinfo[i].busid == NULL){ pcp_nvinfo->nvinfo[i].busid = strdup(pci.busId); } pcp_nvinfo->nvinfo[i].temp = temperature; pcp_nvinfo->nvinfo[i].fanspeed = fanspeed; pcp_nvinfo->nvinfo[i].perfstate = pstate; pcp_nvinfo->nvinfo[i].gpuactive = utilization.gpu; pcp_nvinfo->nvinfo[i].memactive = utilization.memory; pcp_nvinfo->nvinfo[i].memused = memory.used; pcp_nvinfo->nvinfo[i].memtotal = memory.total; } result = nvmlShutdown(); return 0; } static int nvidia_fetchCallBack(pmdaMetric *mdesc, unsigned int inst, pmAtomValue *atom) { __pmID_int *idp = (__pmID_int *)&(mdesc->m_desc.pmid); updatenv( &pcp_nvinfo ); if (idp->cluster != 0 || idp->item < 0 || idp->item > 10){ return PM_ERR_PMID; } else if ( (idp->item !=0) && (inst > indomtab[GCARD_INDOM].it_numinst)) { return PM_ERR_INST; } //don't need to check cluster, since we only get here if 0 from above switch( idp->item ){ case 0: atom->ul = pcp_nvinfo.numcards; break; case 1: atom->ul = pcp_nvinfo.nvinfo[inst].cardid; break; case 2: atom->cp = pcp_nvinfo.nvinfo[inst].name; break; case 3: atom->cp = pcp_nvinfo.nvinfo[inst].busid; break; case 4: atom->ul = pcp_nvinfo.nvinfo[inst].temp; break; case 5: atom->ul = pcp_nvinfo.nvinfo[inst].fanspeed; break; case 6: atom->ul = pcp_nvinfo.nvinfo[inst].perfstate; break; case 7: atom->ul = pcp_nvinfo.nvinfo[inst].gpuactive; break; case 8: atom->ul = pcp_nvinfo.nvinfo[inst].memactive; break; case 9: atom->ull = pcp_nvinfo.nvinfo[inst].memused; break; case 10: atom->ull = pcp_nvinfo.nvinfo[inst].memtotal; break; default: return PM_ERR_PMID; } return 0; } /** * Initializes the path to the help file for this PMDA. */ static void initializeHelpPath() { int sep = __pmPathSeparator(); snprintf(mypath, sizeof(mypath), "%s%c" "nvidia" "%c" "help", pmGetConfig("PCP_PMDAS_DIR"), sep, sep); } void nvidia_init(pmdaInterface *dp) { if (isDSO) { initializeHelpPath(); pmdaDSO(dp, PMDA_INTERFACE_2, "nvidia DSO", mypath); } if (dp->status != 0) return; nvmlReturn_t result; result = nvmlInit(); if (NVML_SUCCESS != result){ dp->status = -EIO; return; } // Initialize instance domain and instances. unsigned int device_count; result = nvmlDeviceGetCount(&device_count); pmdaIndom *idp = &indomtab[GCARD_INDOM]; pcp_nvinfo.nvindom = idp; pcp_nvinfo.nvindom->it_numinst = device_count; pcp_nvinfo.nvindom->it_set = (pmdaInstid *)malloc(device_count * sizeof(pmdaInstid)); char gpuname[32]; int i; for(i=0 ; iit_set[i].i_inst = i; snprintf( gpuname, sizeof(gpuname), "gpu%d", i); pcp_nvinfo.nvindom->it_set[i].i_name = strdup(gpuname); } int nvsize = pcp_nvinfo.nvindom->it_numinst * sizeof(nvinfo_t); pcp_nvinfo.nvinfo = (nvinfo_t*)malloc(nvsize); memset(pcp_nvinfo.nvinfo, 0, nvsize); pcp_nvinfo.numcards = 0; // Set fetch callback function. pmdaSetFetchCallBack(dp, nvidia_fetchCallBack); pmdaInit(dp, indomtab, sizeof(indomtab)/sizeof(indomtab[0]), metrictab, sizeof(metrictab)/sizeof(metrictab[0])); } static void usage(void) { fprintf(stderr, "Usage: %s [options]\n\n", pmProgname); fputs("Options:\n" " -d domain use domain (numeric) for metrics domain of PMDA\n" " -l logfile write log into logfile rather than using default log name\n", stderr); exit(1); } int main(int argc, char **argv) { int err = 0; pmdaInterface desc; isDSO = 0; __pmSetProgname(argv[0]); initializeHelpPath(); pmdaDaemon(&desc, PMDA_INTERFACE_2, pmProgname, NVML, "nvidia.log", mypath); if (pmdaGetOpt(argc, argv, "D:d:l:?", &desc, &err) != EOF) err++; if (err) usage(); pmdaOpenLog(&desc); nvidia_init(&desc); pmdaConnect(&desc); pmdaMain(&desc); exit(0); } --------------090208040908090900070602-- From minnus@buffalo.edu Tue Jun 24 10:27:51 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id F01E57F4E for ; Tue, 24 Jun 2014 10:27:50 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id CE76E8F806F for ; Tue, 24 Jun 2014 08:27:47 -0700 (PDT) X-ASG-Debug-ID: 1403623664-04cb6c76cf230600001-S8gJnT Received: from mtareserve1.acsu.buffalo.edu (mtareserve6.acsu.buffalo.edu [128.205.6.4]) by cuda.sgi.com with ESMTP id 4iObAsPEyBA1z2yE for ; Tue, 24 Jun 2014 08:27:44 -0700 (PDT) X-Barracuda-Envelope-From: minnus@buffalo.edu X-Barracuda-Apparent-Source-IP: 128.205.6.4 Received: from localmailD.acsu.buffalo.edu (localmaild.acsu.buffalo.edu [128.205.5.208]) by mtareserve1.acsu.buffalo.edu (Postfix) with ESMTP id 5EA14AD2 for ; Tue, 24 Jun 2014 11:27:44 -0400 (EDT) Received: from localmailD.acsu.buffalo.edu (localhost [127.0.0.1]) by localhost (Postfix) with SMTP id 55F0813E14 for ; Tue, 24 Jun 2014 11:27:44 -0400 (EDT) Received: from localmailD.acsu.buffalo.edu (localhost [127.0.0.1]) by localmailD.acsu.buffalo.edu (Postfix) with ESMTP id 2969A13E09 for ; Tue, 24 Jun 2014 11:27:42 -0400 (EDT) Received: from smtp.buffalo.edu (smtp4.acsu.buffalo.edu [128.205.5.229]) by localmailD.acsu.buffalo.edu (Prefixe) with ESMTP id 1977F13E08 for ; Tue, 24 Jun 2014 11:27:42 -0400 (EDT) Received: from gilmour.ccr.buffalo.edu (gilmour.ccr.buffalo.edu [128.205.40.13]) (Authenticated sender: minnus@buffalo.edu) by smtp.buffalo.edu (Postfix) with ESMTPSA id 0A9ACBDD9 for ; Tue, 24 Jun 2014 11:27:42 -0400 (EDT) Message-ID: <53A998F1.4050003@buffalo.edu> Date: Tue, 24 Jun 2014 11:27:45 -0400 From: Martins Innus User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:24.0) Gecko/20100101 Thunderbird/24.6.0 MIME-Version: 1.0 To: pcp@oss.sgi.com Subject: updated infiniband pmda Content-Type: multipart/mixed; boundary="------------080207010901000808030705" X-ASG-Orig-Subj: updated infiniband pmda X-PM-EL-Spam-Prob: : 8% X-Barracuda-Connect: mtareserve6.acsu.buffalo.edu[128.205.6.4] X-Barracuda-Start-Time: 1403623664 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6915 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- This is a multi-part message in MIME format. --------------080207010901000808030705 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Hi, Attached is an updated infiniband pmda that includes metrics gathered from the switch counters. The HCA counters are only 32 bit while the switch metrics are 64 bit counters. We have done some initial validation, and the values seem to be correct for the simple tests we have run so far. Testing is still ongoing, but I wanted to send our current work out for comment. Thanks Martins --------------080207010901000808030705 Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0"; name="ib.c" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="ib.c" /* * Copyright (C) 2008 Silicon Graphics, Inc. All Rights Reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 2 of the License, or (at your * option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * for more details. * * IB part of the PMDA - initialization, fetching etc. */ #include "ibpmda.h" #include #include #include #define IBPMDA_MAX_HCAS (16) typedef struct local_port_s { /* * Cache the ca_name and portnum to avoid a bug in libibumad that * leaks memory when umad_port_get() is called over and over. * With ca_name and portnum we can safely do umad_port_release() * first and then umad_port_get() without fear that some future * version of release() will deallocate port->ca_name and * port->portnum. */ char ca_name[UMAD_CA_NAME_LEN]; int portnum; umad_port_t *ump; void * hndl; int needsupdate; } local_port_t; /* umad_ca_t starts with a name which is good enough for us to use */ typedef struct hca_state_s { umad_ca_t ca; local_port_t lports[UMAD_CA_MAX_PORTS]; } hca_state_t; /* IB Architecture rel 1.2 demands that performance counters * must plateau once they reach 2^32. This structure is used * to track the counters and reset them when they get close to * the magic boundary */ typedef struct mad_counter_s { uint64_t accum; /* Accumulated value */ uint32_t prev; /* Previous value of the counter */ uint32_t cur; /* Current value, only valid during iteration */ uint32_t isvalid; /* Is current value valid? */ } mad_counter_t; typedef struct mad_cnt_desc_s { enum MAD_FIELDS madid; /* ID for the counter */ char *name; int resetmask; /* Reset mask for port_performance_reset */ uint32_t hiwat; /* If current value is over hiwat mark, reset it */ int multiplier; } mad_cnt_desc_t; #define MADDESC_INIT(id, mask, shft, mul) \ [ IBPMDA_##id ] {IB_PC_##id##_F, #id, (1<= UMAD_CA_MAX_PORTS) || (lport < 0)) { print_parse_err(LOG_ERR, "port number %d is out of bounds for HCA %s\n", lport, local); return; } if (hca->lports[lport].hndl == NULL) { print_parse_err(LOG_ERR, "port %s:%d has failed initialization\n", local, lport); return; } if ((ps = (port_state_t *)calloc(1, sizeof(port_state_t))) == NULL) { __pmNotifyErr (LOG_ERR, "Out of memory to save state for %s\n", name); return; } ps->guid = guid; ps->remport = rport; ps->lport = hca->lports + lport; ps->portid.lid = -1; ps->timeout = 1000; if ((inst = pmdaCacheStore(itab[IB_PORT_INDOM].it_indom, PMDA_CACHE_ADD, name, ps)) < 0) { __pmNotifyErr(LOG_ERR, "Cannot add %s to the cache - %s\n", name, pmErrStr(inst)); free (ps); return; } portcount++; } static int foreachport(hca_state_t *hst, void (*cb)(hca_state_t *, umad_port_t *, void *), void *closure) { int pcnt = hst->ca.numports; int p; int nports = 0; for (p=0; (pcnt >0) && (p < UMAD_CA_MAX_PORTS); p++) { umad_port_t *port = hst->ca.ports[p]; if (port ) { pcnt--; nports++; if (cb) { cb (hst, port, closure); } } } return (nports); } #ifdef HAVE_NETWORK_BYTEORDER #define guid_htonll(a) do { } while (0) /* noop */ #define guid_ntohll(a) do { } while (0) /* noop */ #else static void guid_htonll(char *p) { char c; int i; for (i = 0; i < 4; i++) { c = p[i]; p[i] = p[7-i]; p[7-i] = c; } } #define guid_ntohll(v) guid_htonll(v) #endif static void printportconfig (hca_state_t *hst, umad_port_t *port, void *arg) { uint64_t hguid = port->port_guid; guid_ntohll((char *)&hguid); fprintf (fconf, "%s:%d 0x%llx %d via %s:%d\n", port->ca_name, port->portnum, (unsigned long long)hguid, port->portnum, hst->ca.ca_name, port->portnum); } static void monitorport(hca_state_t *hst, umad_port_t *port, void *arg) { pmdaIndom *itab = arg; uint64_t hguid = port->port_guid; char name[128]; guid_ntohll((char *)&hguid); sprintf(name, "%s:%d", port->ca_name, port->portnum); monitor_guid(itab, name, hguid, port->portnum, port->ca_name, port->portnum); } static int mgmt_classes[] = {IB_SMI_CLASS, IB_SMI_DIRECT_CLASS, IB_SA_CLASS, IB_PERFORMANCE_CLASS}; static void openumadport (hca_state_t *hst, umad_port_t *port, void *arg) { void *hndl = arg; local_port_t *lp; if ((hndl = mad_rpc_open_port(port->ca_name, port->portnum, mgmt_classes, ARRAYSZ(mgmt_classes))) == NULL) { __pmNotifyErr(LOG_ERR, "Cannot open port handle for %s:%d\n", port->ca_name, port->portnum); } lp = &hst->lports[port->portnum]; strcpy(lp->ca_name, port->ca_name); lp->portnum = port->portnum; lp->ump = port; lp->hndl = hndl; } static void parse_config(pmdaIndom *itab) { char buffer[2048]; while ((fgets(buffer, sizeof(buffer)-1, fconf)) != NULL) { char *p; lcnt++; /* strip comments */ if ((p = strchr(buffer,'#'))) *p='\0'; for (p = buffer; *p; p++) { if (!isspace (*p)) break; } if (*p != '\0') { char name[128]; long long guid; int rport; char local[128]; int lport; if (sscanf(p, "%[^ \t]%llx%d via %[^:]:%d", name, &guid, &rport, local, &lport) != 5) { __pmNotifyErr (LOG_ERR, "%s(%d): cannot parse the line\n", confpath, lcnt); continue; } monitor_guid(itab, name, guid, rport, local, lport); } } } int ib_load_config(const char *cp, int writeconf, pmdaIndom *itab, unsigned int nindoms) { char hcas[IBPMDA_MAX_HCAS][UMAD_CA_NAME_LEN]; hca_state_t *st = NULL; int i, n; int (*closef)(FILE *) = fclose; if (nindoms <= IB_CNT_INDOM) return -EINVAL; if (umad_init()) { __pmNotifyErr(LOG_ERR, "umad_init() failed. No IB kernel support or incorrect ABI version\n"); return -EIO; } if ((n = umad_get_cas_names(hcas, ARRAYSZ(hcas)))) { if ((st = calloc (n, sizeof(hca_state_t))) == NULL) return -ENOMEM; } else /* No HCAs */ return 0; /* Open config file - if the executable bit is set then assume that * user wants it to be a script and run it, otherwise try loading it. */ strcpy(confpath, cp); if (access(confpath, F_OK) == 0) { if (writeconf) { __pmNotifyErr(LOG_ERR, "Config file exists and writeconf arg was given to pmdaib. Aborting."); exit(1); } if (access(confpath, X_OK)) { /* Not an executable, just read it */ fconf = fopen (confpath, "r"); } else { fconf = popen(confpath, "r"); closef = pclose; } } else if (writeconf) { fconf = fopen(confpath, "w"); } /* else no config file: Just monitor local ports */ for (i=0; i < n; i++) { if (umad_get_ca(hcas[i], &st[i].ca) == 0) { int e = pmdaCacheStore(itab[IB_HCA_INDOM].it_indom, PMDA_CACHE_ADD, st[i].ca.ca_name, &st[i].ca); if (e < 0) { __pmNotifyErr(LOG_ERR, "Cannot add instance for %s to the cache - %s\n", st[i].ca.ca_name, pmErrStr(e)); continue; } foreachport(st+i, openumadport, NULL); if (fconf == NULL) /* No config file - monitor local ports */ foreachport(st+i, monitorport, itab); if (writeconf) foreachport(st+i, printportconfig, fconf); } } if (fconf) { parse_config(itab); (*closef)(fconf); } if (writeconf) /* Config file is now written. Exit. */ exit(0); if (!portcount) { __pmNotifyErr(LOG_INFO, "No IB ports found to monitor"); } itab[IB_CNT_INDOM].it_set = (pmdaInstid *)calloc(ARRAYSZ(mad_cnt_descriptors), sizeof(pmdaInstid)); if (itab[IB_CNT_INDOM].it_set == NULL) { return -ENOMEM; } itab[IB_CNT_INDOM].it_numinst = ARRAYSZ(mad_cnt_descriptors); for (i=0; i < ARRAYSZ(mad_cnt_descriptors); i++) { itab[IB_CNT_INDOM].it_set[i].i_inst = i; itab[IB_CNT_INDOM].it_set[i].i_name = mad_cnt_descriptors[i].name; } return 0; } static char * ib_portcap_to_string(port_state_t *pst) { static struct { int bit; const char *cap; } capdest [] = { {1, "SM"}, {2, "Notice"}, {3, "Trap"}, {5, "AutomaticMigration"}, {6, "SLMapping"}, {7, "MKeyNVRAM"}, {8, "PKeyNVRAM"}, {9, "LedInfo"}, {10, "SMdisabled"}, {11, "SystemImageGUID"}, {12, "PkeySwitchExternalPortTrap"}, {16, "CommunicatonManagement"}, {17, "SNMPTunneling"}, {18, "Reinit"}, {19, "DeviceManagement"}, {20, "VendorClass"}, {21, "DRNotice"}, {22, "CapabilityMaskNotice"}, {23, "BootManagement"}, {24, "IsLinkRoundTripLatency"}, {25, "ClientRegistration"} }; char *comma = ""; int commalen = 0; int i; char *ptr = pst->pcap; uint32_t bsiz = sizeof(pst->pcap); int pcap = mad_get_field(pst->portinfo, 0, IB_PORT_CAPMASK_F); *ptr ='\0'; for (i=0; i < ARRAYSZ(capdest); i++) { if (pcap & (1<pcap); } /* This function can be called multiple times during single * fetch operation so take care to avoid side effects, for example, * if the "previous" value of the counter is above the high * watermark and must be reset, don't change the previous value here - * it could lead to double counting on the second call */ static uint64_t ib_update_perfcnt (port_state_t *pst, int udata, int *rv ) { mad_cnt_desc_t * md = mad_cnt_descriptors + udata; mad_counter_t *mcnt = pst->madcnts + udata; if (!mcnt->isvalid) { uint32_t delta; mcnt->cur = mad_get_field(pst->perfdata, 0, md->madid); mcnt->isvalid = 1; /* If someone resets the counters, then don't update the the * accumulated value because we don't know what was the value before it * was reset. And if the difference between current and previous value * is larger then the high watermark then don't update the accumulated * value either - current value could've pegged because we didn't * fetch often enough */ delta = mcnt->cur - mcnt->prev; if ((mcnt->cur < mcnt->prev) || (delta > md->hiwat)) { mcnt->isvalid = PM_ERR_VALUE; } else { mcnt->accum += delta; } if (mcnt->cur > md->hiwat) { pst->resetmask |= md->resetmask; } } *rv = mcnt->isvalid; return (mcnt->accum * md->multiplier); } static int ib_linkwidth (port_state_t *pst) { int w = mad_get_field(pst->portinfo, 0, IB_PORT_LINK_WIDTH_ACTIVE_F); switch (w) { case 1: return (1); case 2: return (4); case 4: return (8); case 8: return (12); } return (0); } int ib_fetch_val(pmdaMetric *mdesc, unsigned int inst, pmAtomValue *atom) { __pmInDom_int *ind = (__pmInDom_int *)&(mdesc->m_desc.indom); __pmID_int *idp = (__pmID_int *)&(mdesc->m_desc.pmid); int rv = 1; port_state_t *pst = NULL; hca_state_t *hca = NULL; int umask = 1<cluster; int udata = (int)((__psint_t)mdesc->m_user); void *closure = NULL; int st; char *name = NULL; if (inst == PM_INDOM_NULL) { return PM_ERR_INST; } if (ind->serial != IB_CNT_INDOM) { if ((st = pmdaCacheLookup (mdesc->m_desc.indom, inst, &name, &closure)) != PMDA_CACHE_ACTIVE) { if (st == PMDA_CACHE_INACTIVE) st = PM_ERR_INST; __pmNotifyErr (LOG_ERR, "Cannot find instance %d in indom %s: %s\n", inst, pmInDomStr(mdesc->m_desc.indom), pmErrStr(st)); return st; } } /* If fetching from HCA indom, then no refreshing is necessary for the * lifetime of a pmda. Ports could change state, so some update could be * necessary */ switch (ind->serial) { case IB_PORT_INDOM: if (idp->cluster > 3) { return PM_ERR_INST; } pst = closure; if (pst->needupdate & umask) { local_port_t *lp = pst->lport; /* A port state is considered up-to date regardless of any * errors which could happen later - this is used to implement * one shot updates */ pst->needupdate ^= umask; /* The state of the local port used for queries is checked * once per fetch request */ if (lp->needsupdate) { umad_release_port(lp->ump); if (umad_get_port(lp->ca_name, lp->portnum, lp->ump) != 0) { __pmNotifyErr (LOG_ERR, "Cannot get state of the port %s:%d\n", lp->ump->ca_name, lp->ump->portnum); return 0; } lp->needsupdate = 0; } /* If the port which we're supposed to use to query the data * does not have a LID then we don't even try to query anything, * is it going to fail anyway */ if (lp->ump->base_lid == 0) { return 0; /* No values available */ } if (pst->portid.lid < 0) { ib_portid_t sm = {0}; sm.lid = lp->ump->sm_lid; memset (&pst->portid, 0, sizeof (pst->portid)); if (ib_resolve_guid_via (&pst->portid, &pst->guid, &sm, pst->timeout, lp->hndl) < 0) { __pmNotifyErr (LOG_ERR, "Cannot resolve GUID 0x%llx for %s " "via %s:%d\n", (unsigned long long)pst->guid, name, lp->ump->ca_name, lp->ump->portnum); pst->portid.lid = -1; return 0; } } switch (idp->cluster) { case 0: /* port attributes */ memset (pst->portinfo, 0, sizeof(pst->portinfo)); if (!smp_query_via (pst->portinfo, &pst->portid, IB_ATTR_PORT_INFO, 0, pst->timeout, lp->hndl)) { __pmNotifyErr (LOG_ERR, "Cannot get port info for %s via %s:%d\n", name, lp->ump->ca_name, lp->ump->portnum); return 0; } break; case 1: /* performance counters */ /* I thought about updating all accumulating counters * in case port_performance_query() succeeds but * decided not to do it right now - updating all counters * could mean more resets even in case when nobody is * actually looking at the particular counter and I'm * trying to minimize resets. */ memset (pst->perfdata, 0, sizeof (pst->perfdata)); if (!port_perf_query(pst->perfdata, &pst->portid, pst->remport, pst->timeout, lp->hndl)) { __pmNotifyErr (LOG_ERR, "Cannot get performance counters for %s " "via %s:%d\n", name, lp->ump->ca_name, lp->ump->portnum); return 0; } break; case 3: { /* switch performance counters */ // To find the LID of the switch the HCA is connected to, // send an SMP on the directed route 0,1 and ask the port // to identify itself. ib_portid_t sw_port_id = { .drpath = { .cnt = 1, .p = { 0, 1, }, }, }; char sw_info[64]; memset(sw_info, 0, sizeof(sw_info)); if (!smp_query_via(sw_info, &sw_port_id, IB_ATTR_PORT_INFO, 0, pst->timeout, lp->hndl)) { __pmNotifyErr(LOG_ERR, "Cannot get switch port info for %s via %s:%d.\n", name, lp->ump->ca_name, lp->ump->portnum); return 0; } int sw_lid, sw_port; mad_decode_field(sw_info, IB_PORT_LID_F, &sw_lid); mad_decode_field(sw_info, IB_PORT_LOCAL_PORT_F, &sw_port); sw_port_id.lid = sw_lid; // Query for the switch's performance counters' values. memset(pst->switchperfdata, 0, sizeof(pst->switchperfdata)); if (!pma_query_via(pst->switchperfdata, &sw_port_id, sw_port, pst->timeout, IB_GSI_PORT_COUNTERS_EXT, lp->hndl)) { __pmNotifyErr(LOG_ERR, "Cannot query performance counters of switch LID %d, port %d.\n", sw_lid, sw_port); return 0; } break; } } pst->validstate ^= umask; } else if (!(pst->validstate & umask)) { /* We've hit an error on the previous update - continue * reporting no data for this instance */ return (0); } break; case IB_HCA_INDOM: hca = closure; break; case IB_CNT_INDOM: break; default: return (PM_ERR_INST); } switch (idp->cluster) { case 0: /* UMAD data - hca name, fw_version, number of ports etc */ switch(idp->item) { case METRIC_ib_hca_hw_ver: atom->cp = hca->ca.hw_ver; break; case METRIC_ib_hca_system_guid: atom->ull = hca->ca.system_guid; break; case METRIC_ib_hca_node_guid: atom->ull = hca->ca.node_guid; break; case METRIC_ib_hca_numports: atom->l = hca->ca.numports; break; case METRIC_ib_hca_type: if (hca->ca.node_type < ARRAYSZ(node_types)) { atom->cp = node_types[hca->ca.node_type]; } else { __pmNotifyErr (LOG_INFO, "Unknown node type %d for %s\n", hca->ca.node_type, hca->ca.ca_name); atom->cp = "Unknown"; } break; case METRIC_ib_hca_fw_ver: atom->cp = hca->ca.fw_ver; break; case METRIC_ib_port_gid_prefix: atom->ull = mad_get_field64(pst->portinfo, 0, IB_PORT_GID_PREFIX_F); break; case METRIC_ib_port_rate: atom->l = ib_linkwidth(pst) * (5 * mad_get_field (pst->portinfo, 0, IB_PORT_LINK_SPEED_ACTIVE_F))/2; break; case METRIC_ib_port_lid: atom->l = pst->portid.lid; break; case METRIC_ib_port_capabilities: atom->cp = ib_portcap_to_string(pst); break; case METRIC_ib_port_phystate: st = mad_get_field (pst->portinfo, 0, IB_PORT_PHYS_STATE_F); if (st < ARRAYSZ(port_phystates)) { atom->cp = port_phystates[st]; } else { __pmNotifyErr (LOG_INFO, "Unknown port PHY state %d on %s\n", st, name); atom->cp = "Unknown"; } break; case METRIC_ib_port_guid: atom->ull = pst->guid; break; case METRIC_ib_hca_ca_type: atom->cp = hca->ca.ca_type; break; case METRIC_ib_port_state: st = mad_get_field (pst->portinfo, 0, IB_PORT_STATE_F); if (st < ARRAYSZ(port_states)) { atom->cp = port_states[st]; } else { __pmNotifyErr (LOG_INFO, "Unknown port state %d on %s\n", st, name); atom->cp = "Unknown"; } break; case METRIC_ib_port_linkspeed: switch ((st = mad_get_field(pst->portinfo, 0, IB_PORT_LINK_SPEED_ACTIVE_F))) { case 1: atom->cp = "2.5 Gpbs"; break; case 2: atom->cp = "5.0 Gbps"; break; case 4: atom->cp = "10.0 Gbps"; break; default: __pmNotifyErr (LOG_INFO, "Unknown link speed %d on %s\n", st, name); atom->cp = "Unknown"; break; } break; case METRIC_ib_port_linkwidth: atom->l = ib_linkwidth(pst); break; default: rv = PM_ERR_PMID; break; } break; case 1: /* Fetch values from mad rpc response */ if ((udata >= 0) && (udata < ARRAYSZ(mad_cnt_descriptors))) { /* If a metric has udata set then it's one of the "direct" * metrics - just update the accumulated counter * and stuff its value into pmAtomValue */ switch (mdesc->m_desc.type) { case PM_TYPE_32: atom->l = (int32_t)ib_update_perfcnt (pst, udata, &rv); break; case PM_TYPE_64: atom->ll = ib_update_perfcnt (pst, udata, &rv); break; default: rv = PM_ERR_INST; break; } } else { int rv1=0, rv2=0; /* Synthetic metrics */ switch (idp->item) { case METRIC_ib_port_total_bytes: atom->ll = ib_update_perfcnt (pst, IBPMDA_XMT_BYTES, &rv1) + ib_update_perfcnt (pst, IBPMDA_RCV_BYTES, &rv2); break; case METRIC_ib_port_total_packets: atom->ll = ib_update_perfcnt (pst, IBPMDA_XMT_PKTS, &rv1) + ib_update_perfcnt (pst, IBPMDA_RCV_PKTS, &rv2); break; case METRIC_ib_port_total_errors_drop: atom->l = (int)(ib_update_perfcnt (pst, IBPMDA_ERR_SWITCH_REL, &rv1) + ib_update_perfcnt (pst, IBPMDA_XMT_DISCARDS, &rv2)); break; case METRIC_ib_port_total_errors_filter: atom->l = (int)(ib_update_perfcnt (pst, IBPMDA_ERR_XMTCONSTR, &rv1) + ib_update_perfcnt (pst, IBPMDA_ERR_RCVCONSTR, &rv2)); break; default: rv = PM_ERR_PMID; break; } if ((rv1 < 0) || (rv2 < 0)) { rv = (rv1 < 0) ? rv1 : rv2; } } break; case 2: /* Control structures */ switch (idp->item) { case METRIC_ib_control_query_timeout: atom->l = pst->timeout; break; case METRIC_ib_control_hiwat: if (inst < ARRAYSZ(mad_cnt_descriptors)) { atom->ul = mad_cnt_descriptors[inst].hiwat; } else { rv = PM_ERR_INST; } break; default: rv = PM_ERR_PMID; break; } break; case 3: /* Fetch values from switch response */ // (The values are "swapped" because what the port receives is what the // switch sends, and vice versa.) switch (idp->item) { case METRIC_ib_port_switch_in_bytes: { mad_decode_field(pst->switchperfdata, IB_PC_EXT_XMT_BYTES_F, &atom->ull); atom->ull *= 4; // TODO: programmatically determine link width break; } case METRIC_ib_port_switch_in_packets: { mad_decode_field(pst->switchperfdata, IB_PC_EXT_XMT_PKTS_F, &atom->ull); break; } case METRIC_ib_port_switch_out_bytes: { mad_decode_field(pst->switchperfdata, IB_PC_EXT_RCV_BYTES_F, &atom->ull); atom->ull *= 4; // TODO: programmatically determine link width break; } case METRIC_ib_port_switch_out_packets: { mad_decode_field(pst->switchperfdata, IB_PC_EXT_RCV_PKTS_F, &atom->ull); break; } case METRIC_ib_port_switch_total_bytes: { uint64_t sw_rx_bytes, sw_tx_bytes; int ib_lw; mad_decode_field(pst->switchperfdata, IB_PC_EXT_RCV_BYTES_F, &sw_rx_bytes); mad_decode_field(pst->switchperfdata, IB_PC_EXT_XMT_BYTES_F, &sw_tx_bytes); ib_lw = 4; // TODO: programmatically determine link width atom->ull = (sw_rx_bytes * ib_lw) + (sw_tx_bytes * ib_lw); break; } case METRIC_ib_port_switch_total_packets: { uint64_t sw_rx_packets, sw_tx_packets; mad_decode_field(pst->switchperfdata, IB_PC_EXT_RCV_PKTS_F, &sw_rx_packets); mad_decode_field(pst->switchperfdata, IB_PC_EXT_XMT_PKTS_F, &sw_tx_packets); atom->ull = sw_rx_packets + sw_tx_packets; break; } default: { rv = PM_ERR_PMID; break; } } break; default: rv = PM_ERR_PMID; break; } return rv; } /* Walk the instances and arm needupdate flag in each instance's * state. The actuall updating is done in the fetch function */ void ib_rearm_for_update(void *state) { port_state_t *pst = state; pst->lport->needsupdate = 1; pst->needupdate = 11; /* 0x1 for portinfo, 0x2 for perfdata, 0x8 for switchperfdata */ pst->validstate = 4; /* 0x4 for timeout which is always valid */ } void ib_reset_perfcounters (void *state) { int m; port_state_t *pst = state; if (pst->resetmask && (pst->portid.lid != 0)) { memset (pst->perfdata, 0, sizeof (pst->perfdata)); if (port_perf_reset(pst->perfdata, &pst->portid, pst->remport, pst->resetmask, pst->timeout, pst->lport->hndl)) { int j; for (j=0; j < ARRAYSZ(mad_cnt_descriptors); j++) { if (pst->resetmask & (1<madcnts[j].prev = 0; pst->madcnts[j].isvalid = 0; } } } } pst->resetmask = 0; for (m=0; m < ARRAYSZ(mad_cnt_descriptors); m++) { if (pst->madcnts[m].isvalid) { pst->madcnts[m].prev = pst->madcnts[m].cur; pst->madcnts[m].isvalid = 0; } } } int ib_store(pmResult *result, pmdaExt *pmda) { int i; for (i = 0; i < result->numpmid ; i++) { pmValueSet *vs = result->vset[i]; __pmID_int *pmidp = (__pmID_int *)&vs->pmid; int inst; if (pmidp->cluster != 2) { return (-EACCES); } if (vs->valfmt != PM_VAL_INSITU) { return (-EINVAL); } for (inst=0; inst < vs->numval; inst++) { int id = vs->vlist[inst].inst; void *closure = NULL; switch (pmidp->item) { case METRIC_ib_control_query_timeout: if (pmdaCacheLookup (pmda->e_indoms[IB_PORT_INDOM].it_indom, id, NULL, &closure) == PMDA_CACHE_ACTIVE) { port_state_t *pst = closure; pst->timeout = vs->vlist[inst].value.lval; } else { return (PM_ERR_INST); } break; case METRIC_ib_control_hiwat: if ((id < 0) || (id > pmda->e_indoms[IB_CNT_INDOM].it_numinst)) { return (PM_ERR_INST); } mad_cnt_descriptors[id].hiwat = (uint32_t)vs->vlist[inst].value.lval; break; default: return (-EACCES); } } } return 0; } --------------080207010901000808030705 Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0"; name="ibpmda.h" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="ibpmda.h" /* * Copyright (C) 2013 Red Hat. * Copyright (C) 2007,2008 Silicon Graphics, Inc. All Rights Reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 2 of the License, or (at your * option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * for more details. */ #ifndef _IBPMDA_H #define _IBPMDA_H #include #include #include #include "domain.h" #ifdef HAVE_PORT_PERFORMANCE_QUERY_VIA #define port_perf_query(data, dst, port, timeout, srcport) \ port_performance_query_via(data, dst, port, timeout, srcport) #define port_perf_reset(data, dst, port, mask, timeout, srcport) \ port_performance_reset_via(data, dst, port, mask, timeout, srcport) #else #define port_perf_query(data, dst, port, timeout, srcport) \ pma_query_via(data, dst, port, timeout, IB_GSI_PORT_COUNTERS, srcport) #define port_perf_reset(data, dst, port, mask, timeout, srcport) \ performance_reset_via(data, dst, port, mask, timeout, IB_GSI_PORT_COUNTERS, srcport) #endif void ibpmda_init (const char *configpath, int, pmdaInterface *); int ib_fetch_val(pmdaMetric *, unsigned int, pmAtomValue *); int ib_load_config(const char *, int, pmdaIndom *, unsigned int); void ib_rearm_for_update(void *); void ib_reset_perfcounters (void *); int ib_store(pmResult *, pmdaExt *); #define IB_HCA_INDOM 0 #define IB_PORT_INDOM 1 #define IB_CNT_INDOM 2 #define ARRAYSZ(a) (sizeof(a)/sizeof(a[0])) #define METRIC_ib_hca_type 0 #define METRIC_ib_hca_ca_type 1 #define METRIC_ib_hca_numports 2 #define METRIC_ib_hca_fw_ver 3 #define METRIC_ib_hca_hw_ver 4 #define METRIC_ib_hca_node_guid 5 #define METRIC_ib_hca_system_guid 6 #define METRIC_ib_port_guid 7 #define METRIC_ib_port_gid_prefix 8 #define METRIC_ib_port_lid 9 #define METRIC_ib_port_state 10 #define METRIC_ib_port_phystate 11 #define METRIC_ib_port_rate 12 #define METRIC_ib_port_capabilities 13 #define METRIC_ib_port_linkspeed 14 #define METRIC_ib_port_linkwidth 15 /* Per-port performance counters, cluster #1 */ #define METRIC_ib_port_in_bytes 0 #define METRIC_ib_port_in_packets 1 #define METRIC_ib_port_out_bytes 2 #define METRIC_ib_port_out_packets 3 #define METRIC_ib_port_in_errors_drop 4 #define METRIC_ib_port_out_errors_drop 5 #define METRIC_ib_port_total_bytes 6 #define METRIC_ib_port_total_packets 7 #define METRIC_ib_port_total_errors_drop 8 #define METRIC_ib_port_in_errors_filter 9 #define METRIC_ib_port_in_errors_local 10 #define METRIC_ib_port_in_errors_remote 11 #define METRIC_ib_port_out_errors_filter 12 #define METRIC_ib_port_total_errors_filter 13 #define METRIC_ib_port_total_errors_link 14 #define METRIC_ib_port_total_errors_recover 15 #define METRIC_ib_port_total_errors_integrity 16 #define METRIC_ib_port_total_errors_vl15 17 #define METRIC_ib_port_total_errors_overrun 18 #define METRIC_ib_port_total_errors_symbol 19 /* Control metrics */ #define METRIC_ib_control_query_timeout 0 #define METRIC_ib_control_hiwat 1 /* Per-port switch performance counters, cluster #3 */ #define METRIC_ib_port_switch_in_bytes 0 #define METRIC_ib_port_switch_in_packets 1 #define METRIC_ib_port_switch_out_bytes 2 #define METRIC_ib_port_switch_out_packets 3 #define METRIC_ib_port_switch_total_bytes 4 #define METRIC_ib_port_switch_total_packets 5 enum ibpmd_cndid { IBPMDA_ERR_SYM = 0, IBPMDA_LINK_RECOVERS, IBPMDA_LINK_DOWNED, IBPMDA_ERR_RCV, IBPMDA_ERR_PHYSRCV, IBPMDA_ERR_SWITCH_REL, IBPMDA_XMT_DISCARDS, IBPMDA_ERR_XMTCONSTR, IBPMDA_ERR_RCVCONSTR, IBPMDA_ERR_LOCALINTEG, IBPMDA_ERR_EXCESS_OVR, IBPMDA_VL15_DROPPED, IBPMDA_XMT_BYTES, IBPMDA_RCV_BYTES, IBPMDA_XMT_PKTS, IBPMDA_RCV_PKTS }; #endif /* _IBPMDA_H */ --------------080207010901000808030705 Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0"; name="pmda.c" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="pmda.c" /* * Copyright (C) 2013 Red Hat. * Copyright (C) 2007,2008 Silicon Graphics, Inc. All Rights Reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 2 of the License, or (at your * option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * for more details. */ #include "ibpmda.h" /* * Metric Table */ pmdaMetric metrictab[] = { /* infiniband.hca.type */ { NULL, {PMDA_PMID(0,METRIC_ib_hca_type), PM_TYPE_STRING, IB_HCA_INDOM, PM_SEM_DISCRETE, PMDA_PMUNITS(0,0,0,0,0,0) }, }, /* infiniband.hca.ca_type */ { NULL, {PMDA_PMID(0,METRIC_ib_hca_ca_type), PM_TYPE_STRING, IB_HCA_INDOM, PM_SEM_DISCRETE, PMDA_PMUNITS(0,0,0,0,0,0) }, }, /* infiniband.hca.numports */ { NULL, {PMDA_PMID(0,METRIC_ib_hca_numports), PM_TYPE_32, IB_HCA_INDOM, PM_SEM_DISCRETE, PMDA_PMUNITS(0,0,0,0,0,0) }, }, /* infiniband.hca.fw_ver */ { NULL, {PMDA_PMID(0,METRIC_ib_hca_fw_ver), PM_TYPE_STRING, IB_HCA_INDOM, PM_SEM_DISCRETE, PMDA_PMUNITS(0,0,0,0,0,0) }, }, /* infiniband.hca.hw_ver */ { NULL, {PMDA_PMID(0,METRIC_ib_hca_hw_ver), PM_TYPE_STRING, IB_HCA_INDOM, PM_SEM_DISCRETE, PMDA_PMUNITS(0,0,0,0,0,0) }, }, /* infiniband.hca.node_guid */ { NULL, {PMDA_PMID(0,METRIC_ib_hca_node_guid), PM_TYPE_U64, IB_HCA_INDOM, PM_SEM_DISCRETE, PMDA_PMUNITS(0,0,0,0,0,0) }, }, /* infiniband.hca.system_guid */ { NULL, {PMDA_PMID(0,METRIC_ib_hca_system_guid), PM_TYPE_U64, IB_HCA_INDOM, PM_SEM_DISCRETE, PMDA_PMUNITS(0,0,0,0,0,0) }, }, /* infiniband.port.guid */ { NULL, {PMDA_PMID(0,METRIC_ib_port_guid), PM_TYPE_U64, IB_PORT_INDOM, PM_SEM_DISCRETE, PMDA_PMUNITS(0,0,0,0,0,0) }, }, /* infiniband.port.gid_prefix */ { NULL, {PMDA_PMID(0,METRIC_ib_port_gid_prefix), PM_TYPE_U64, IB_PORT_INDOM, PM_SEM_DISCRETE, PMDA_PMUNITS(0,0,0,0,0,0) }, }, /* infiniband.port.lid */ { NULL, {PMDA_PMID(0,METRIC_ib_port_lid), PM_TYPE_32, IB_PORT_INDOM, PM_SEM_DISCRETE, PMDA_PMUNITS(0,0,0,0,0,0) }, }, /* infiniband.port.state */ { NULL, {PMDA_PMID(0,METRIC_ib_port_state), PM_TYPE_STRING, IB_PORT_INDOM, PM_SEM_DISCRETE, PMDA_PMUNITS(0,0,0,0,0,0) }, }, /* infiniband.port.phystate */ { NULL, {PMDA_PMID(0,METRIC_ib_port_phystate), PM_TYPE_STRING, IB_PORT_INDOM, PM_SEM_DISCRETE, PMDA_PMUNITS(0,0,0,0,0,0) }, }, /* infiniband.port.rate */ { NULL, {PMDA_PMID(0,METRIC_ib_port_rate), PM_TYPE_32, IB_PORT_INDOM, PM_SEM_DISCRETE, PMDA_PMUNITS(0,0,0,0,0,0) }, }, /* infiniband.port.capabilities */ { NULL, {PMDA_PMID(0,METRIC_ib_port_capabilities), PM_TYPE_STRING, IB_PORT_INDOM, PM_SEM_DISCRETE, PMDA_PMUNITS(0,0,0,0,0,0) }, }, /* infiniband.port.linkspeed */ { NULL, {PMDA_PMID(0,METRIC_ib_port_linkspeed), PM_TYPE_STRING, IB_PORT_INDOM, PM_SEM_DISCRETE, PMDA_PMUNITS(0,0,0,0,0,0) }, }, /* infiniband.port.linkwidth */ { NULL, {PMDA_PMID(0,METRIC_ib_port_linkwidth), PM_TYPE_32, IB_PORT_INDOM, PM_SEM_DISCRETE, PMDA_PMUNITS(0,0,0,0,0,0) }, }, /* infiniband.port.in.bytes */ { (void *)IBPMDA_RCV_BYTES, {PMDA_PMID(1,METRIC_ib_port_in_bytes), PM_TYPE_64, IB_PORT_INDOM, PM_SEM_COUNTER, PMDA_PMUNITS(1,0,0,PM_SPACE_BYTE,0,0) }, }, /* infiniband.port.in.packets */ { (void *)IBPMDA_RCV_PKTS, {PMDA_PMID(1,METRIC_ib_port_in_packets), PM_TYPE_64, IB_PORT_INDOM, PM_SEM_COUNTER, PMDA_PMUNITS(0,0,1,0,0,0) }, }, /* infiniband.port.in.errors.drop */ { (void *)IBPMDA_ERR_SWITCH_REL, {PMDA_PMID(1,METRIC_ib_port_in_errors_drop), PM_TYPE_32, IB_PORT_INDOM, PM_SEM_COUNTER, PMDA_PMUNITS(0,0,1,0,0,0) } }, /* infiniband.port.in.errors.filter */ { (void *)IBPMDA_ERR_RCVCONSTR, {PMDA_PMID(1,METRIC_ib_port_in_errors_filter), PM_TYPE_32, IB_PORT_INDOM, PM_SEM_COUNTER, PMDA_PMUNITS(0,0,1,0,0,0) } }, /* infiniband.port.in.errors.local */ { (void *)IBPMDA_ERR_RCV, {PMDA_PMID(1,METRIC_ib_port_in_errors_local), PM_TYPE_32, IB_PORT_INDOM, PM_SEM_COUNTER, PMDA_PMUNITS(0,0,1,0,0,0) } }, /* infiniband.port.in.errors.filter */ { (void *)IBPMDA_ERR_PHYSRCV, {PMDA_PMID(1,METRIC_ib_port_in_errors_remote), PM_TYPE_32, IB_PORT_INDOM, PM_SEM_COUNTER, PMDA_PMUNITS(0,0,1,0,0,0) } }, /* infiniband.port.out.bytes */ { (void *)IBPMDA_XMT_BYTES, {PMDA_PMID(1,METRIC_ib_port_out_bytes), PM_TYPE_64, IB_PORT_INDOM, PM_SEM_COUNTER, PMDA_PMUNITS(1,0,0,PM_SPACE_BYTE,0,0) }, }, /* infiniband.port.out.packets */ {(void *)IBPMDA_XMT_PKTS, {PMDA_PMID(1,METRIC_ib_port_out_packets), PM_TYPE_64, IB_PORT_INDOM, PM_SEM_COUNTER, PMDA_PMUNITS(0,0,1,0,0,0) }, }, /* infiniband.port.out.errors.drop */ { (void *)IBPMDA_XMT_DISCARDS, {PMDA_PMID(1,METRIC_ib_port_out_errors_drop), PM_TYPE_32, IB_PORT_INDOM, PM_SEM_COUNTER, PMDA_PMUNITS(0,0,1,0,0,0) } }, /* infiniband.port.out.errors.filter */ { (void *)IBPMDA_ERR_XMTCONSTR, {PMDA_PMID(1,METRIC_ib_port_out_errors_filter), PM_TYPE_32, IB_PORT_INDOM, PM_SEM_COUNTER, PMDA_PMUNITS(0,0,1,0,0,0) } }, /* infiniband.port.total.bytes */ { (void *)-1, {PMDA_PMID(1,METRIC_ib_port_total_bytes), PM_TYPE_64, IB_PORT_INDOM, PM_SEM_COUNTER, PMDA_PMUNITS(1,0,0,PM_SPACE_BYTE,0,0) } }, /* infiniband.port.total.packets */ { (void *)-1, {PMDA_PMID(1,METRIC_ib_port_total_packets), PM_TYPE_64, IB_PORT_INDOM, PM_SEM_COUNTER, PMDA_PMUNITS(0,0,1,0,0,0) } }, /* infiniband.port.total.errors.drop */ { (void *)-1, {PMDA_PMID(1,METRIC_ib_port_total_errors_drop), PM_TYPE_32, IB_PORT_INDOM, PM_SEM_COUNTER, PMDA_PMUNITS(0,0,1,0,0,0) } }, /* infiniband.port.total.errors.filter */ { (void *)-1, {PMDA_PMID(1,METRIC_ib_port_total_errors_filter), PM_TYPE_32, IB_PORT_INDOM, PM_SEM_COUNTER, PMDA_PMUNITS(0,0,1,0,0,0) } }, /* infiniband.port.total.errors.link */ { (void *)IBPMDA_LINK_DOWNED, {PMDA_PMID(1,METRIC_ib_port_total_errors_link), PM_TYPE_32, IB_PORT_INDOM, PM_SEM_COUNTER, PMDA_PMUNITS(0,0,1,0,0,0) } }, /* infiniband.port.total.errors.recover */ { (void *)IBPMDA_LINK_RECOVERS, {PMDA_PMID(1,METRIC_ib_port_total_errors_recover), PM_TYPE_32, IB_PORT_INDOM, PM_SEM_COUNTER, PMDA_PMUNITS(0,0,1,0,0,0) } }, /* infiniband.port.total.errors.integrity */ { (void *)IBPMDA_ERR_LOCALINTEG, {PMDA_PMID(1,METRIC_ib_port_total_errors_integrity), PM_TYPE_32, IB_PORT_INDOM, PM_SEM_COUNTER, PMDA_PMUNITS(0,0,1,0,0,0) } }, /* infiniband.port.total.errors.vl15 */ { (void *)IBPMDA_VL15_DROPPED, {PMDA_PMID(1,METRIC_ib_port_total_errors_vl15), PM_TYPE_32, IB_PORT_INDOM, PM_SEM_COUNTER, PMDA_PMUNITS(0,0,1,0,0,0) } }, /* infiniband.port.total.errors.overrun */ { (void *)IBPMDA_ERR_EXCESS_OVR, {PMDA_PMID(1,METRIC_ib_port_total_errors_overrun), PM_TYPE_32, IB_PORT_INDOM, PM_SEM_COUNTER, PMDA_PMUNITS(0,0,1,0,0,0) } }, /* infiniband.port.total.errors.symbol */ { (void *)IBPMDA_ERR_SYM, {PMDA_PMID(1,METRIC_ib_port_total_errors_symbol), PM_TYPE_32, IB_PORT_INDOM, PM_SEM_COUNTER, PMDA_PMUNITS(0,0,1,0,0,0) } }, /* infiniband.control.query_timeout */ { NULL, {PMDA_PMID(2,METRIC_ib_control_query_timeout), PM_TYPE_32, IB_PORT_INDOM, PM_SEM_DISCRETE, PMDA_PMUNITS(0,0,0,0,0,0) } }, /* infiniband.control.hiwat */ { NULL, {PMDA_PMID(2,METRIC_ib_control_hiwat), PM_TYPE_U32, IB_CNT_INDOM, PM_SEM_DISCRETE, PMDA_PMUNITS(0,0,0,0,0,0) } }, /* infiniband.port.switch.in.bytes */ { NULL, {PMDA_PMID(3,METRIC_ib_port_switch_in_bytes), PM_TYPE_U64, IB_PORT_INDOM, PM_SEM_COUNTER, PMDA_PMUNITS(1,0,0,PM_SPACE_BYTE,0,0) } }, /* infiniband.port.switch.in.packets */ { NULL, {PMDA_PMID(3,METRIC_ib_port_switch_in_packets), PM_TYPE_U64, IB_PORT_INDOM, PM_SEM_COUNTER, PMDA_PMUNITS(0,0,1,0,0,0) } }, /* infiniband.port.switch.out.bytes */ { NULL, {PMDA_PMID(3,METRIC_ib_port_switch_out_bytes), PM_TYPE_U64, IB_PORT_INDOM, PM_SEM_COUNTER, PMDA_PMUNITS(1,0,0,PM_SPACE_BYTE,0,0) } }, /* infiniband.port.switch.out.packets */ { NULL, {PMDA_PMID(3,METRIC_ib_port_switch_out_packets), PM_TYPE_U64, IB_PORT_INDOM, PM_SEM_COUNTER, PMDA_PMUNITS(0,0,1,0,0,0) } }, /* infiniband.port.switch.total.bytes */ { NULL, {PMDA_PMID(3,METRIC_ib_port_switch_total_bytes), PM_TYPE_U64, IB_PORT_INDOM, PM_SEM_COUNTER, PMDA_PMUNITS(1,0,0,PM_SPACE_BYTE,0,0) } }, /* infiniband.port.switch.total.packets */ { NULL, {PMDA_PMID(3,METRIC_ib_port_switch_total_packets), PM_TYPE_U64, IB_PORT_INDOM, PM_SEM_COUNTER, PMDA_PMUNITS(0,0,1,0,0,0) } }, }; pmdaIndom indomtab[] = { { IB_HCA_INDOM, 0, NULL }, { IB_PORT_INDOM, 0, NULL }, { IB_CNT_INDOM, 0, NULL }, }; static void foreach_inst(pmInDom indom, void (*cb)(void *state)) { int i; pmdaCacheOp (indom, PMDA_CACHE_WALK_REWIND); while ((i = pmdaCacheOp (indom, PMDA_CACHE_WALK_NEXT)) >= 0) { void *state = NULL; if (pmdaCacheLookup (indom, i, NULL, &state) != PMDA_CACHE_ACTIVE) { abort(); } cb (state); } } int ib_fetch(int numpmid, pmID pmidlist[], pmResult **resp, pmdaExt *pmda) { int rv; foreach_inst (indomtab[IB_PORT_INDOM].it_indom, ib_rearm_for_update); rv = pmdaFetch (numpmid, pmidlist, resp, pmda); foreach_inst (indomtab[IB_PORT_INDOM].it_indom, ib_reset_perfcounters); return (rv); } void ibpmda_init(const char *confpath, int writeconf, pmdaInterface *dp) { char defconf[MAXPATHLEN]; int sep = __pmPathSeparator(); int i; if (dp->status != 0) return; if (confpath == NULL) { snprintf(defconf, sizeof(defconf), "%s%c" "infiniband" "%c" "config", pmGetConfig("PCP_PMDAS_DIR"), sep, sep); confpath = defconf; } for (i=0; i < ARRAYSZ(indomtab); i++) { __pmindom_int(&indomtab[i].it_indom)->domain = dp->domain; if (IB_CNT_INDOM != __pmindom_int(&indomtab[i].it_indom)->serial) { pmdaCacheOp (indomtab[i].it_indom, PMDA_CACHE_LOAD); } } if ((dp->status = ib_load_config(confpath, writeconf, indomtab, ARRAYSZ(indomtab)))) return; for (i=0; i < ARRAYSZ(indomtab); i++) { if (IB_CNT_INDOM != __pmindom_int(&indomtab[i].it_indom)->serial) { pmdaCacheOp (indomtab[i].it_indom, PMDA_CACHE_SAVE); } } dp->version.two.fetch = ib_fetch; dp->version.two.store = ib_store; pmdaSetFetchCallBack(dp, ib_fetch_val); pmdaInit(dp, indomtab, ARRAYSZ(indomtab), metrictab, ARRAYSZ(metrictab)); } static void usage(void) { fprintf(stderr, "Usage: %s [options]\n\n", pmProgname); fputs("Options:\n" " -d domain use domain (numeric) for metrics domain of PMDA\n" " -l logfile write log into logfile rather than using default log name\n" " -c path to configuration file\n" " -w write the basic configuration file\n", stderr); exit(1); } int main(int argc, char **argv) { int err = 0; int sep = __pmPathSeparator(); pmdaInterface dispatch; char helppath[MAXPATHLEN]; char *confpath = NULL; int opt; int writeconf = 0; __pmSetProgname(argv[0]); snprintf(helppath, sizeof(helppath), "%s%c" "infiniband" "%c" "help", pmGetConfig("PCP_PMDAS_DIR"), sep, sep); pmdaDaemon(&dispatch, PMDA_INTERFACE_3, pmProgname, IB, "infiniband.log", helppath); while ((opt = pmdaGetOpt(argc, argv, "D:c:d:l:w?", &dispatch, &err)) != EOF) { switch (opt) { case 'c': confpath = optarg; break; case 'w': writeconf = 1; break; default: err++; } } if (err) { usage(); } if (!writeconf) { /* If writeconf is specified, then errors should go to stdout * since the PMDA daemon will exit immediately after writing * out the default config file */ pmdaOpenLog(&dispatch); } ibpmda_init(confpath, writeconf, &dispatch); pmdaConnect(&dispatch); pmdaMain(&dispatch); exit(0); } --------------080207010901000808030705 Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0"; name="pmns" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="pmns" infiniband { hca port control } infiniband.hca { type IB:0:0 ca_type IB:0:1 numports IB:0:2 fw_ver IB:0:3 hw_ver IB:0:4 node_guid IB:0:5 system_guid IB:0:6 } infiniband.port { guid IB:0:7 gid_prefix IB:0:8 lid IB:0:9 state IB:0:10 phystate IB:0:11 rate IB:0:12 capabilities IB:0:13 linkspeed IB:0:14 linkwidth IB:0:15 in out total switch } infiniband.port.in { bytes IB:1:0 packets IB:1:1 errors } infiniband.port.in.errors { drop IB:1:4 filter IB:1:9 local IB:1:10 remote IB:1:11 } infiniband.port.out { bytes IB:1:2 packets IB:1:3 errors } infiniband.port.out.errors { drop IB:1:5 filter IB:1:12 } infiniband.port.total { bytes IB:1:6 packets IB:1:7 errors } infiniband.port.total.errors { drop IB:1:8 filter IB:1:13 link IB:1:14 recover IB:1:15 integrity IB:1:16 vl15 IB:1:17 overrun IB:1:18 symbol IB:1:19 } infiniband.port.switch { in out total } infiniband.port.switch.in { bytes IB:3:0 packets IB:3:1 } infiniband.port.switch.out { bytes IB:3:2 packets IB:3:3 } infiniband.port.switch.total { bytes IB:3:4 packets IB:3:5 } infiniband.control { query_timeout IB:2:0 hiwat IB:2:1 } --------------080207010901000808030705-- From wcohen@redhat.com Tue Jun 24 15:35:56 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 678CD7F3F for ; Tue, 24 Jun 2014 15:35:56 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id C1B3FAC007 for ; Tue, 24 Jun 2014 13:35:55 -0700 (PDT) X-ASG-Debug-ID: 1403642151-04bdf056665b2730001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id auPGVQbWAojUmLF7 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 24 Jun 2014 13:35:51 -0700 (PDT) X-Barracuda-Envelope-From: wcohen@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s5OKZoQZ007124 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Tue, 24 Jun 2014 16:35:50 -0400 Received: from [10.13.129.207] (dhcp129-207.rdu.redhat.com [10.13.129.207]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5OKZosG029510 for ; Tue, 24 Jun 2014 16:35:50 -0400 Message-ID: <53A9E126.2040000@redhat.com> Date: Tue, 24 Jun 2014 16:35:50 -0400 From: William Cohen User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.6.0 MIME-Version: 1.0 To: pcp@oss.sgi.com Subject: Re: [pcp] PCP Network Latency PMDA References: <53A34A47.3060008@redhat.com> X-ASG-Orig-Subj: Re: [pcp] PCP Network Latency PMDA In-Reply-To: <53A34A47.3060008@redhat.com> Content-Type: multipart/mixed; boundary="------------080700060007060706010709" X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1403642151 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 This is a multi-part message in MIME format. --------------080700060007060706010709 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit On 06/19/2014 04:38 PM, William Cohen wrote: > I have been looking at a PMDA that provides information about how long > it takes for packets to make their way from userspace to the network > device and from network device to userspace. People might be > interested to know whether the network traffic has too much latency in > the kernel. The kernel tracepoints and the perf netdev-times script > [+] that allow the user to determine how long it takes for network > packets to make their way through the networking stacks. However, it > isn't appropriate using the netdev-times script for production > systems. The script provides too much detail (information on every > packet) and results in WAY too much overhead. It is not able to > process significant network traffice in real time. > > The same tracepoints are available to systemtap and a systemtap script > could provide more appropriate summary style information to pcp as a > pmda with much lower overhead. The thought is that it would probably > be sufficient to provide metrics for latency for packet send and > receive of each network device. I have some questions on implementing > the performance metric names. Thinking maybe somethingn like the > following names: > > network.interface.in.latency instance "devname" > network.interface.out.latency instance "devname" > > The value would be the average latency on the device. This would be > similar to the kernel.all.cpu.* metrics in the respect that the > latencies would be average over some window of time. Would it be > better to provide raw monotonic sums of the delays and number of > network packets in the pmda and have pcp derive the average latency > from the raw metric values? This would allow arbtrary window times to > be used by pcp. So for some time t and delta between measurements could do: > > (latency_sum[t]-latency_sum[t-delta])/(packets[t]-packets[t-delta]) > > The systemtap script could use systemtap PROCFS probes to make it to > read that information out when pcp desires it [*]. Maybe something > that echos the /proc/net/dev format (there might be more latency > fields in there to give a finer grained picture where the packet > spends its time: > > Inter-| Receive | Transmit > face | packets latency | packets latency > wlp3s0: 0 0 0 0 > lo: 1738527854 1373704 1738527854 1373704 > virbr0-nic: 0 0 0 0 > virbr0: 0 0 0 0 > em1: 87683319 105450 11920860 62401 > > Any thoughts or comments about this proposed network latency PMDA? > > -Will > > > [+] http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/tools/perf/scripts/python/netdev-times.py > [*] https://sourceware.org/systemtap/langref/Probe_points.html#SECTION00057000000000000000 > > _______________________________________________ > pcp mailing list > pcp@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/pcp > Hi All, I have been experimenting with the tracepoint for the transmit portion of networking. I have a script that tracks when a syscall queues up something for transmission (kernel.trace("net_dev_queue")). It then tracks when the object is sent to hardware (kernel.trace("net_dev_xmit")) and finally freed (kernel.trace(kernel.trace("kfree_skb") and kernel.trace.trace("consume_skb")). A user get the statistics out from /proc/systemtap/*/net_latency with the expectation this might be a way that pcp extracts data from the script. Something like: $ cat /proc/systemtap/stap_df43d0122ca9ec5271896401487121a6_9305/net_latency #dev: tx_queue_n tx_queue_avg tx_queue_sum tx_xmit_n tx_xmit_avg tx_xmit_sum tx_free_n tx tx_free_avg tx_free_sum em1: 89 3277 291671 89 3284 292340 83 3536 293549 lo: 9236 7 69453 9257 1948 18033760 140 96020 13442850 The script also currently prints out histograms on exit for debugging purposes and to give a feel what the distributions of times are, but I don't expect that would be used by pcp. The receive is a bit more complicated because of the async nature of interrupts for incoming packets and the syscall reading the data, but I think that I understand enough of that to code something similar for receives. Attached is the current linux_xmit_latency.stp script. Any comments on the current script would be appreciated. -Will --------------080700060007060706010709 Content-Type: text/plain; charset=UTF-8; name="linux_xmit_latency.stp" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="linux_xmit_latency.stp" #! /usr/bin/env stap ############################################################ # linux_xmit_latency.stp # Author: William Cohen # Porivdes information through procfs about the amount of time # spent in the various steps for sending data via network interfaces ############################################################ global sys_t, t0, device_name global tx_device, tx_queue_t, tx_netdevice_t, tx_free_t probe kernel.trace("sys_enter") { sys_t[tid()] = gettimeofday_us() } probe kernel.trace("sys_exit") { delete sys_t[tid()] } probe kernel.trace("net_dev_queue") { t = gettimeofday_us() s0 = sys_t[tid()] if (s0) { t0[$skb] = s0 dev = kernel_string($skb->dev->name) tx_device[$skb] = dev tx_queue_t[dev] <<< t - s0 device_name[dev] <<< 1 } } probe kernel.trace("net_dev_xmit") { t = gettimeofday_us() s0 = t0[$skb] if (s0) { tx_netdevice_t[tx_device[$skb]] <<< t - s0 } } probe kernel.trace("kfree_skb"), kernel.trace("consume_skb") { t = gettimeofday_us() s0 = t0[$skb] if (s0) { tx_free_t[tx_device[$skb]] <<< t - s0 delete tx_device[$skb] delete t0[$skb] } } probe procfs("net_latency").read { /* print header */ output = sprintf("#dev: tx_queue_n tx_queue_avg tx_queue_sum tx_xmit_n tx_xmit_avg tx_xmit_sum tx_free_n tx tx_free_avg tx_free_sum\n") /* write out info for each device */ foreach(d+ in device_name){ output = sprintf("%s%s: %d %d %d %d %d %d %d %d %d\n", output, d, @count(tx_queue_t[d]), @count(tx_queue_t[d]) ? @avg(tx_queue_t[d]) : 0, @count(tx_queue_t[d]) ? @sum(tx_queue_t[d]) : 0, @count(tx_netdevice_t[d]), @count(tx_netdevice_t[d]) ? @avg(tx_netdevice_t[d]) : 0, @count(tx_netdevice_t[d]) ? @sum(tx_netdevice_t[d]) : 0, @count(tx_free_t[d]), @count(tx_free_t[d]) ? @avg(tx_free_t[d]) : 0, @count(tx_free_t[d])? @sum(tx_free_t[d]) : 0 ) } $value = output } /* Following is for development purposes to show distributions in times */ probe end { printf("histogram of tx times\n") foreach ([devname+] in device_name) { if (@count(tx_queue_t[devname])) { printf("Device:%s tx_queued:%d avg:%d max:%d (microseconds)\n", devname, @count(tx_queue_t[devname]), @avg(tx_queue_t[devname]), @max(tx_queue_t[devname])) println(@hist_log(tx_queue_t[devname])) } if (@count(tx_netdevice_t[devname])) { printf("Device:%s tx_xmit:%d avg:%d max:%d (microseconds)\n", devname, @count(tx_netdevice_t[devname]), @avg(tx_netdevice_t[devname]), @max(tx_netdevice_t[devname])) println(@hist_log(tx_netdevice_t[devname])) } if (@count(tx_free_t[devname])) { printf("Device:%s tx_freed:%d avg:%d max:%d (microseconds)\n", devname, @count(tx_free_t[devname]), @avg(tx_free_t[devname]), @max(tx_free_t[devname])) println(@hist_log(tx_free_t[devname])) } } } --------------080700060007060706010709-- From lberk@redhat.com Tue Jun 24 21:43:18 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 060737F3F for ; Tue, 24 Jun 2014 21:43:18 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id E9BBB304048 for ; Tue, 24 Jun 2014 19:43:14 -0700 (PDT) X-ASG-Debug-ID: 1403664190-04cbb065368b7e0001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id KGHmmIxUzUXOyGmJ (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 24 Jun 2014 19:43:10 -0700 (PDT) X-Barracuda-Envelope-From: lberk@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s5P2h9AQ024348 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Tue, 24 Jun 2014 22:43:09 -0400 Received: from redhat.com ([10.15.16.153]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5P2h7QI015439 (version=TLSv1/SSLv3 cipher=AES128-GCM-SHA256 bits=128 verify=NO) for ; Tue, 24 Jun 2014 22:43:09 -0400 Date: Tue, 24 Jun 2014 22:43:07 -0400 From: Lukas Berk To: pcp@oss.sgi.com Subject: PCP papi PMDA Message-ID: <20140625024307.GA9275@redhat.com> X-ASG-Orig-Subj: PCP papi PMDA Reply-To: Lukas Berk MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="VbJkn9YxBvnuCH5J" Content-Disposition: inline User-Agent: Mutt/1.5.23 (2014-03-12) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.24 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1403664190 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-BRTS-Evidence: performancecopilot.org --VbJkn9YxBvnuCH5J Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Hey, As Nathan noted on the PCP developer conference call agenda[1], I've been working on a new pmda for accessing Performance API counters. The latest iteration has been pushed to the lberk/papi branch on pcpfans[2] for anybody that would like to take a look (I would greatly appreciate any feedback). Some potential points of interest (and maybe things to discuss on tomorrows call?): - I've decided to experiment with adding the metrics of interest on a per client basis, instead of a global-enabled-all-metrics variable which is set with the pmstore functions. I think this approach might be worth applying here so we're more surgical in which events are actually included in the active papi 'eventset', hopefully lowering our performance hit while papi functionality is enabled. - Currently just system wide events are reported, but I'd like to add functionality for a per-process domain - I'm aware that what is currently in the branch assumes papi is installed on the machine running the PMDA. I'll be adding the required configury bits moving forward to check for papi first. - Currently the PMNS is fixed, a possible stretch goal would be to dynamically create the PMNS based on what papi events are actually available on the specific hardware. - I've structured the PMNS currently to resemble papi.kernel. where 'metric_name' is similar to the papi 'event code' (ex, total_inst or L2_TCM). This approach would leave room for the process name once the per-process domain is added. - Only root level UID's are allowed to access the papi values Looking forward to discussing this tomorrow on the call, and any thoughts on list welcome as well. Thanks, Lukas [1] - http://www.performancecopilot.org/pipermail/pcp-announce/2014-June/000043.html [2] - https://www.sourceware.org/git/gitweb.cgi?p=pcpfans.git;a=shotlog;h=refs/heads/lberk/papi --VbJkn9YxBvnuCH5J Content-Type: application/pgp-signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAEBAgAGBQJTqjc7AAoJEAaRCclx+kwJjDQP+wbBBCFRPv+kyKIRrWAhkUDL c6vOzkisvbm9UHF2mSTYlykK2wjJqFahavBuy2W0IAQTKJrXD96vL+XBZxQB/QK6 J5cqfsnNb68dK1Au38Uijwqo/yO6s0r10r5ARe5tjd3P6DA6BW0RN/6sLRfgTafd njonCzpiqSMxvsqWkFTrAxbRhbKnWYDOtIiUQsyj1Vn1t8NCfMDTfE+aAhbMpCLh Iweq9uTmtSVddsBWWs7w5ovzrMPfPYEY/8YIsB37t2IxtEc+PdRrhSLeRcCO7KLt GIaV9d4xnm/utPhK/S2X8P4g9xD/IZ0mMkZnT2ErE9Z65raGKqjFJdF+furs9vNb 2CCbD0eo57F8KXoem2EItZsR6vvwAO6afSftuDqpjMzAnmrauzDrXOuaYbnuSvyi x3h+MGwWlSLv3MjA++zExziGAY9ztZ33I4qPjZBvFdULMmr6BOqfbqQFtxNmPx1/ zpEB04TkPza+f+aTL12TyzN3ly3UJRep3in1NFmPln1aYFgWN6/4fz67Uvh4IZQe C5GyJgK4JD0RC81C13d1e6Xe4VYpFa9jjPMwrWceddKYGMQhFIWe03u+thFitkCv 6jnY9bqEi5aUu2Mf5EFuRsoxayrVpnjQecwhjKFky2cFBJemlqBvmu9rYZCd0KUT 1hGQFIhK1xSmMkMKON8h =dtM0 -----END PGP SIGNATURE----- --VbJkn9YxBvnuCH5J-- From kenj@internode.on.net Tue Jun 24 23:26:06 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 1F8307F3F for ; Tue, 24 Jun 2014 23:26:06 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 1468A8F8037 for ; Tue, 24 Jun 2014 21:26:02 -0700 (PDT) X-ASG-Debug-ID: 1403670360-04cbb0653793ed0001-S8gJnT Received: from ipmail06.adl6.internode.on.net (ipmail06.adl6.internode.on.net [150.101.137.145]) by cuda.sgi.com with ESMTP id BVFnc6lKNqPBAW3P for ; Tue, 24 Jun 2014 21:26:01 -0700 (PDT) X-Barracuda-Envelope-From: kenj@internode.on.net X-Barracuda-Apparent-Source-IP: 150.101.137.145 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AucTADBOqlN20YDzPGdsb2JhbAANTYcmhDe5T4MVAYEnBAEBAQE4hDgBAQEEIxVAARALGAICBRYLAgIJAwIBAgExFAYNAQcBAbF0d54gF4EqjVIHgneBTAEEshA Received: from ppp118-209-128-243.lns20.mel6.internode.on.net (HELO [192.168.1.100]) ([118.209.128.243]) by ipmail06.adl6.internode.on.net with ESMTP; 25 Jun 2014 13:56:00 +0930 Message-ID: <53AA5017.8030906@internode.on.net> Date: Wed, 25 Jun 2014 14:29:11 +1000 From: Ken McDonell User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.6.0 MIME-Version: 1.0 To: Nathan Scott CC: PCP Subject: Re: QA test 828 has started failing References: <405933196.32075123.1403563839496.JavaMail.zimbra@redhat.com> X-ASG-Orig-Subj: Re: QA test 828 has started failing In-Reply-To: <405933196.32075123.1403563839496.JavaMail.zimbra@redhat.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: ipmail06.adl6.internode.on.net[150.101.137.145] X-Barracuda-Start-Time: 1403670360 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6931 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 24/06/14 08:50, Nathan Scott wrote: > Hi Ken, > > I'm seeing 828 failing atm - looks like an unrecognised valgrind > option is the cause? (see attached .bad file) This is on RHEL6. Yes I saw that also over the weekend ... I'm battling to figure out how to deal with valgrind differences ... gimme a few days. However, on the bright side, I don't think there is a risk of a code failure here now. From nscott@redhat.com Wed Jun 25 01:39:09 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 2AF997F3F for ; Wed, 25 Jun 2014 01:39:09 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id AE2FCAC006 for ; Tue, 24 Jun 2014 23:39:05 -0700 (PDT) X-ASG-Debug-ID: 1403678340-04bdf056675d54d0001-S8gJnT Received: from mx5-phx2.redhat.com (mx5-phx2.redhat.com [209.132.183.37]) by cuda.sgi.com with ESMTP id bXC9vUCLxu9SdHE8 for ; Tue, 24 Jun 2014 23:39:01 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.37 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx5-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5P6ct94029043; Wed, 25 Jun 2014 02:38:56 -0400 Date: Wed, 25 Jun 2014 02:38:55 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: Ken McDonell Cc: PCP Message-ID: <134535079.33172116.1403678335856.JavaMail.zimbra@redhat.com> In-Reply-To: <53AA5017.8030906@internode.on.net> References: <405933196.32075123.1403563839496.JavaMail.zimbra@redhat.com> <53AA5017.8030906@internode.on.net> Subject: Re: QA test 828 has started failing MIME-Version: 1.0 X-ASG-Orig-Subj: Re: QA test 828 has started failing Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: QA test 828 has started failing Thread-Index: X0fVlyHnaRN1AF8uIMG9wEHZpT9+xw== X-Barracuda-Connect: mx5-phx2.redhat.com[209.132.183.37] X-Barracuda-Start-Time: 1403678341 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6933 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... ----- Original Message ----- > On 24/06/14 08:50, Nathan Scott wrote: > > Hi Ken, > > > > I'm seeing 828 failing atm - looks like an unrecognised valgrind > > option is the cause? (see attached .bad file) This is on RHEL6. > > Yes I saw that also over the weekend ... I'm battling to figure out how > to deal with valgrind differences ... gimme a few days. Sure, no problem at all. > However, on the bright side, I don't think there is a risk of a code > failure here now. Yep, thanks. :) cheers. -- Nathan From nscott@redhat.com Wed Jun 25 01:45:12 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id D7D867F3F for ; Wed, 25 Jun 2014 01:45:12 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id B94CB304062 for ; Tue, 24 Jun 2014 23:45:12 -0700 (PDT) X-ASG-Debug-ID: 1403678710-04cbb065359bc20001-S8gJnT Received: from mx3-phx2.redhat.com (mx3-phx2.redhat.com [209.132.183.24]) by cuda.sgi.com with ESMTP id RPFb2sAQRkEcy6us for ; Tue, 24 Jun 2014 23:45:11 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.24 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx3-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id s5P6jASA015296; Wed, 25 Jun 2014 02:45:10 -0400 Date: Wed, 25 Jun 2014 02:45:10 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: "Frank Ch. Eigler" Cc: PCP Message-ID: <160133053.33187860.1403678710355.JavaMail.zimbra@redhat.com> In-Reply-To: <20140624115737.GO8337@redhat.com> References: <1828964541.31278424.1403503516163.JavaMail.zimbra@redhat.com> <25800551.31292134.1403505090072.JavaMail.zimbra@redhat.com> <1690334551.32241023.1403584004294.JavaMail.zimbra@redhat.com> <20140624115737.GO8337@redhat.com> Subject: Re: [RFC] A privileged pmcd co-process MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [RFC] A privileged pmcd co-process Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: A privileged pmcd co-process Thread-Index: JOAn68DNenf4ToYui88a43YfqgNSZQ== X-Barracuda-Connect: mx3-phx2.redhat.com[209.132.183.24] X-Barracuda-Start-Time: 1403678711 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.03 X-Barracuda-Spam-Status: No, SCORE=0.03 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, BSF_SC0_SA_TO_FROM_DOMAIN_MATCH, THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6933 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.01 BSF_SC0_SA_TO_FROM_DOMAIN_MATCH Sender Domain Matches Recipient Domain ----- Original Message ----- > > [...] envisioning the systemwide pmcd > and pmda processes switching to/from container namespaces to service > individual requests? Kind of like the linux_proc pmda doing temporary > setuid() downgrades? In the case where a container has been requested (by a client), that's a pretty good analogy, yes. It's kinda similar, but different in that for pmdaproc its not per-client-opt-in, whereas for namespaces it would be. cheers. -- Nathan From nscott@redhat.com Wed Jun 25 02:07:27 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 805907F3F for ; Wed, 25 Jun 2014 02:07:27 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id F1F3CAC004 for ; Wed, 25 Jun 2014 00:07:23 -0700 (PDT) X-ASG-Debug-ID: 1403680038-04cb6c76d0273360001-S8gJnT Received: from mx4-phx2.redhat.com (mx4-phx2.redhat.com [209.132.183.25]) by cuda.sgi.com with ESMTP id bYjaxYc9RBj1Bff3 for ; Wed, 25 Jun 2014 00:07:18 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.25 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx4-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id s5P77IUv024115 for ; Wed, 25 Jun 2014 03:07:18 -0400 Date: Wed, 25 Jun 2014 03:07:18 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: PCP Message-ID: <2019688524.33205464.1403680038276.JavaMail.zimbra@redhat.com> In-Reply-To: <1103922821.29222207.1403162160063.JavaMail.zimbra@redhat.com> References: <1103922821.29222207.1403162160063.JavaMail.zimbra@redhat.com> Subject: Reminder: PCP developers conference call MIME-Version: 1.0 X-ASG-Orig-Subj: Reminder: PCP developers conference call Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: PCP developers conference call Thread-Index: PyriGJqCwFpky3Xx2ICGx7+f16cA2qGONoWc X-Barracuda-Connect: mx4-phx2.redhat.com[209.132.183.25] X-Barracuda-Start-Time: 1403680038 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6934 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Reminder - this is on in approx. 14 hours from now. I'll talk to you there! I've had requests for a recording; details will be sent by mail afterward describing replaying it. One additional agenda item - discussing the use of pmstore to conditionally enable metrics vs auto-client-enabling. cheers. ----- Forwarded Message ----- From: "Nathan Scott" To: "pcp-announce" Sent: Thursday, June 19, 2014 5:16:00 PM Subject: PCP developers conference call Hi all, It's high time we had another developers conference call! For those new to the game, we have these calls approximately once every 3 months - they are open to anyone who has even a passing interest in PCP. Please let me know if you'll be on the call (we'll wait a bit if we're expecting people) and if there's any topics you'd like to discuss. An initial agenda follows, below. The usual aftermath is a collation of any note-keeping effort anyone has made, and summaries emailed to the pcp list. We may be able to record the call as well, if there is any interest in that? (Paul Evans or anyone else in UK/Europe - this might suit you well?) Details for the call: - Starting at 7am on Thursday 26th June in Melbourne, track your local start date/time here: http://www.timeanddate.com/worldclock/fixedtime.html?msg=PCP+Meeting&iso=20140626T07&p1=152 - Phone number to call from your location is here: https://www.intercallonline.com/listNumbersByCode.action?confCode=6409801839 - When prompted, enter the conference code: 6409801839 Initial agenda: - welcome - milestones and upcoming dates - releases [nathans] - conferences / presentations [nathans] - administration - closed/open mailing list [nathans, fche, (max?)] - github request [nathans] - code reviews [nathans] - release builds [nathans] - quality assurance - testing kernel PMDAs [nathans] - archives [nathans] - RFCs - pmdapipe [nathans] - pmcd co-process (pending, will send before weeks end) [nathans] - ... any other design work to discuss? - WIP - web interface(s) [fche, kenj, netflix folks?] - python [nathans, scox? mgoodwin? michele?] - memory blowout [brolley? nathans] - pmdapapi? [lukas?] - discovery? [brolley] - ... any other hacking in progress? - anyone need help with anything? - anyone have any production stories/needs they want to share? - any other topics? Looking forward to it - I'll talk to you all next week! cheers. -- Nathan From nscott@redhat.com Wed Jun 25 02:18:11 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 53A657F3F for ; Wed, 25 Jun 2014 02:18:11 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id C50F9AC002 for ; Wed, 25 Jun 2014 00:18:10 -0700 (PDT) X-ASG-Debug-ID: 1403680688-04cb6c76cf2740a0001-S8gJnT Received: from mx5-phx2.redhat.com (mx5-phx2.redhat.com [209.132.183.37]) by cuda.sgi.com with ESMTP id cq1hlPxcy2IX2sUx for ; Wed, 25 Jun 2014 00:18:09 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.37 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx5-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5P7I81r003216 for ; Wed, 25 Jun 2014 03:18:08 -0400 Date: Wed, 25 Jun 2014 03:18:08 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: pcp@oss.sgi.com Message-ID: <2109769793.33209354.1403680688562.JavaMail.zimbra@redhat.com> In-Reply-To: <20140625024307.GA9275@redhat.com> References: <20140625024307.GA9275@redhat.com> Subject: Re: [pcp] PCP papi PMDA MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [pcp] PCP papi PMDA Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: PCP papi PMDA Thread-Index: ztycWEJwVQK9ImAfFuuQ/tm/00T7sg== X-Barracuda-Connect: mx5-phx2.redhat.com[209.132.183.37] X-Barracuda-Start-Time: 1403680689 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6934 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Hi Lukas, ----- Original Message ----- > [2] - > https://www.sourceware.org/git/gitweb.cgi?p=pcpfans.git;a=shotlog;h=refs/heads/lberk/papi Wierd, that URL is giving me "400 - Invalid action parameter". The direct git URL is here - I'm lazy & tend to cut+paste :) - for anyone wanting to review or try out pmdapapi: git://sourceware.org/git/pcpfans.git lberk/papi cheers. -- Nathan From nscott@redhat.com Wed Jun 25 02:29:31 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 70DCC7F3F for ; Wed, 25 Jun 2014 02:29:31 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 3BB28304051 for ; Wed, 25 Jun 2014 00:29:31 -0700 (PDT) X-ASG-Debug-ID: 1403681368-04bdf056675d8fb0001-S8gJnT Received: from mx6-phx2.redhat.com (mx6-phx2.redhat.com [209.132.183.39]) by cuda.sgi.com with ESMTP id EVIGullCEokgLa6D for ; Wed, 25 Jun 2014 00:29:28 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.39 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx6-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5P7TSkC015582 for ; Wed, 25 Jun 2014 03:29:28 -0400 Date: Wed, 25 Jun 2014 03:29:28 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: PCP Message-ID: <503234609.33215552.1403681368578.JavaMail.zimbra@redhat.com> Subject: pcp updates: mem+blkio cgroups updates MIME-Version: 1.0 X-ASG-Orig-Subj: pcp updates: mem+blkio cgroups updates Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: pcp updates: mem+blkio cgroups updates Thread-Index: 7TVk0YGIjB3oQkVlj0omcI0o3jjPQA== X-Barracuda-Connect: mx6-phx2.redhat.com[209.132.183.39] X-Barracuda-Start-Time: 1403681368 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC5_SA210e, THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6934 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 0.00 BSF_SC5_SA210e Custom Rule SA210e Changes committed to git://git.performancecopilot.org/pcp.git dev qa/730 | 46 ++ qa/730.out | 822 ++++++++++++++++++++++++++++++++++++ qa/731 | 50 ++ qa/731.out | 706 ++++++++++++++++++++++++++++++ qa/GNUmakefile | 2 qa/group | 2 qa/linux/GNUmakefile | 20 qa/linux/GNUmakefile.install | 1 qa/linux/cgroups-root-001.tgz |binary src/include/pcp/pmda.h | 2 src/libpcp_pmda/src/dynamic.c | 56 +- src/libpcp_pmda/src/exports | 5 src/libpcp_pmda/src/open.c | 3 src/pmdas/linux_proc/GNUmakefile | 13 src/pmdas/linux_proc/cgroups.c | 890 +++++++++++++++++++++++++++++---------- src/pmdas/linux_proc/cgroups.h | 49 +- src/pmdas/linux_proc/clusters.h | 5 src/pmdas/linux_proc/filesys.c | 97 ---- src/pmdas/linux_proc/filesys.h | 27 - src/pmdas/linux_proc/help | 5 src/pmdas/linux_proc/indom.h | 16 src/pmdas/linux_proc/ksym.c | 18 src/pmdas/linux_proc/pmda.c | 388 +++++++++++++---- src/pmdas/linux_proc/proc_pid.c | 24 - src/pmdas/linux_proc/root_proc | 18 25 files changed, 2770 insertions(+), 495 deletions(-) commit 6a6251f700414b9d68d7445daa02b2095f9df2cd Author: Nathan Scott Date: Wed Jun 25 16:36:50 2014 +1000 pmdaproc: additional memory and new blkio cgroup metrics on Linux This seemed so simple on the surface ... but turned into a massive effort. The new memory metrics are a straightforward extension to the existing code, but the blkio metrics took a ton of unexpected work. Oh well. Some of the things making this complex included: - quirks of the blkio file formats, and instances within files (and different instance sets within some files, different metrics within some files, and, and...); - sufficiently large metric sets that the existing PMID "item" field split was not sufficient, and a new scheme ended up being needed; - requirement to use an instance domain for disks, and that instance name being unhelpfully exported by the kernel as major:minor So, a new PMID cluster-masking scheme has been introduced (support in libpcp_pmda was needed, making it yet more involved) allowing the full PMID item space to be dedicated to the different metric values, and the high bits in the cluster to be dedicated to the cgroup identifier. Another scheme has been implemented for blkio cgroups such that its disk indom is exported the human-readable device names (sda, sdb, etc) instead of simply the major:minor pair. The cgroup.subsys and cgroup.mounts metric namespaces are made fixed, instead of dynamic (which in hindsight they should always have been). A new testing methodology is introduced to pmdaproc. This makes use of an environment variable to set an alternate root filesystem path, to be used by the PMDA (bit like a chroot). The root can be populated with the set of proc and other (cgroup) files needed by pmdaproc, thus giving fine-grained and deterministic output. This also allows us to inject crafted data that would otherwise be hard to evoke on a running kernel. Tests qa/730 and qa/731 are added to exercise the metrics (the latter is a valgrind test, the former focuses on different call trajectories into the PMDA) using this method, with one canned set of data. Over time, more roots can be gathered from various running systems, and the tests are written so that they'll automatically start to use them. From fche@redhat.com Wed Jun 25 11:07:22 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 0D4A17F3F for ; Wed, 25 Jun 2014 11:07:22 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id A29C6AC008 for ; Wed, 25 Jun 2014 09:07:21 -0700 (PDT) X-ASG-Debug-ID: 1403712436-04cb6c76d129f7a0001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id cpGj6WjtStQXebm4 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 25 Jun 2014 09:07:17 -0700 (PDT) X-Barracuda-Envelope-From: fche@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s5PG7FA7032137 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Wed, 25 Jun 2014 12:07:15 -0400 Received: from fche.csb (vpn-56-123.rdu2.redhat.com [10.10.56.123]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5PG7Fox024992; Wed, 25 Jun 2014 12:07:15 -0400 Received: by fche.csb (Postfix, from userid 2569) id 8576A5853A; Wed, 25 Jun 2014 12:07:14 -0400 (EDT) To: William Cohen Cc: pcp@oss.sgi.com Subject: Re: PCP Network Latency PMDA References: <53A34A47.3060008@redhat.com> <53A9E126.2040000@redhat.com> X-ASG-Orig-Subj: Re: PCP Network Latency PMDA From: fche@redhat.com (Frank Ch. Eigler) Date: Wed, 25 Jun 2014 12:07:14 -0400 In-Reply-To: <53A9E126.2040000@redhat.com> (William Cohen's message of "Tue, 24 Jun 2014 16:35:50 -0400") Message-ID: User-Agent: Gnus/5.1008 (Gnus v5.10.8) Emacs/21.4 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Scanned-By: MIMEDefang 2.68 on 10.5.11.26 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1403712436 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Hi, Will - wcohen wrote: > [...] The receive is a bit more complicated because of the async > nature of interrupts for incoming packets and the syscall reading > the data, but I think that I understand enough of that to code > something similar for receives. [...] Looking forward to that part. It sounds significantly trickier. > [...] > $ cat /proc/systemtap/stap_df43d0122ca9ec5271896401487121a6_9305/net_latency > #dev: tx_queue_n tx_queue_avg tx_queue_sum tx_xmit_n tx_xmit_avg tx_xmit_sum tx_free_n tx tx_free_avg tx_free_sum > em1: 89 3277 291671 89 3284 292340 83 3536 293549 > lo: 9236 7 69453 9257 1948 18033760 140 96020 13442850 OK, that confirms the suspicion that a sampled-metric type of pmda approach suits this better than timestamped-line-of-trace-data one. > [...] > probe kernel.trace("sys_enter") { sys_t[tid()] = gettimeofday_us() } > > probe kernel.trace("sys_exit") { delete sys_t[tid()] } Note that not all syscalls return; you'll want sys_t to be %-marked or something to avoid overflow over time. You might consider also tracking the skb-free-to-sys_exit latency, as time required to return to the application after the outgoing packet has made it down to the network device. Do we have any visibility into network drivers as to when they finally send the packets out on the wire? How does the script handle socket writes that don't result in an outgoing transmission right away due e.g. to !TCP_NODELAY or TCP_CORK? - FChE From brolley@redhat.com Wed Jun 25 13:01:38 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 6595B7F3F for ; Wed, 25 Jun 2014 13:01:38 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 708328F8054 for ; Wed, 25 Jun 2014 11:01:35 -0700 (PDT) X-ASG-Debug-ID: 1403719290-04cbb06538d9250001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id DbZng1F6uZIQaflv (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 25 Jun 2014 11:01:31 -0700 (PDT) X-Barracuda-Envelope-From: brolley@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s5PI1UMo014606 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Wed, 25 Jun 2014 14:01:30 -0400 Received: from [10.10.58.73] (vpn-58-73.rdu2.redhat.com [10.10.58.73]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5PI1TMS031813; Wed, 25 Jun 2014 14:01:29 -0400 Message-ID: <53AB0F27.602@redhat.com> Date: Wed, 25 Jun 2014 14:04:23 -0400 From: Dave Brolley User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0 MIME-Version: 1.0 To: "Frank Ch. Eigler" CC: pcp@oss.sgi.com Subject: Re: pmServiceDiscoveryInterrupt() commit a8b87e2 et al. References: <20140619194444.3B03D58015@fche.csb> X-ASG-Orig-Subj: Re: pmServiceDiscoveryInterrupt() commit a8b87e2 et al. In-Reply-To: <20140619194444.3B03D58015@fche.csb> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.26 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1403719290 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On 06/19/2014 03:44 PM, Frank Ch. Eigler wrote: > Hi, Dave - > > I have a couple of concerns about this commit and its friends. Thanks for the review! Although I have addressed each item with the relevant commits, it would probably be best to review the code after merging all of them, since some aspects of the API evolved as the work items progressed. Also, man pages will be updated once we have agreement on the API. > By making the multithreaded discovery context global (static), the > discovery function is no longer safe to call from a multithreaded > application. (Same by the way with the globalOptionsInfo.) The "no > unsafe side-effects" and "single-threaded scope" check-statics > observations are mistaken, as indeed two concurrent threads calling > pmDiscoverServices() will overwrite and corrupt each other. I have eliminated the static variables from the discovery code of bot the avahi and probe mechanisms. See these commits: commit 5b37c891470533dae22c2cf5a379a3d6c499e3cf Author: Dave Brolley Date: Tue Jun 24 17:06:55 2014 -0400 Eliminate statics from the code for service discovyer via active probing. New connectionOptions now on the stack and passed by address to the work functions. commit cae766bb3a39dec02af1b83f916e87c12580c8cc Author: Dave Brolley Date: Tue Jun 24 16:26:10 2014 -0400 Eliminate static globalOptionsInfo for service discovery. Now on the stack and is passed down (by address) to the mechanism-specific APIs. The caller-supplied pointer to the interrupted flag is now also kept here. > I see why this approach seemed right, considering your idea for the > pmDiscoveryInterrupt() function, which has no way to identify the > operation in progress. When I briefly considered this problem, I > thought perhaps you could give (a new version of) pmDiscoverServices > an sig_atomic_t* parameter, which the various threads would > periodically dereference, and which another thread or signal handler > of the embedding application could set. Interrupting then would not > need to be a function call, just a change of that pointed-to value > (almost exactly the "interrupted" flag from your new pmfind.c). If > you adopt this, you could make the discovery-context back into a > stack-resident thread-safe object. For that matter, all the statics > in src/probe.c should be stack/context-resident for the same reason. Also done. See: commit 0b14abd3b59e35804efdecf791374f273dfb543d Author: Dave Brolley Date: Tue Jun 24 15:36:12 2014 -0400 New pmDiscoverServicesAdvanced(1) API function. Adds a global options string and a pointer to an interrupt flag. All callers updated. > Regarding __pmAvahiServiceDiscoveryInterrupt() being a no-op, that is > probably not necessarily a good idea. We can/will get much longer > timeouts than 0.5 seconds, because incomplete results have been > observed in the wild already. If we are to replace the function-based > interruptor with a flag-based one, perhaps it can be made to work by > having avahi.c's avahi_simple_poll_loop() be replaced with a looped > call to avahi_simple_poll_iterate() with a short timeout, aborting if > the interrupt flag was set. This worked out exactly as you proposed. See: commit 48b9b0574f609f4cd167bb40bcf6eb724cff45c8 Author: Dave Brolley Date: Wed Jun 25 11:26:47 2014 -0400 Implement interruptable avahi service discovery. Call avahi_simple_poll_iterate() in a loop and check for interruption on each iteration. > Also we need to keep in mind a general concern about changing the API > of a function (adding the globalOptions parameter) that's already in > the ABI (pmDiscoverServices): it cannot be done as simply as per > commit #1380d1bb. Old sources won't compile, and worse, old binaries > against the new library will crash. The function would need a new > name (or else wily tricks with symbol-versioning/aliasing would be > called for, but IMHO let's not go there). > > If this "globalOptions" field is truly necessary, then it'll have to > be passed to the renamed function only. Have you considered simply > parsing global options out of a single mechanism string? Or just > replicating the "global" parsing logic in the two mechanisms we > currently have? Though OTOH if you were to add that interrupt flag I > propose, then there's API/ABI breakage anyway. There is now a new expanded API, pmDiscoverServicesAdvanced(1) -- name is not set in stone should anyone be able to think of a better one. See commit 0b14abd3b59e35804efdecf791374f273dfb543d above. > Re. the resolution logic and thread stack size connection, could the > probe.c main thread do the resolution in a loop at the end, rather > than invoking the resolver and whatnot from within each thread? It > would slow things down, sure, but we wouldn't have to rely on hope > that a twice-minimum stack is always going to be enough. (At least > we're fortunate that getnameinfo(), the heavy lifter behind > __pmGetNameInfo(), is supposed to be thread-safe as per POSIX docs. > We can't assume such things without checking.) I looked into this and have left it alone for the moment. I would like to revisit the need for this once I have worked on the balance between the number of threads and the connection timeout (i.e. the performance discussion we had on IRC). No matter what, we will always have to be aware of the amount of stack needed by the worker threads, but if we arrive at a reasonable number in the end, then this may become less of a concern. For now, we use the larger stack size only when resolving the addresses. See: commit e77cc955bb755bb9f36727f737a701d081784377 Author: Dave Brolley Date: Wed Jun 25 11:49:30 2014 -0400 Use the minimum required stack for service discovery worker threads. Tailor the stack size to the given discovery options. Dave From wcohen@redhat.com Wed Jun 25 13:54:21 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 4C31E7F3F for ; Wed, 25 Jun 2014 13:54:21 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id E6CABAC007 for ; Wed, 25 Jun 2014 11:54:20 -0700 (PDT) X-ASG-Debug-ID: 1403722458-04cbb06537de370001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id BeOB49dqoaQh2Mq3 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 25 Jun 2014 11:54:19 -0700 (PDT) X-Barracuda-Envelope-From: wcohen@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s5PIsIL8002986 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Wed, 25 Jun 2014 14:54:18 -0400 Received: from [10.13.129.123] (dhcp129-123.rdu.redhat.com [10.13.129.123]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5PIsIQ8004345; Wed, 25 Jun 2014 14:54:18 -0400 Message-ID: <53AB1ADA.7040207@redhat.com> Date: Wed, 25 Jun 2014 14:54:18 -0400 From: William Cohen User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.6.0 MIME-Version: 1.0 To: "Frank Ch. Eigler" CC: pcp@oss.sgi.com Subject: Re: PCP Network Latency PMDA References: <53A34A47.3060008@redhat.com> <53A9E126.2040000@redhat.com> X-ASG-Orig-Subj: Re: PCP Network Latency PMDA In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.24 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1403722459 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On 06/25/2014 12:07 PM, Frank Ch. Eigler wrote: > > Hi, Will - > > wcohen wrote: > > >> [...] The receive is a bit more complicated because of the async >> nature of interrupts for incoming packets and the syscall reading >> the data, but I think that I understand enough of that to code >> something similar for receives. [...] > > Looking forward to that part. It sounds significantly trickier. Hi Frank, I have been digging through the tracepoints for receive, writing a script for the receive side. Things are definitely more complicated for receive. Something is written, but not working yet. > > >> [...] >> $ cat /proc/systemtap/stap_df43d0122ca9ec5271896401487121a6_9305/net_latency >> #dev: tx_queue_n tx_queue_avg tx_queue_sum tx_xmit_n tx_xmit_avg tx_xmit_sum tx_free_n tx tx_free_avg tx_free_sum >> em1: 89 3277 291671 89 3284 292340 83 3536 293549 >> lo: 9236 7 69453 9257 1948 18033760 140 96020 13442850 > > OK, that confirms the suspicion that a sampled-metric type of pmda > approach suits this better than timestamped-line-of-trace-data one. Note that the number above was with really light traffic. It is quite possible that number of packets would be hundreds of thousands per second. The netdev-times perf script records a huge amount of trace data and does post processing on it. Multiple entries for each packet. Because the perf trace events might be unordered between processors it also needs to sort on the timestamp. All in all it seems post processing of the trace is going to have too much overhead to be useful in production systems. Maybe for some infrequent events the trace and post processing would be okay. However, for the high-frequency events like network operations it seems just too much. > > >> [...] >> probe kernel.trace("sys_enter") { sys_t[tid()] = gettimeofday_us() } >> >> probe kernel.trace("sys_exit") { delete sys_t[tid()] } > > Note that not all syscalls return; you'll want sys_t to be %-marked or > something to avoid overflow over time. Ah, good point. > > You might consider also tracking the skb-free-to-sys_exit latency, as > time required to return to the application after the outgoing packet > has made it down to the network device. > > Do we have any visibility into network drivers as to when they finally > send the packets out on the wire? The syscall can return before the packet is sent (or freed) so it is not clear what skb-free-to-sys_exit would show. The skb-free can be a bit lazy and may not happen immediately after the packet is sent. The tx_queue_t give an idea how long it takes the packet to go through the network layer before it is passed to the networking hardware. The tx_xmit_avg time show how long takes to get to the networking hardware and the tx_free_avg happens after the hardware has sent the data; the network hardware send happens between tx_xmit time and the tx_free time. My understanding is that some of the networking hardware is using DMA so the kernel is just giving it some pointers on a list to the networking hardware, so the kernel doesn't know exactly when a particular packet has been send. The kernel knows the data has been sent because the skb can be freed. > > How does the script handle socket writes that don't result in an > outgoing transmission right away due e.g. to !TCP_NODELAY or TCP_CORK? I will have to check on this. The net_dev_queue and net_dev_xmit tracepoints are low level and I think those !TCP_NODELAY and TCP_CORK would show up as increased tx_queue times. -Will From fche@redhat.com Wed Jun 25 14:01:50 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 0BD667F3F for ; Wed, 25 Jun 2014 14:01:50 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id E0E4B8F8071 for ; Wed, 25 Jun 2014 12:01:46 -0700 (PDT) X-ASG-Debug-ID: 1403722905-04cbb06538decd0001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id FTJORx2ozYogCeew (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 25 Jun 2014 12:01:45 -0700 (PDT) X-Barracuda-Envelope-From: fche@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s5PJ1jrP011886 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Wed, 25 Jun 2014 15:01:45 -0400 Received: from fche.csb (vpn-56-123.rdu2.redhat.com [10.10.56.123]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5PJ1irM008669; Wed, 25 Jun 2014 15:01:45 -0400 Received: by fche.csb (Postfix, from userid 2569) id 8CA655853A; Wed, 25 Jun 2014 15:01:43 -0400 (EDT) Date: Wed, 25 Jun 2014 15:01:43 -0400 From: "Frank Ch. Eigler" To: William Cohen Cc: pcp@oss.sgi.com Subject: Re: PCP Network Latency PMDA Message-ID: <20140625190143.GA29542@redhat.com> X-ASG-Orig-Subj: Re: PCP Network Latency PMDA References: <53A34A47.3060008@redhat.com> <53A9E126.2040000@redhat.com> <53AB1ADA.7040207@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <53AB1ADA.7040207@redhat.com> User-Agent: Mutt/1.4.2.2i X-Scanned-By: MIMEDefang 2.68 on 10.5.11.24 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1403722905 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Hi, Will - > > OK, that confirms the suspicion that a sampled-metric type of pmda > > approach suits this better than timestamped-line-of-trace-data one. > Note that the number above was with really light traffic. It is > quite possible that number of packets would be hundreds of thousands > per second. The netdev-times perf script records a huge amount of > trace data and does post processing on it. Right, it's likely that in-situ statistics aggregation a la your stap script is a winning approach here. > The syscall can return before the packet is sent (or freed) so it is > not clear what skb-free-to-sys_exit would show. Good point. > [...] My understanding is that some of the networking hardware is > using DMA so the kernel is just giving it some pointers on a list to > the networking hardware, so the kernel doesn't know exactly when a > particular packet has been send. The kernel knows the data has been > sent because the skb can be freed. [...] Right, if we have zero-copy hardware, that makes sense. - FChE From nscott@redhat.com Wed Jun 25 17:59:01 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 1084E7F56 for ; Wed, 25 Jun 2014 17:59:01 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id F10D08F804C for ; Wed, 25 Jun 2014 15:59:00 -0700 (PDT) X-ASG-Debug-ID: 1403737135-04cb6c76d22c4080001-S8gJnT Received: from mx4-phx2.redhat.com (mx4-phx2.redhat.com [209.132.183.25]) by cuda.sgi.com with ESMTP id FKOoEfbxVLHkEIaf for ; Wed, 25 Jun 2014 15:58:55 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.25 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx4-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id s5PMwtxv003398; Wed, 25 Jun 2014 18:58:55 -0400 Date: Wed, 25 Jun 2014 18:58:55 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: PCP Message-ID: <519529915.33847609.1403737135380.JavaMail.zimbra@redhat.com> In-Reply-To: <33453004.264571403736698602.JavaMail.sa_dps@linux1697> References: <33453004.264571403736698602.JavaMail.sa_dps@linux1697> Subject: Developers conference call recording MIME-Version: 1.0 X-ASG-Orig-Subj: Developers conference call recording Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: Developers conference call recording Thread-Index: QWpViYdieyvDKIq/3sMeV6suear1Cw== X-Barracuda-Connect: mx4-phx2.redhat.com[209.132.183.25] X-Barracuda-Start-Time: 1403737135 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6950 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Hi all, Here are the details of todays call for anyone who'd like to listen. Note the use-by date on the recording (expires 25th July) - I'll write up some notes today/tomorrow and send 'em out here too, for longer-term reference. cheers. ----- Forwarded Message ----- From: cservice@intercallapac.com To: "Nathan Scott" Sent: Thursday, June 26, 2014 8:51:38 AM Subject: Conference Playback Instructions for Reservationless-Plus Record and Playback Thank you for choosing Reservationless-Plus conferencing from InterCall. Your recent conference was recorded and archived and is now available for playback.Conference Date: 26/6/2014 Conference Time: 04:54 BCU Playback ID: 146118176 Conference Topic: Leader: Nathan Scott Archived through: 25/7/2014 To extend the amount of time that your conference will be available for playback beyond the date listed to the right, visit https://www-apac.intercallonline.com and select Meetings. Click Recorded Meetings and select Purchase in the menu of the row associated with your specified conference, then follow the instructions for extending your archive.1. Listen: Click Listen within the menu for your recording to listen to the recorded conference via the web. 2. Download: Click Download within the menu to download a copy of your recording. 3. Purchase: Click Purchase within the menu for your recording to extend the amount of time your conference will be available for playback. Additional charges may apply. For more information, please contact your Account Manager.To listen to your conference playback via the Internet, refer to the following instructions: Playback via the Internet 1. Click on the following link or paste the entire URL into your browser: http://www2.reservationless-plus.net/moderator/presentation/Playback?id=8b346a85-6ff0-4ede-a793-4845cfc1ff39.rpm 2. At the prompt, enter your name and email address. 3. Click "Submit". The playback will begin. From nscott@redhat.com Wed Jun 25 21:49:22 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 8FE217F66 for ; Wed, 25 Jun 2014 21:49:22 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 68320304051 for ; Wed, 25 Jun 2014 19:49:22 -0700 (PDT) X-ASG-Debug-ID: 1403750956-04cb6c76d12d2d40001-S8gJnT Received: from mx5-phx2.redhat.com (mx5-phx2.redhat.com [209.132.183.37]) by cuda.sgi.com with ESMTP id gZ82THH89VhFSyKp for ; Wed, 25 Jun 2014 19:49:17 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.37 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx5-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5Q2nGie018469 for ; Wed, 25 Jun 2014 22:49:16 -0400 Date: Wed, 25 Jun 2014 22:49:16 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: PCP Message-ID: <1973351898.33892080.1403750956403.JavaMail.zimbra@redhat.com> In-Reply-To: <2134711494.33890915.1403750410222.JavaMail.zimbra@redhat.com> Subject: Developers conference call notes MIME-Version: 1.0 X-ASG-Orig-Subj: Developers conference call notes Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.12] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: Developers conference call notes Thread-Index: vrdkMFfgiw43ErV4O3z9CsgDZYcrPA== X-Barracuda-Connect: mx5-phx2.redhat.com[209.132.183.37] X-Barracuda-Start-Time: 1403750956 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6955 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... = Milestones and upcoming dates Chatted about 20th anniversary of PCP which has either arrived or is just about to (Ken may followup with specific dates once he digs up the time capsule). Congratulations to Ken and Mark (sorry Mark, I overlooked you before) for the early vision and super-impressive endurance to still be here! - releases [nathans] Tracking well with the regular release schedule, business as usual, no surprises to report. - conferences / presentations [nathans] Mark and Nathan attending PyCon 2014 in Brisbane .au (August) - we'll attempt to run a PCP BOF if there's interest. Nathan has a conference slot to talk about PCP Python APIs. = Administration - closed/open mailing list [nathans, fche, kenj, mgoodwin] Lots of discussion and reminiscing about state of the mailing list over time, where it was originally open and later made subscriber-only as a result of spam. Everyone is generally happy about the zero spam on-list, Ken mentioned low effort required (but some) in keeping it that way. Frank suggested an open-subscription-policy mail forwarder on sourceware.org which claims superior anti-spam measures and will investigate feasibility. Ken points out that there is no way of knowing from the outside if the list is open/subscriber-only. Nathan recalls just the one or two posts-by-non-members in the last several months, if that helps. - github request [nathans] Some general discussion about whether a mirror of the master PCP git tree on github would be useful to anyone, after a recent request. Noone on the call would find it directly useful to their workflows. Frank noted systemtap has a mirror, but very few/no requests for pulls have come through. Nathan to ponder further, most likely we'll simply await more demand at this stage. - code reviews [nathans] General thanks to folks doing reviews after requests in the previous conf call - esp. Frank who has really stepped up his efforts and many issues are being found in review. Nathan is very encouraging of more folks doing this - please! anyone! - its a great way to increase overall familiarity with the code base and has a clear impact. - release builds [nathans] Discussion about getting more folks involved with the binary builds we do for each release. Ken and Nathan primarily do this, others would be welcome - particularly around platforms of importance to you (like Solaris and Mac, perhaps?). Ken and Nathan to huddle and attempt to improve regularity of the IA64 builds used by SGI sysadmin folks. = Quality Assurance - archives [nathans] Since the pcp-gui/pcp merge we've now got two locations for QA archives (qa/src and qa/archives). Planning to move all logs in src/ over to archives/, but this will touch alot of tests. Some discussion about timing - will wait a little while as we have a future merge from Frank thats affected, and (later on) Nathan notes another set of QA test churn is needed for systemd unit script work (planning to coincide the two at this stage). - testing kernel PMDAs [nathans] Discussion around a freshly introduced (yesterday) mechanism to aid testing the Linux kernel PMDAs (pmdalinux, pmdaproc, pmdaxfs pmdajbd2, possibly others). Involves the use of an environment variable at PMDA startup that specifies an alternate filesystem root location for any proc/sysfs/cgroupfs files that PMDAs need to parse. So far pmdaproc only has been converted (tests qa/730 and qa/731 use this), but the main kernel PMDA will follow soon. Ken notes this doesn't cover all metrics, so some care is needed (e.g. ipc metrics, which use syscalls). Mark and Nathan chatted a bit about updating the root on-the-fly while the test runs, to exercise more dynamic aspects of PMDA behaviour (definitely this is feasible, not yet attempted). = Work-In-Progress - web interface(s) & threading status [fche, kenj] Progressing well. Some threading issues remain affecting pmwebd (via libpcp), but this is only optionally enabled at this stage. Frank expecting to have last few release-related details sorted soon (QA, docs, and such), planning to send code to the pcp list shortly. Nathan asked about options with demoing at PyCon since its sure to be asked - Frank outlined a couple of paths to doing so. Discussion about Amer's request for deb packages to enable wider/easier testing at his end. Frank has rpm packaging done, not deb yet (its non-obvious, we may need to enumerate all files which is problematic in this case - further investigation needed). Nathan seeks helpers on this, but will take a look if noone else gets there before him. - python interfaces [nathans, mgoodwin] Progressing well. Much work done, more work to follow - aiming in general to be able to have scripts that only have to focus on reporting/printing details. Mark reported on his progress with iostat, which may even make it for this release. Frank asked why do a pcp-iostat - Mark gave a detailed explanation about Red Hat customer support needs, sosreport, and how these folks interact with Red Hat customers outlining how its useful with archive data from customers in particular. Some discussion around pmlogconf - collectl and iostat metrics need to be in the default set (or at least reevaluated again at some point soon to ensure the coverage vs cost tradeoff is at an appropriate point still) for Red Hat customer support needs. Side discussion in there too about whether scripts should be done as standalone tools (/usr/bin) or as pcp(1) scriptlets. General feeling is its the authors choice; pros and cons of each approach discussed: namespace collisions, cmdline option collisions versus ease of invocation, and quirky option processing via pcp(1). A side side discussion about QA of these scripts too (archives have worked well for Nathan). - memory blowout [brolley, nathans, kenj] Problem is well understood at this stage, although remedial effort is not yet underway we know how to get there and Dave is confident its all readily achievable. - discovery [brolley, kenj, fche] Dave gave an update on recent advances in discovery in the last little while (both his current dev work and last few releases). Looks like 3.9.7 will have the last set of updates for the active probing after Daves sorted out remaining issues from Franks most recent review. Ken brought up a cloud usage requirement which he's observed at a couple of deployments now. Frank gave an update on pmmgrs use of discovery, and how planned not-too-distant-future work is aiming to help with the problem of Avahi/mDNS solutions not being viable in this kind of environment. Followup discussion between Ken and Frank planned for the list. - pmdapapi [lukas, wcohen, nathans, fche, kenj] Lukas gave an overview of his work producing a PAPI PMDA, which is on-list and seeking feedback. Discussion primarily focussed on the enabling mechanism, and whether auto-enabling on fetch & auto-disabling when last client exits for this class of data is appropriate. Will provided additional insights into how PAPI works, Ken reminisced about MIPS hardware event counters back in the day, on IRIX :) -- sound like 2 perfect code reviewers. ;) The potential for accidental conflicts with other users of the hardware remains a concern. Nathan pointed out unexpected places where pminfo will be run - such as at PMDA install time - where people would not expect to have to guard against conflicting hardware counter usage. Will believes the policy to be "first user wins" in terms of claiming access to the counters, we don't think the second user will be parked and have to wait (bad for a PMDA if so) or worse, interrupt the first. Investigation into the actual behaviour when these things happen will be helpful to assist setting implementation directions (none of these issues affect the pmStore-based approach, but its less user-friendly -- more configurable and controlled though - trade-offs as always). Along the same lines, behaviour of a full PMDA fetch was queried; some investigation into what happens as a result of running full fetches like "pmdumptext papi" (fetching all the metrics at once, which the hardware is unlikely to support sensibly - Frank points out PAPI might auto-multiplex counters here, which would be neat if it does). [All up, a difficult first PMDA project - good work, Lukas!] - gfs2 updates [pevans] Paul gave an update on some planned GFS2 PMDA updates around hot glock tracing. A GFS2-specific distributed monitoring tool using PCP metrics and APIs is in the future-feature pipeline as well. = Requests-For-Comments - new net latency metrics, pmdapipe [wcohen, nathans, fche, kenj] Lots of discussions ... scribe running out of steam ... mostly we went through the list discussions here, I think? Frank points out no short-term plan to work on pmdapipe, although in general theres agreement the approach is sound and needed. Nathan points out its a difficult PMDA to implement, too, (extensive event metric use) & also thinks its a very high value target. So if anyone out there wants to take a crack, please do. (see RFC on-list) Ken pointed out MMV is a good, efficient model for planned systemtap based exporting and that it fits the PCP model well. Nathan agrees and cautions about production lessons learned from MMV-instrumented Java applications. Some metrics rely on changes to the exported value at sample time, and this facility is effectively lost with the current MMV PMDA (unless the instrumented application becomes proactively involved in continually refreshing, even then its still not as neatly/efficiently done as a coordinated sampling model). - pmcd co-process [nathans, fche] Nathan gave a high level overview of the proposed approach, and the three problems its aiming to tackle. Not a whole lot of time for everyone to digest the RFC yet though, I think. Frank has though, responding favourably. Final quick poll of appropriate timing for these conf calls - three monthly appears to be working fine, we'll continue on this track. Phew, done! Thanks for reading. :) The above is all from memory, so apologies if I missed or misrepresented anything. Please post corrections &| omissions here as follow-up mail - thanks. cheers. -- Nathan From nscott@redhat.com Wed Jun 25 23:49:30 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 2A3DB7F6D for ; Wed, 25 Jun 2014 23:49:30 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 8FEAFAC002 for ; Wed, 25 Jun 2014 21:49:26 -0700 (PDT) X-ASG-Debug-ID: 1403758164-04cbb06537105a10001-S8gJnT Received: from mx3-phx2.redhat.com (mx3-phx2.redhat.com [209.132.183.24]) by cuda.sgi.com with ESMTP id EdSaIdEBFaK6sQAp for ; Wed, 25 Jun 2014 21:49:24 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.24 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx3-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id s5Q4nNWZ018640; Thu, 26 Jun 2014 00:49:23 -0400 Date: Thu, 26 Jun 2014 00:49:23 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: Martins Innus Cc: pcp@oss.sgi.com Message-ID: <1097508451.33910731.1403758163030.JavaMail.zimbra@redhat.com> In-Reply-To: <53A998F1.4050003@buffalo.edu> References: <53A998F1.4050003@buffalo.edu> Subject: Re: [pcp] updated infiniband pmda MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [pcp] updated infiniband pmda Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.5.82.12] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: updated infiniband pmda Thread-Index: 9rRrlj7BennGK5Q3R4ZQSEIiXiKnUw== X-Barracuda-Connect: mx3-phx2.redhat.com[209.132.183.24] X-Barracuda-Start-Time: 1403758164 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6957 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Hi Martins, ----- Original Message ----- > Hi, >=20 > Attached is an updated infiniband pmda that includes metrics > gathered from the switch counters. The HCA counters are only 32 bit > while the switch metrics are 64 bit counters. We have done some initial > validation, and the values seem to be correct for the simple tests we > have run so far. Testing is still ongoing, but I wanted to send our > current work out for comment. Looks good to me. I think you're carrying the team when it comes to testing the infiniband pmda, so thank you! I got the warnings below, and also I think you'll need an update to the text in the "help" file else the Install script will give warnings? Maybe this spot might be slightly more clear if the comment was turned into code, too: - pst->needupdate =3D 3; /* 0x1 for portinfo, 0x2 for perfdata */ + pst->needupdate =3D 11; /* 0x1 for portinfo, 0x2 for perfdata, 0x8 for= switch e.g. pst->needupdate =3D IB_PORTINFO | IB_PERFDATA | IB_SWITCH (with appropriate #defines, better names, etc) gcc -fPIC -fno-strict-aliasing -D_GNU_SOURCE -fstack-protector-all -D_FORTI= FY_SOURCE=3D2 -Wall -g -DPCP_DEBUG -DPCP_VERSION=3D\"3.9.7\" -I../../../sr= c/include -I../../../src/include/pcp -c -o ib.o ib.c ib.c: In function =E2=80=98ib_fetch_val=E2=80=99: ib.c:666: warning: pointer targets in passing argument 1 of =E2=80=98mad_de= code_field=E2=80=99 differ in signedness /usr/include/infiniband/mad.h:1170: note: expected =E2=80=98uint8_t *=E2=80= =99 but argument is of type =E2=80=98char *=E2=80=99 ib.c:667: warning: pointer targets in passing argument 1 of =E2=80=98mad_de= code_field=E2=80=99 differ in signedness /usr/include/infiniband/mad.h:1170: note: expected =E2=80=98uint8_t *=E2=80= =99 but argument is of type =E2=80=98char *=E2=80=99 ib.c:893: warning: pointer targets in passing argument 1 of =E2=80=98mad_de= code_field=E2=80=99 differ in signedness /usr/include/infiniband/mad.h:1170: note: expected =E2=80=98uint8_t *=E2=80= =99 but argument is of type =E2=80=98char *=E2=80=99 ib.c:899: warning: pointer targets in passing argument 1 of =E2=80=98mad_de= code_field=E2=80=99 differ in signedness /usr/include/infiniband/mad.h:1170: note: expected =E2=80=98uint8_t *=E2=80= =99 but argument is of type =E2=80=98char *=E2=80=99 ib.c:904: warning: pointer targets in passing argument 1 of =E2=80=98mad_de= code_field=E2=80=99 differ in signedness /usr/include/infiniband/mad.h:1170: note: expected =E2=80=98uint8_t *=E2=80= =99 but argument is of type =E2=80=98char *=E2=80=99 ib.c:910: warning: pointer targets in passing argument 1 of =E2=80=98mad_de= code_field=E2=80=99 differ in signedness /usr/include/infiniband/mad.h:1170: note: expected =E2=80=98uint8_t *=E2=80= =99 but argument is of type =E2=80=98char *=E2=80=99 ib.c:917: warning: pointer targets in passing argument 1 of =E2=80=98mad_de= code_field=E2=80=99 differ in signedness /usr/include/infiniband/mad.h:1170: note: expected =E2=80=98uint8_t *=E2=80= =99 but argument is of type =E2=80=98char *=E2=80=99 ib.c:919: warning: pointer targets in passing argument 1 of =E2=80=98mad_de= code_field=E2=80=99 differ in signedness /usr/include/infiniband/mad.h:1170: note: expected =E2=80=98uint8_t *=E2=80= =99 but argument is of type =E2=80=98char *=E2=80=99 ib.c:927: warning: pointer targets in passing argument 1 of =E2=80=98mad_de= code_field=E2=80=99 differ in signedness /usr/include/infiniband/mad.h:1170: note: expected =E2=80=98uint8_t *=E2=80= =99 but argument is of type =E2=80=98char *=E2=80=99 ib.c:929: warning: pointer targets in passing argument 1 of =E2=80=98mad_de= code_field=E2=80=99 differ in signedness /usr/include/infiniband/mad.h:1170: note: expected =E2=80=98uint8_t *=E2=80= =99 but argument is of type =E2=80=98char *=E2=80=99 cheers. -- Nathan From nscott@redhat.com Wed Jun 25 23:51:08 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 2EECC7F6D for ; Wed, 25 Jun 2014 23:51:08 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id E34CB304059 for ; Wed, 25 Jun 2014 21:51:04 -0700 (PDT) X-ASG-Debug-ID: 1403758263-04bdf05666641ca0001-S8gJnT Received: from mx5-phx2.redhat.com (mx5-phx2.redhat.com [209.132.183.37]) by cuda.sgi.com with ESMTP id 20J0Me4NnuCLlBpU for ; Wed, 25 Jun 2014 21:51:03 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.37 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx5-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5Q4p2Wc008222; Thu, 26 Jun 2014 00:51:02 -0400 Date: Thu, 26 Jun 2014 00:51:02 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: Dave Brolley Cc: "Frank Ch. Eigler" , pcp@oss.sgi.com Message-ID: <1063089485.33910956.1403758262805.JavaMail.zimbra@redhat.com> In-Reply-To: <53AB0F27.602@redhat.com> References: <20140619194444.3B03D58015@fche.csb> <53AB0F27.602@redhat.com> Subject: Re: [pcp] pmServiceDiscoveryInterrupt() commit a8b87e2 et al. MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [pcp] pmServiceDiscoveryInterrupt() commit a8b87e2 et al. Content-Type: multipart/mixed; boundary="----=_Part_33910954_1310163649.1403758262803" X-Originating-IP: [10.5.82.12] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: pmServiceDiscoveryInterrupt() commit a8b87e2 et al. Thread-Index: ffutv/gucp+CESDcoUzmgcNZsjS54A== X-Barracuda-Connect: mx5-phx2.redhat.com[209.132.183.37] X-Barracuda-Start-Time: 1403758263 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.03 X-Barracuda-Spam-Status: No, SCORE=0.03 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA_TO_FROM_DOMAIN_MATCH, THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6957 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 0.01 BSF_SC0_SA_TO_FROM_DOMAIN_MATCH Sender Domain Matches Recipient Domain ------=_Part_33910954_1310163649.1403758262803 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit ----- Original Message ----- > [...] > Thanks for the review! Although I have addressed each item with the > relevant commits, it would probably be best to review the code after > merging all of them, since some aspects of the API evolved as the work > items progressed. Also, man pages will be updated once we have agreement > on the API. (/me cheers from the side-lines) ... looking good Dave. > There is now a new expanded API, pmDiscoverServicesAdvanced(1) -- name > is not set in stone should anyone be able to think of a better one. See pmDiscoverServicesExtended(3)? (or Expanded?). Also, the whitespace police called and sent through the attached patch (and make some persnickety comments about that new function in pmfind.c). cheers. -- Nathan ------=_Part_33910954_1310163649.1403758262803 Content-Type: text/x-patch; name=whitey.patch Content-Disposition: attachment; filename=whitey.patch Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL3NyYy9saWJwY3Avc3JjL2F2YWhpLmMgYi9zcmMvbGlicGNwL3NyYy9hdmFo aS5jCmluZGV4IGQ3YmYyN2IuLmU4ODliZGUgMTAwNjQ0Ci0tLSBhL3NyYy9saWJwY3Avc3JjL2F2 YWhpLmMKKysrIGIvc3JjL2xpYnBjcC9zcmMvYXZhaGkuYwpAQCAtNzM5LDE4ICs3MzksMTYgQEAg X19wbUF2YWhpRGlzY292ZXJTZXJ2aWNlcyhjb25zdCBjaGFyICpzZXJ2aWNlLAogICAgIHRpbWVv dXQgPSBkaXNjb3ZlcnlUaW1lb3V0KCk7IC8qIGRlZmF1bHQgKi8KIAogICAgIHRpbWVvdXRCZWdp biA9IHN0cnN0cihtZWNoYW5pc20gPyBtZWNoYW5pc20gOiAiIiwgIix0aW1lb3V0PSIpOwotICAg IGlmICh0aW1lb3V0QmVnaW4pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRpbWVvdXRCZWdpbiAr PSBzdHJsZW4oIix0aW1lb3V0PSIpOyAvKiBza2lwIG92ZXIgaXQgKi8KLSAgICAgICAgICAgIHRp bWVvdXQgPSBzdHJ0b2QgKHRpbWVvdXRCZWdpbiwgJiB0aW1lb3V0RW5kKTsKLSAgICAgICAgICAg IGlmICgoKnRpbWVvdXRFbmQgIT0gJ1wwJyAmJiAqdGltZW91dEVuZCAhPSAnLCcpIHx8Ci0gICAg ICAgICAgICAgICAgKHRpbWVvdXQgPCAwLjApKSB7Ci0JCV9fcG1Ob3RpZnlFcnIoTE9HX1dBUk5J TkcsCi0JCQkgICAgICAiaWdub3JlZCBiYWQgYXZhaGkgdGltZW91dCA9ICclKnMnXG4iLAotCQkJ ICAgICAgKGludCkodGltZW91dEVuZC10aW1lb3V0QmVnaW4pLCB0aW1lb3V0QmVnaW4pOwotICAg ICAgICAgICAgICAgIHRpbWVvdXQgPSBkaXNjb3ZlcnlUaW1lb3V0KCk7Ci0gICAgICAgICAgICB9 Ci0gICAgICAgIH0KKyAgICBpZiAodGltZW91dEJlZ2luKSB7CisJdGltZW91dEJlZ2luICs9IHN0 cmxlbigiLHRpbWVvdXQ9Iik7IC8qIHNraXAgb3ZlciBpdCAqLworCXRpbWVvdXQgPSBzdHJ0b2Qg KHRpbWVvdXRCZWdpbiwgJiB0aW1lb3V0RW5kKTsKKwlpZiAoKCp0aW1lb3V0RW5kICE9ICdcMCcg JiYgKnRpbWVvdXRFbmQgIT0gJywnKSB8fCAodGltZW91dCA8IDAuMCkpIHsKKwkgICAgX19wbU5v dGlmeUVycihMT0dfV0FSTklORywKKwkJCSAgImlnbm9yZWQgYmFkIGF2YWhpIHRpbWVvdXQgPSAn JSpzJ1xuIiwKKwkJCSAgKGludCkodGltZW91dEVuZC10aW1lb3V0QmVnaW4pLCB0aW1lb3V0QmVn aW4pOworCSAgICB0aW1lb3V0ID0gZGlzY292ZXJ5VGltZW91dCgpOworCX0KKyAgICB9CiAKICAg ICAvKiBTZXQgdGhlIHRpbWVvdXQuICovCiAgICAgYXZhaGlfc2ltcGxlX3BvbGxfZ2V0KHNpbXBs ZVBvbGwpLT50aW1lb3V0X25ldygKZGlmZiAtLWdpdCBhL3NyYy9saWJwY3Avc3JjL2ludGVybmFs LmggYi9zcmMvbGlicGNwL3NyYy9pbnRlcm5hbC5oCmluZGV4IGVmMWJhMzMuLjY5YzQ1ZDQgMTAw NjQ0Ci0tLSBhL3NyYy9saWJwY3Avc3JjL2ludGVybmFsLmgKKysrIGIvc3JjL2xpYnBjcC9zcmMv aW50ZXJuYWwuaApAQCAtMjYxLDggKzI2MSw4IEBAIHR5cGVkZWYgc3RydWN0IHsKIH0gX19wbVNl cnZpY2VJbmZvOwogCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgaW50CXJlc29sdmU7CS8qIHJlc29s dmUgYWRkcmVzc2VzICovCi0gICAgaW50ICppbnRlcnJ1cHRlZDsJLyogcHJvY2VzcyBpbnRlcnJ1 cHRlZCAqLworICAgIGludAkJCXJlc29sdmU7CS8qIHJlc29sdmUgYWRkcmVzc2VzICovCisgICAg aW50CQkJKmludGVycnVwdGVkOwkvKiBwcm9jZXNzIGludGVycnVwdGVkICovCiB9IF9fcG1EaXNj b3ZlcnlHbG9iYWxDb250ZXh0OwogCiBleHRlcm4gaW50IF9fcG1BZGREaXNjb3ZlcmVkU2Vydmlj ZShfX3BtU2VydmljZUluZm8gKiwK ------=_Part_33910954_1310163649.1403758262803-- From nscott@redhat.com Thu Jun 26 02:36:23 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id B2DB77F75 for ; Thu, 26 Jun 2014 02:36:23 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 248E5AC002 for ; Thu, 26 Jun 2014 00:36:19 -0700 (PDT) X-ASG-Debug-ID: 1403768177-04cb6c76d22e31e0001-S8gJnT Received: from mx4-phx2.redhat.com (mx4-phx2.redhat.com [209.132.183.25]) by cuda.sgi.com with ESMTP id qaw8PArhufkKJzt3 for ; Thu, 26 Jun 2014 00:36:18 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.25 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx4-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id s5Q7aGEJ018251; Thu, 26 Jun 2014 03:36:16 -0400 Date: Thu, 26 Jun 2014 03:36:16 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: Martins Innus Cc: pcp@oss.sgi.com Message-ID: <1015758147.33977940.1403768176429.JavaMail.zimbra@redhat.com> In-Reply-To: <53A995C8.5020904@buffalo.edu> References: <53A995C8.5020904@buffalo.edu> Subject: Re: [pcp] nvidia/nvml pmda MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [pcp] nvidia/nvml pmda Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.12] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: nvidia/nvml pmda Thread-Index: Jc6EhR7087fI/5ASr7p7uGeSfuliew== X-Barracuda-Connect: mx4-phx2.redhat.com[209.132.183.25] X-Barracuda-Start-Time: 1403768178 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6959 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Hi Martins, ----- Original Message ----- > Hi, > Attached is a nvidia/nvml pmda for general review and suggestions. > I still need to do some error checking on metrics that may not be > available on all cards, but we have been using it for quite a while and > it seems to be working fine. > > I'd appreciate any general feedback. > > I've also included the rpm spec file. This pmda depends on both the > nvidia driver being installed as well as the NVIDIA GPU deployment kit > (which provides NVML). As these are not available as RPMs, let me know > if you prefer a different way of generating the spec file from what we > have done with respect to specifying the dependencies. > Hmmm, this ones a tricky case. I can see one possible way to proceed (no doubt, one of many) ... but where would you like this to go? There are a few files missing here (PMDA Install/Remove/help files, makefile etc), so its not clear what you'd like to do yet... Here's one possible path, which would be one way we could include this PMDA into the master PCP. For the dependence on the kinda-oddball shared library, we could use shared-library function replacement (LD_LIBRARY_PATH kind of deal) to provide a no-op implementation of the nvidia library (as there's not a huge number of function calls in the PMDA, this should be a fairly straightforward undertaking). This would allow a pcp-pmda-nvidia package to be produced as part of the regular PCP builds, with a PMDA that functions in the presence of no nvidia code. If someone chooses to then install the nvidia drivers and GPU kit, at PMDA ./Install time they could then specify the location to the "official" nvidia-supplied shared library which would then get swapped in to replace the no-op variant. So instead of reporting "No values available" for metrics, instances and metrics via the nvml interfaces could then be reported. Lemme know if you'd like this to become part of PCP (you might have meant this just for general review, and not want it included? - thats fine too, and up to you) - happy to work with you to make the above happen if it'll suit your needs. Or something else...? (the code looks fine BTW - could use the newer pmdaGetOptions interface, but the general approach is sound AFAICT). cheers. -- Nathan From kenj@internode.on.net Thu Jun 26 06:01:44 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 0D1447F75 for ; Thu, 26 Jun 2014 06:01:44 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id DCF9D8F8054 for ; Thu, 26 Jun 2014 04:01:40 -0700 (PDT) X-ASG-Debug-ID: 1403780495-04bdf05669664fe0001-S8gJnT Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id T34AGqFqyuQkEcmk for ; Thu, 26 Jun 2014 04:01:35 -0700 (PDT) X-Barracuda-Envelope-From: kenj@internode.on.net X-Barracuda-Apparent-Source-IP: 150.101.137.143 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Avd1AMn8q1N20YDzPGdsb2JhbABagw2DSYUIvFgDgQwXBAEBAQE4NYQKCAIwHDAFBmIgChUBBB4FiDGWIa0Rjx2ELQWQbJ8dghIr Received: from ppp118-209-128-243.lns20.mel6.internode.on.net (HELO bozohorize) ([118.209.128.243]) by ipmail05.adl6.internode.on.net with ESMTP; 26 Jun 2014 20:31:33 +0930 From: "Ken McDonell" To: Subject: pcp 3.9.5 build failure on ia64 & suse Date: Thu, 26 Jun 2014 21:01:26 +1000 X-ASG-Orig-Subj: pcp 3.9.5 build failure on ia64 & suse Message-ID: <04d301cf912d$fb482980$f1d87c80$@internode.on.net> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit X-Mailer: Microsoft Outlook 15.0 Thread-Index: Ac+RLWuGgOKZiQhbQ52FHmRc3jOGAw== Content-Language: en-au X-Barracuda-Connect: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Start-Time: 1403780495 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.01 X-Barracuda-Spam-Status: No, SCORE=0.01 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6963 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== Makepkgs dies thusly ... checking build system type... ia64-suse-linux-gnu checking host system type... ia64-suse-linux-gnu checking target system type... Invalid configuration `noarch-suse-linux': machine `noarch-suse' not recognized configure: error: /bin/sh ./config.sub noarch-suse-linux failed error: Bad exit status from /var/tmp/rpm-tmp.24587 (%build) And the cause would appear to be the rpm-driven build that runs configure this way (from Log/pcp) (see the --target setting) + ./configure --host=ia64-suse-linux-gnu --build=ia64-suse-linux-gnu --target=noarch-suse-linux --program-prefix= --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc --datadir=/usr/share --includedir=/usr/include --libdir=/usr/lib --libexecdir=/usr/lib --localstatedir=/var --sharedstatedir=/usr/com --mandir=/usr/share/man --infodir=/usr/share/info --with-rcdir=/etc/init.d Now this use to work in the not too distant past ... so anyone willing to offer some advice as to what changed for the rpm-driven builds that would have introduced this regression for ia64 and suse? Even better would be guidance on how to fix it. Ta. From fche@redhat.com Thu Jun 26 09:11:31 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 57CC37F83 for ; Thu, 26 Jun 2014 09:11:31 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 30D918F804B for ; Thu, 26 Jun 2014 07:11:27 -0700 (PDT) X-ASG-Debug-ID: 1403791883-04cb6c76d230a670001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id 4Ey6lz5i49CkUZCC (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 26 Jun 2014 07:11:24 -0700 (PDT) X-Barracuda-Envelope-From: fche@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s5QEBKW2024217 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 26 Jun 2014 10:11:20 -0400 Received: from fche.csb (vpn-56-123.rdu2.redhat.com [10.10.56.123]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5QEBJ6F020318; Thu, 26 Jun 2014 10:11:19 -0400 Received: by fche.csb (Postfix, from userid 2569) id 26CA65853A; Thu, 26 Jun 2014 10:11:19 -0400 (EDT) To: "Ken McDonell" Cc: Subject: Re: pcp 3.9.5 build failure on ia64 & suse References: <04d301cf912d$fb482980$f1d87c80$@internode.on.net> X-ASG-Orig-Subj: Re: pcp 3.9.5 build failure on ia64 & suse From: fche@redhat.com (Frank Ch. Eigler) Date: Thu, 26 Jun 2014 10:11:19 -0400 In-Reply-To: <04d301cf912d$fb482980$f1d87c80$@internode.on.net> (Ken McDonell's message of "Thu, 26 Jun 2014 21:01:26 +1000") Message-ID: User-Agent: Gnus/5.1008 (Gnus v5.10.8) Emacs/21.4 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Scanned-By: MIMEDefang 2.68 on 10.5.11.27 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1403791884 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-BRTS-Evidence: performancecopilot.org "Ken McDonell" writes: > [...] > checking target system type... Invalid configuration `noarch-suse-linux': > machine `noarch-suse' not recognized > configure: error: /bin/sh ./config.sub noarch-suse-linux failed > [...] I believe this is caused by this bit of build/rpm/pcp.spec.in: %package -n pcp-doc Group: Documentation BuildArch: noarch <<<<<<<<<<<<<<<<<<<<<< Summary: Documentation and tutorial for the Performance Co-Pilot URL: http://www.performancecopilot.org Only somewhat modern RPM understands that. - FChE From brolley@redhat.com Thu Jun 26 09:58:18 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id E77FD7F83 for ; Thu, 26 Jun 2014 09:58:18 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 9EB3830405F for ; Thu, 26 Jun 2014 07:58:18 -0700 (PDT) X-ASG-Debug-ID: 1403794696-04bdf056666788f0001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id JirpTEAY5pIoXDcj (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 26 Jun 2014 07:58:17 -0700 (PDT) X-Barracuda-Envelope-From: brolley@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s5QEwGGS005717 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Thu, 26 Jun 2014 10:58:16 -0400 Received: from [10.15.16.130] (dhcp-10-15-16-130.yyz.redhat.com [10.15.16.130]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5QEwGIw004581; Thu, 26 Jun 2014 10:58:16 -0400 Message-ID: <53AC35B8.3000802@redhat.com> Date: Thu, 26 Jun 2014 11:01:12 -0400 From: Dave Brolley User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0 MIME-Version: 1.0 To: Nathan Scott CC: "Frank Ch. Eigler" , pcp@oss.sgi.com Subject: Re: [pcp] pmServiceDiscoveryInterrupt() commit a8b87e2 et al. References: <20140619194444.3B03D58015@fche.csb> <53AB0F27.602@redhat.com> <1063089485.33910956.1403758262805.JavaMail.zimbra@redhat.com> X-ASG-Orig-Subj: Re: [pcp] pmServiceDiscoveryInterrupt() commit a8b87e2 et al. In-Reply-To: <1063089485.33910956.1403758262805.JavaMail.zimbra@redhat.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.22 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1403794697 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On 06/26/2014 12:51 AM, Nathan Scott wrote: >> There is now a new expanded API, pmDiscoverServicesAdvanced(1) -- name >> is not set in stone should anyone be able to think of a better one. See > pmDiscoverServicesExtended(3)? (or Expanded?). Hmmm, not really all that different really. The reason I am unsure of Advanced/Extended/Expanded is that, if we were to need another variant down the road, we will have reached a bit of a dead end when it comes to naming it. Perhaps the name should describe the actual enhancement -- pmDiscoverServicesWithOptions(3)? Perhaps this is all just bike-shedding. > > Also, the whitespace police called and sent through the attached patch > (and make some persnickety comments about that new function in pmfind.c). Merged and pushed. Which function, BTW? Dave From jpwhite4@buffalo.edu Thu Jun 26 12:29:59 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HTML_MESSAGE autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id B6D3B7F83 for ; Thu, 26 Jun 2014 12:29:59 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 931B0304059 for ; Thu, 26 Jun 2014 10:29:56 -0700 (PDT) X-ASG-Debug-ID: 1403803793-04cb6c76d0313d80001-S8gJnT Received: from appmailD.acsu.buffalo.edu (appmaild.acsu.buffalo.edu [128.205.5.237]) by cuda.sgi.com with ESMTP id uXyfiiQRMOjK9UJo for ; Thu, 26 Jun 2014 10:29:53 -0700 (PDT) X-Barracuda-Envelope-From: jpwhite4@buffalo.edu X-Barracuda-Apparent-Source-IP: 128.205.5.237 Received: from appmailD.acsu.buffalo.edu (localhost [127.0.0.1]) by localhost (Postfix) with SMTP id 399D01F239 for ; Thu, 26 Jun 2014 13:29:53 -0400 (EDT) Received: from appmailD.acsu.buffalo.edu (localhost [127.0.0.1]) by appmailD.acsu.buffalo.edu (Postfix) with ESMTP id 3B36F1F213 for ; Thu, 26 Jun 2014 13:29:51 -0400 (EDT) Received: from cas-nr2.itorg.ad.buffalo.edu (cas-nr2.acsu.buffalo.edu [128.205.6.43]) by appmailD.acsu.buffalo.edu (Prefixe) with ESMTP id 333831F212 for ; Thu, 26 Jun 2014 13:29:51 -0400 (EDT) Received: from MB-LS1.itorg.ad.buffalo.edu ([169.254.1.165]) by cas-nr2.itorg.ad.buffalo.edu ([128.205.6.43]) with mapi id 14.03.0195.001; Thu, 26 Jun 2014 13:29:50 -0400 From: "White, Joseph" To: "pcp@oss.sgi.com" Subject: New perfevent PMDA Thread-Topic: New perfevent PMDA X-ASG-Orig-Subj: New perfevent PMDA Thread-Index: AQHPkWQ7+Of6murkTkSMtOpXHkooOQ== Date: Thu, 26 Jun 2014 17:29:50 +0000 Message-ID: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: user-agent: Microsoft-MacOutlook/14.4.2.140509 x-originating-ip: [8.35.174.223] Content-Type: multipart/mixed; boundary="_004_CFD1D0CDC138jpwhite4buffaloedu_" MIME-Version: 1.0 X-PM-Spam-Prob: : 8% X-Barracuda-Connect: appmaild.acsu.buffalo.edu[128.205.5.237] X-Barracuda-Start-Time: 1403803793 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=HTML_MESSAGE, THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6970 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 0.00 HTML_MESSAGE BODY: HTML included in message --_004_CFD1D0CDC138jpwhite4buffaloedu_ Content-Type: multipart/alternative; boundary="_000_CFD1D0CDC138jpwhite4buffaloedu_" --_000_CFD1D0CDC138jpwhite4buffaloedu_ Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SGksDQoNCkF0dGFjaGVkIGlzIGEgcGVyZmV2ZW50IFBNREEgZm9yIGdlbmVyYWwgcmV2aWV3L2Nv bW1lbnRzL3N1Z2dlc3Rpb25zLiBUaGlzIGxpbnV4LXNwZWNpZmljIHBtZGEgZXhwb3NlcyB0aGUg aGFyZHdhcmUgcGVyZm9ybWFuY2UgY291bnRlcnMgYXZhaWxhYmxlIG9uIHJlY2VudCB4ODYgc3lz dGVtcy4gVGhpcyBwbWRhIGhhcyBiZWVuIHJ1bm5pbmcgb24gb3VyIGNsdXN0ZXIgdGhlIGxhc3Qg MTAgbW9udGhzIHdpdGhvdXQgcHJvYmxlbXMgKEkndmUgYmVlbiBtZWFuaW5nIHRvIHN1Ym1pdCB0 aGlzIGZvciBpbmNsdXNpb24gZm9yIGEgd2hpbGUhKS4NCg0KTm90ZXM6DQoNClRoZSBQTURBIHVz ZXMgdGhlIGxpYnBmbTQgbGlicmFyeSB0byBhY2Nlc3MgdGhlIGhhcmR3YXJlIHBlcmZvcm1hbmNl IGNvdW50ZXJzIHNvIGFueSBjb3VudGVycyB0aGF0IGFyZSBzdXBwb3J0ZWQgaW4gbGlicGZtNCBz aG91bGQgYmUgYXZhaWxhYmxlLiBBbHNvIGluY2x1ZGVkIGlzIHRoZSBhYmlsaXR5IHRvIHJlYWQg dGhlIEludGVsIFJBUEwgY291bnRlcnMgdmlhIGRpcmVjdCBNU1IgYWNjZXNzLg0KDQpUaGUgUE1E QSBzdXBwb3J0cyBhdXRvbWF0aWNhbGx5IGxvYWRpbmcgZGlmZmVyZW50IGNvdW50ZXJzIGZvciBl YWNoIGhhcmR3YXJlIGFyY2hpdGVjdHVyZS4gQSBzaW5nbGUgY29uZmlndXJhdGlvbiBmaWxlIGlz IHVzZWQgdG8gc3BlY2lmeSB0aGUgZGVzaXJlZCBjb3VudGVycyBmb3IgZWFjaCBjaGlwc2V0IGZh bWlseS4gVGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBhbGxvd3MgZGlmZmVyZW50IGNvdW50ZXJzIHRv IGJlIHByb2dyYW1tZWQgb24gZGlmZmVyZW50IENQVXMgYW5kIHN1cHBvcnRzIHJvdW5kLXJvYmlu IGFzc2lnbm1lbnQgb2YgdW5jb3JlIGNvdW50ZXJzIG5lZWRlZCBmb3Igc29tZSBBTUQgY2hpcHMu IFRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gaXMga25vd24gdG8gd29yayBvbiBJbnRlbCBTYW5k eWJyaWRnZSBFUCwgSW50ZWwgV2VzdG1lcmUgRFAsIEludGVsIE5laGFsZW0gRVggYW5kIEludGVs IENvcmUyIGNoaXBzZXRzLg0KDQpUaGUgUE1EQSBhY2Nlc3NlcyB0aGUgc3lzdGVtLXdpZGUgaGFy ZHdhcmUgY291bnRlcnMgYW5kIHJ1bnMgYXMgcm9vdC4gVGhpcyBtZWFucyB0aGF0IHRoZSBoYXJk d2FyZSBjb3VudGVycyBhcmUgdW5hdmFpbGFibGUgdG8gdXNlIGJ5IG5vcm1hbCB1bnByaXZpbGVn ZWQgdXNlciBhcHBsaWNhdGlvbnMgd2hlbiB0aGV5IGFyZSBpbiB1c2UgYnkgdGhlIFBNREEuIFRo ZSBQTURBIHByb3ZpZGVzIGEgbWVjaGFuaXNtIHRvIHRlbXBvcmFyaWx5IGRpc2FibGUgdGhlIHN5 c3RlbS13aWRlIGNvdW50ZXJzIGluIG9yZGVyIHRvIGFsbG93IG5vcm1hbCB1c2VycyB0byBiZSBh YmxlIHRvIHVzZSB0aGUgY291bnRlcnMgaWYgdGhleSB3aXNoLg0KDQpCdWlsZCByZXF1aXJlbWVu dHM6DQotIGxpYnBmbTQNCi0gZmxleA0KDQpDaGVlcnMsDQoNCkpvZQ0KDQoNCg== --_000_CFD1D0CDC138jpwhite4buffaloedu_ Content-Type: text/html; charset="utf-8" Content-ID: <1D157784EBA2EF49B7DBF11077BFDBBD@buffalo.edu> Content-Transfer-Encoding: base64 PGh0bWw+DQo8aGVhZD4NCjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0i dGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4NCjwvaGVhZD4NCjxib2R5IHN0eWxlPSJ3b3JkLXdy YXA6IGJyZWFrLXdvcmQ7IC13ZWJraXQtbmJzcC1tb2RlOiBzcGFjZTsgLXdlYmtpdC1saW5lLWJy ZWFrOiBhZnRlci13aGl0ZS1zcGFjZTsgY29sb3I6IHJnYigwLCAwLCAwKTsgZm9udC1zaXplOiAx NHB4OyBmb250LWZhbWlseTogQ2FsaWJyaSwgc2Fucy1zZXJpZjsiPg0KPGRpdj5IaSw8L2Rpdj4N CjxkaXY+PGJyPg0KPC9kaXY+DQo8ZGl2PkF0dGFjaGVkIGlzIGEgcGVyZmV2ZW50IFBNREEgZm9y IGdlbmVyYWwgcmV2aWV3L2NvbW1lbnRzL3N1Z2dlc3Rpb25zLiBUaGlzIGxpbnV4LXNwZWNpZmlj IHBtZGEgZXhwb3NlcyB0aGUgaGFyZHdhcmUgcGVyZm9ybWFuY2UgY291bnRlcnMgYXZhaWxhYmxl IG9uIHJlY2VudCB4ODYgc3lzdGVtcy4gVGhpcyBwbWRhIGhhcyBiZWVuIHJ1bm5pbmcgb24gb3Vy IGNsdXN0ZXIgdGhlIGxhc3QgMTAgbW9udGhzIHdpdGhvdXQgcHJvYmxlbXMgKEkndmUNCiBiZWVu IG1lYW5pbmcgdG8gc3VibWl0IHRoaXMgZm9yIGluY2x1c2lvbiBmb3IgYSB3aGlsZSEpLiZuYnNw OzwvZGl2Pg0KPGRpdj48YnI+DQo8L2Rpdj4NCjxkaXY+Tm90ZXM6PC9kaXY+DQo8ZGl2Pjxicj4N CjwvZGl2Pg0KPGRpdj5UaGUgUE1EQSB1c2VzIHRoZSBsaWJwZm00IGxpYnJhcnkgdG8gYWNjZXNz IHRoZSBoYXJkd2FyZSBwZXJmb3JtYW5jZSBjb3VudGVycyBzbyBhbnkgY291bnRlcnMgdGhhdCBh cmUgc3VwcG9ydGVkIGluIGxpYnBmbTQgc2hvdWxkIGJlIGF2YWlsYWJsZS4gQWxzbyBpbmNsdWRl ZCBpcyB0aGUgYWJpbGl0eSB0byByZWFkIHRoZSBJbnRlbCBSQVBMIGNvdW50ZXJzIHZpYSBkaXJl Y3QgTVNSIGFjY2Vzcy48L2Rpdj4NCjxkaXY+PGJyPg0KPC9kaXY+DQo8ZGl2PlRoZSBQTURBIHN1 cHBvcnRzIGF1dG9tYXRpY2FsbHkgbG9hZGluZyBkaWZmZXJlbnQgY291bnRlcnMgZm9yIGVhY2gg aGFyZHdhcmUgYXJjaGl0ZWN0dXJlLiBBIHNpbmdsZSBjb25maWd1cmF0aW9uIGZpbGUgaXMgdXNl ZCB0byBzcGVjaWZ5IHRoZSBkZXNpcmVkIGNvdW50ZXJzIGZvciBlYWNoIGNoaXBzZXQgZmFtaWx5 LiBUaGUgY29uZmlndXJhdGlvbiBmaWxlIGFsbG93cyBkaWZmZXJlbnQgY291bnRlcnMgdG8gYmUg cHJvZ3JhbW1lZCBvbg0KIGRpZmZlcmVudCBDUFVzIGFuZCBzdXBwb3J0cyByb3VuZC1yb2JpbiBh c3NpZ25tZW50IG9mIHVuY29yZSBjb3VudGVycyBuZWVkZWQgZm9yIHNvbWUgQU1EIGNoaXBzLiBU aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGlzIGtub3duIHRvIHdvcmsgb24gSW50ZWwgU2FuZHli cmlkZ2UgRVAsIEludGVsIFdlc3RtZXJlIERQLCBJbnRlbCBOZWhhbGVtIEVYIGFuZCBJbnRlbCBD b3JlMiBjaGlwc2V0cy48L2Rpdj4NCjxkaXY+PGJyPg0KPC9kaXY+DQo8ZGl2PlRoZSBQTURBIGFj Y2Vzc2VzIHRoZSBzeXN0ZW0td2lkZSBoYXJkd2FyZSBjb3VudGVycyBhbmQgcnVucyBhcyByb290 LiBUaGlzIG1lYW5zIHRoYXQgdGhlIGhhcmR3YXJlIGNvdW50ZXJzIGFyZSB1bmF2YWlsYWJsZSB0 byB1c2UgYnkgbm9ybWFsIHVucHJpdmlsZWdlZCB1c2VyIGFwcGxpY2F0aW9ucyB3aGVuIHRoZXkg YXJlIGluIHVzZSBieSB0aGUgUE1EQS4gVGhlIFBNREEgcHJvdmlkZXMgYSBtZWNoYW5pc20gdG8g dGVtcG9yYXJpbHkgZGlzYWJsZQ0KIHRoZSBzeXN0ZW0td2lkZSBjb3VudGVycyBpbiBvcmRlciB0 byBhbGxvdyBub3JtYWwgdXNlcnMgdG8gYmUgYWJsZSB0byB1c2UgdGhlIGNvdW50ZXJzIGlmIHRo ZXkgd2lzaC48L2Rpdj4NCjxkaXY+PGJyPg0KPC9kaXY+DQo8ZGl2PkJ1aWxkIHJlcXVpcmVtZW50 czo8L2Rpdj4NCjxkaXY+LSBsaWJwZm00PC9kaXY+DQo8ZGl2Pi0gZmxleDwvZGl2Pg0KPGRpdj48 YnI+DQo8L2Rpdj4NCjxkaXY+Q2hlZXJzLDwvZGl2Pg0KPGRpdj48YnI+DQo8L2Rpdj4NCjxkaXY+ Sm9lPC9kaXY+DQo8ZGl2Pjxicj4NCjwvZGl2Pg0KPGRpdj48YnI+DQo8L2Rpdj4NCjwvYm9keT4N CjwvaHRtbD4NCg== --_000_CFD1D0CDC138jpwhite4buffaloedu_-- --_004_CFD1D0CDC138jpwhite4buffaloedu_ Content-Type: application/x-gzip; name="perfevent.tar.gz" Content-Description: perfevent.tar.gz Content-Disposition: attachment; filename="perfevent.tar.gz"; size=47796; creation-date="Thu, 26 Jun 2014 17:29:50 GMT"; modification-date="Thu, 26 Jun 2014 17:29:50 GMT" Content-ID: <3DCBE5A24D3E6443A82C84F03EAE2776@buffalo.edu> Content-Transfer-Encoding: base64 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 --_004_CFD1D0CDC138jpwhite4buffaloedu_-- From fche@redhat.com Thu Jun 26 15:44:09 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 311D57F8B for ; Thu, 26 Jun 2014 15:44:09 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 086778F804B for ; Thu, 26 Jun 2014 13:44:05 -0700 (PDT) X-ASG-Debug-ID: 1403815441-04cb6c76cf31ae10001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id obq8RUF5GZo8pCCL (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 26 Jun 2014 13:44:01 -0700 (PDT) X-Barracuda-Envelope-From: fche@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s5QKhwrA003323 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 26 Jun 2014 16:43:59 -0400 Received: from fche.csb (vpn-56-123.rdu2.redhat.com [10.10.56.123]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5QKhwWg017819; Thu, 26 Jun 2014 16:43:58 -0400 Received: by fche.csb (Postfix, from userid 2569) id C06F75853A; Thu, 26 Jun 2014 16:43:57 -0400 (EDT) To: "White, Joseph" Cc: "pcp@oss.sgi.com" Subject: Re: New perfevent PMDA References: X-ASG-Orig-Subj: Re: New perfevent PMDA From: fche@redhat.com (Frank Ch. Eigler) Date: Thu, 26 Jun 2014 16:43:57 -0400 In-Reply-To: (Joseph White's message of "Thu, 26 Jun 2014 17:29:50 +0000") Message-ID: User-Agent: Gnus/5.1008 (Gnus v5.10.8) Emacs/21.4 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1403815441 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Hi, Joe - > [...] This linux-specific pmda exposes the hardware performance > counters available on recent x86 systems. This pmda has been running > on our cluster the last 10 months without problems (I've been > meaning to submit this for inclusion for a while!). [...] Thank you for posting. As you probably know, we have recently started expending effort in a very similar direction, so will need to compare & contrast the two to figure out how to proceed. Can you offer a few bits of explanation? - We have considered using libpfm*/etc. also, but have been leaning toward papi, for cross-OS portability. Did you also consider this? - The systemwide permanent occupation of the hardware counters by the PMDA could easily be problematic. Did you consider on-demand enablement instead? - The configuration file appears to hard-code the perfcounters to be multiplexed/available. Did you consider automatically enumerating all the available ones on the platform instead? - Were you considering extending the PMDA to per-process or per-cgroup bindings? - FChE From jpwhite4@buffalo.edu Thu Jun 26 16:55:13 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 3EB607F8D for ; Thu, 26 Jun 2014 16:55:13 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 266B130404E for ; Thu, 26 Jun 2014 14:55:10 -0700 (PDT) X-ASG-Debug-ID: 1403819708-04cb6c76d131ccb0001-S8gJnT Received: from appmailD.acsu.buffalo.edu (appmaild.acsu.buffalo.edu [128.205.5.237]) by cuda.sgi.com with ESMTP id D4e7PlOxXvwEvDTg for ; Thu, 26 Jun 2014 14:55:08 -0700 (PDT) X-Barracuda-Envelope-From: jpwhite4@buffalo.edu X-Barracuda-Apparent-Source-IP: 128.205.5.237 Received: from appmailD.acsu.buffalo.edu (localhost [127.0.0.1]) by localhost (Postfix) with SMTP id A7CC7EBA3; Thu, 26 Jun 2014 17:55:08 -0400 (EDT) Received: from appmailD.acsu.buffalo.edu (localhost [127.0.0.1]) by appmailD.acsu.buffalo.edu (Postfix) with ESMTP id AABE2EB9F; Thu, 26 Jun 2014 17:55:07 -0400 (EDT) Received: from cas-nr1.itorg.ad.buffalo.edu (cas-nr1.acsu.buffalo.edu [128.205.6.35]) by appmailD.acsu.buffalo.edu (Prefixe) with ESMTP id A2CC2EB9D; Thu, 26 Jun 2014 17:55:07 -0400 (EDT) Received: from MB-LS1.itorg.ad.buffalo.edu ([169.254.1.165]) by cas-nr1.itorg.ad.buffalo.edu ([128.205.6.35]) with mapi id 14.03.0195.001; Thu, 26 Jun 2014 17:55:07 -0400 From: "White, Joseph" To: "Frank Ch. Eigler" CC: "pcp@oss.sgi.com" Subject: Re: New perfevent PMDA Thread-Topic: New perfevent PMDA X-ASG-Orig-Subj: Re: New perfevent PMDA Thread-Index: AQHPkWQ7+Of6murkTkSMtOpXHkooOZuD2/F2gAAT2YA= Date: Thu, 26 Jun 2014 21:55:06 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Microsoft-MacOutlook/14.4.2.140509 x-originating-ip: [128.205.40.191] Content-Type: text/plain; charset="utf-8" Content-ID: <83734DA5E183124AA92676CCA932D0C8@buffalo.edu> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-PM-Spam-Prob: : 8% X-Barracuda-Connect: appmaild.acsu.buffalo.edu[128.205.5.237] X-Barracuda-Start-Time: 1403819708 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6977 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header RnJhbmsNCg0KdGhhbmtzIGZvciB0aGUgcHJvbXB0IHJlc3BvbnNlLiBBbnN3ZXJzIGlubGluZSBi ZWxvdzoNCg0KSm9lDQoNCk9uIDYvMjYvMTQsIDQ6NDMgUE0sICJGcmFuayBDaC4gRWlnbGVyIiA8 ZmNoZUByZWRoYXQuY29tPiB3cm90ZToNCg0KPg0KPkhpLCBKb2UgLQ0KPg0KPj4gWy4uLl0gVGhp cyBsaW51eC1zcGVjaWZpYyBwbWRhIGV4cG9zZXMgdGhlIGhhcmR3YXJlIHBlcmZvcm1hbmNlDQo+ PiBjb3VudGVycyBhdmFpbGFibGUgb24gcmVjZW50IHg4NiBzeXN0ZW1zLiBUaGlzIHBtZGEgaGFz IGJlZW4gcnVubmluZw0KPj4gb24gb3VyIGNsdXN0ZXIgdGhlIGxhc3QgMTAgbW9udGhzIHdpdGhv dXQgcHJvYmxlbXMgKEkndmUgYmVlbg0KPj4gbWVhbmluZyB0byBzdWJtaXQgdGhpcyBmb3IgaW5j bHVzaW9uIGZvciBhIHdoaWxlISkuIFsuLi5dDQo+DQo+VGhhbmsgeW91IGZvciBwb3N0aW5nLiAg QXMgeW91IHByb2JhYmx5IGtub3csIHdlIGhhdmUgcmVjZW50bHkgc3RhcnRlZA0KPmV4cGVuZGlu ZyBlZmZvcnQgaW4gYSB2ZXJ5IHNpbWlsYXIgZGlyZWN0aW9uLCBzbyB3aWxsIG5lZWQgdG8gY29t cGFyZQ0KPiYgY29udHJhc3QgdGhlIHR3byB0byBmaWd1cmUgb3V0IGhvdyB0byBwcm9jZWVkLg0K Pg0KPkNhbiB5b3Ugb2ZmZXIgYSBmZXcgYml0cyBvZiBleHBsYW5hdGlvbj8NCj4NCj4tIFdlIGhh dmUgY29uc2lkZXJlZCB1c2luZyBsaWJwZm0qL2V0Yy4gYWxzbywgYnV0IGhhdmUgYmVlbiBsZWFu aW5nIHRvd2FyZA0KPiAgcGFwaSwgZm9yIGNyb3NzLU9TIHBvcnRhYmlsaXR5LiAgRGlkIHlvdSBh bHNvIGNvbnNpZGVyIHRoaXM/DQoNCkF0IHRoZSB0aW1lIHRoZSBQTURBIHdhcyB3cml0dGVuLCB0 aGUgUEFQSSBsaWJyYXJ5IGRpZG4ndCBoYXZlIHN1cHBvcnQgZm9yDQp0aGUgdW5jb3JlIGNvdW50 ZXJzIHdoaWNoIHJ1bGVkIGl0IG91dC4gSSB0aGluayBzdXBwb3J0IGZvciB1bmNvcmUgYW5kDQpz eXN0ZW0td2lkZSBjb3VudGVycyBpcyBwcmVzZW50IGluIFBBUEkgbm93LCBzbyB0aGlzIGlzIG5v IGxvbmdlciBhbg0KaXNzdWUuICANCg0KPg0KPi0gVGhlIHN5c3RlbXdpZGUgcGVybWFuZW50IG9j Y3VwYXRpb24gb2YgdGhlIGhhcmR3YXJlIGNvdW50ZXJzIGJ5IHRoZQ0KPiAgUE1EQSBjb3VsZCBl YXNpbHkgYmUgcHJvYmxlbWF0aWMuICBEaWQgeW91IGNvbnNpZGVyIG9uLWRlbWFuZA0KPiAgZW5h YmxlbWVudCBpbnN0ZWFkPw0KDQpUaGUgUE1EQSBkb2VzIGhhdmUgc3VwcG9ydCBmb3IgZGlzYWJs aW5nIHRoZSBhbGwgb2YgY291bnRlcnMgb24tZGVtYW5kLA0KYnV0IG5vdCBvbiBhbiBpbmRpdmlk dWFsIGJhc2lzLiBUaGUgZGVmYXVsdCBpcyBmb3IgdGhlIGNvdW50ZXJzIHRvIGJlDQplbmFibGVk IGFuZCB0aGV5IGFyZSBhbGwgZGlzYWJsZWQgYnkgbG9ja2luZyBhICh3b3JsZCByZWFkYWJsZSkg bG9jayBmaWxlLg0KVGhlIG1vdGl2YXRpb24gZm9yIHRoaXMgZGVzaWduIGlzIHRoYXQgdGhlIHZh c3QgbWFqb3JpdHkgb2Ygb3VyIHVzZXJzDQpkb24ndCB1c2UgdGhlIGNvdW50ZXJzLCBidXQgd2Ug YXJlIGludGVyZXN0aW5nIGluIGxvZ2dpbmcgdGhlbS4gVGhlIHVzZXJzDQp0aGF0IHdhbnQgdG8g dXNlIHRoZSBjb3VudGVycyBjYW4gZ2V0IGZ1bGwgYWNjZXNzIGJ5IGxvY2tpbmcgdGhlIGxvY2tm aWxlDQoob3IgcnVubmluZyB0aGUgcHJvdmlkZWQgYmluYXJ5IHdoaWNoIGxvY2tzIHRoZSBmaWxl IGFuZCB0aGVuIHNsZWVwcw0KaW5kZWZpbml0ZWx5KS4gVGhlIGxvY2tmaWxlIGFwcHJvYWNoIHdh cyBjaG9zZW4gYXMgYSB3YXkgdG8gZ3VhcmFudGVlIHRoYXQNCnRoZSBjb3VudGVycyBnZXQgYXV0 b21hdGljYWxseSByZS1lbmFibGVkIHdoZW4gdGhlIHVzZXIncyBqb2IgZW5kcyAoc2luY2UNCnRo ZWlyIHByb2Nlc3NlcyBhcmUgYXV0b21hdGljYWxseSBraWxsZWQgYnkgdGhlIHJlc291cmNlIG1h bmFnZXIgYXQgam9iDQplbmQgdGltZSBhbmQgdGhlIGtlcm5lbCBhdXRvbWF0aWNhbGx5IGNsZWFu cyB1cCB0aGUgbG9jaykuDQoNCj4NCj4tIFRoZSBjb25maWd1cmF0aW9uIGZpbGUgYXBwZWFycyB0 byBoYXJkLWNvZGUgdGhlIHBlcmZjb3VudGVycyB0byBiZQ0KPiAgbXVsdGlwbGV4ZWQvYXZhaWxh YmxlLiAgRGlkIHlvdSBjb25zaWRlciBhdXRvbWF0aWNhbGx5IGVudW1lcmF0aW5nDQo+ICBhbGwg dGhlIGF2YWlsYWJsZSBvbmVzIG9uIHRoZSBwbGF0Zm9ybSBpbnN0ZWFkPw0KDQpJIGRvbid0IHVu ZGVyc3RhbmQgeW91ciBxdWVzdGlvbi4gVGhlIGNvZGUgY2hlY2tzIHdoaWNoIGhhcmR3YXJlIFBN VXMgYXJlDQphdmFpbGFibGUgYW5kIHRoZW4gZW51bWVyYXRlcyB0aGUgYXZhaWxhYmxlIGNvdW50 ZXJzLiBUaGUgY29kZSB0aGVuDQplbmFibGVzIHRoZSBjb3VudGVycyB0aGF0IGFyZSBzcGVjaWZp ZWQgaW4gdGhlIHJlbGV2YW50IGhhcmR3YXJlIFBNVQ0Kc2VjdGlvbiBpbiB0aGUgY29uZmlndXJh dGlvbiBmaWxlLiBPbmx5IHRoZSBjb3VudGVycyB0aGF0IGFyZSBwcmVzZW50IG9uDQp0aGUgaGFy ZHdhcmUgZ2V0IGxvYWRlZC4gVGhpcyBtZWNoYW5pc20gYWxsb3dzIHRoZSBzYW1lIGNvbmZpZ3Vy YXRpb24gZmlsZQ0KdG8gd29yayBvbiBtdWx0aXBsZSBkaWZmZXJlbnQgaGFyZHdhcmUgdmFyaWFu dHMsIHNvIHNpbXBsaWZpZXMgdGhlDQpkZXBsb3ltZW50IHByb2Nlc3MuDQoNCj4NCj4tIFdlcmUg eW91IGNvbnNpZGVyaW5nIGV4dGVuZGluZyB0aGUgUE1EQSB0byBwZXItcHJvY2VzcyBvciBwZXIt Y2dyb3VwDQo+ICBiaW5kaW5ncz8NCg0KSSBoYWQgbm8gY3VycmVudCBwbGFucyB0byBkbyB0aGlz LCBob3dldmVyIHRoaXMgc29ydCBvZiB0aGluZyBpcw0KaW50ZXJlc3RpbmcgYXNzdW1pbmcgdGhl IHByb2Nlc3Npbmcgb3ZlcmhlYWQgaXMgbm90IHRvbyBoaWdoLg0KDQo+DQo+DQo+LSBGQ2hFDQoN Cg== From fche@redhat.com Thu Jun 26 17:01:56 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id AD43B7F8E for ; Thu, 26 Jun 2014 17:01:56 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 9461E304062 for ; Thu, 26 Jun 2014 15:01:56 -0700 (PDT) X-ASG-Debug-ID: 1403820111-04cbb065371493c0001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id Q8ZFVnP2sh6vZVxj (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 26 Jun 2014 15:01:52 -0700 (PDT) X-Barracuda-Envelope-From: fche@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s5QM1oDZ023881 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 26 Jun 2014 18:01:50 -0400 Received: from fche.csb (vpn-56-123.rdu2.redhat.com [10.10.56.123]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5QM1oMb019680; Thu, 26 Jun 2014 18:01:50 -0400 Received: by fche.csb (Postfix, from userid 2569) id 97E2A5853A; Thu, 26 Jun 2014 18:01:49 -0400 (EDT) Date: Thu, 26 Jun 2014 18:01:49 -0400 From: "Frank Ch. Eigler" To: "White, Joseph" Cc: "pcp@oss.sgi.com" Subject: Re: New perfevent PMDA Message-ID: <20140626220149.GB29542@redhat.com> X-ASG-Orig-Subj: Re: New perfevent PMDA References: Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.4.2.2i X-Scanned-By: MIMEDefang 2.68 on 10.5.11.24 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1403820112 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Hi - > > [...] > >- The configuration file appears to hard-code the perfcounters to be > > multiplexed/available. Did you consider automatically enumerating > > all the available ones on the platform instead? > > I don't understand your question. The code checks which hardware PMUs are > available and then enumerates the available counters. The code then > enables the counters that are specified in the relevant hardware PMU > section in the configuration file. [...] To clarify, I wonder what value the configuration file brings. If we can enumerate hardware-available counters based on the lower-level library, why not represent apprx. all of them to the PMNS? - FChE From jpwhite4@buffalo.edu Thu Jun 26 18:09:38 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id C76177F92 for ; Thu, 26 Jun 2014 18:09:38 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 8EB778F8037 for ; Thu, 26 Jun 2014 16:09:34 -0700 (PDT) X-ASG-Debug-ID: 1403824169-04bdf0566868abf0001-S8gJnT Received: from appmailD.acsu.buffalo.edu (appmaild.acsu.buffalo.edu [128.205.5.237]) by cuda.sgi.com with ESMTP id fn1mlNt9UPvNkoXR for ; Thu, 26 Jun 2014 16:09:29 -0700 (PDT) X-Barracuda-Envelope-From: jpwhite4@buffalo.edu X-Barracuda-Apparent-Source-IP: 128.205.5.237 Received: from appmailD.acsu.buffalo.edu (localhost [127.0.0.1]) by localhost (Postfix) with SMTP id F09962FC59; Thu, 26 Jun 2014 19:09:28 -0400 (EDT) Received: from appmailD.acsu.buffalo.edu (localhost [127.0.0.1]) by appmailD.acsu.buffalo.edu (Postfix) with ESMTP id 51AA72FC52; Thu, 26 Jun 2014 19:09:28 -0400 (EDT) Received: from cas-nr2.itorg.ad.buffalo.edu (cas-nr2.acsu.buffalo.edu [128.205.6.43]) by appmailD.acsu.buffalo.edu (Prefixe) with ESMTP id 485252FC51; Thu, 26 Jun 2014 19:09:28 -0400 (EDT) Received: from MB-LS1.itorg.ad.buffalo.edu ([169.254.1.165]) by cas-nr2.itorg.ad.buffalo.edu ([128.205.6.43]) with mapi id 14.03.0195.001; Thu, 26 Jun 2014 19:09:27 -0400 From: "White, Joseph" To: "Frank Ch. Eigler" CC: "pcp@oss.sgi.com" Subject: Re: New perfevent PMDA Thread-Topic: New perfevent PMDA X-ASG-Orig-Subj: Re: New perfevent PMDA Thread-Index: AQHPkWQ7+Of6murkTkSMtOpXHkooOZuD2/F2gAAT2YCAAETwgP//z9YA Date: Thu, 26 Jun 2014 23:09:27 +0000 Message-ID: References: <20140626220149.GB29542@redhat.com> In-Reply-To: <20140626220149.GB29542@redhat.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Microsoft-MacOutlook/14.4.2.140509 x-originating-ip: [128.205.40.191] Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-PM-Spam-Prob: : 8% X-Barracuda-Connect: appmaild.acsu.buffalo.edu[128.205.5.237] X-Barracuda-Start-Time: 1403824169 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6979 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header VGhlIHJlYXNvbiBmb3IgY2hvb3NpbmcgYSBsaW1pdGVkIHNldCBvZiBldmVudHMgaXMgdGhhdCBp ZiB5b3UgZW5hYmxlIGFsbA0KcG9zc2libGUgYXZhaWxhYmxlIGV2ZW50cyB0aGVuIHRoZXkgZWFj aCBnZXQgYSBsb3cgZHV0eWN5Y2xlIGFuZCBoZW5jZSBhDQpoaWdoIHNhbXBsaW5nIGVycm9yLiBP biBteSBJbnRlbCBDb3JlMiBib3ggaWYgeW91IGVuYWJsZSBhbGwgb2YgdGhlDQpwb3NzaWJsZSBj b3JlIFBNVSBldmVudHMgdGhlbiB0aGUgZHV0eWN5Y2xlIHZhcmllcyBmcm9tIDEwXi0yIHRvIDEw Xi00DQpkZXBlbmRpbmcgb24gdGhlIGV2ZW50Lg0KDQpKb2UNCg0KT24gNi8yNi8xNCwgNjowMSBQ TSwgIkZyYW5rIENoLiBFaWdsZXIiIDxmY2hlQHJlZGhhdC5jb20+IHdyb3RlOg0KDQo+SGkgLQ0K Pg0KPj4gPiBbLi4uXQ0KPj4gPi0gVGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBhcHBlYXJzIHRvIGhh cmQtY29kZSB0aGUgcGVyZmNvdW50ZXJzIHRvIGJlDQo+PiA+ICBtdWx0aXBsZXhlZC9hdmFpbGFi bGUuICBEaWQgeW91IGNvbnNpZGVyIGF1dG9tYXRpY2FsbHkgZW51bWVyYXRpbmcNCj4+ID4gIGFs bCB0aGUgYXZhaWxhYmxlIG9uZXMgb24gdGhlIHBsYXRmb3JtIGluc3RlYWQ/DQo+PiANCj4+IEkg ZG9uJ3QgdW5kZXJzdGFuZCB5b3VyIHF1ZXN0aW9uLiBUaGUgY29kZSBjaGVja3Mgd2hpY2ggaGFy ZHdhcmUgUE1Vcw0KPj5hcmUNCj4+IGF2YWlsYWJsZSBhbmQgdGhlbiBlbnVtZXJhdGVzIHRoZSBh dmFpbGFibGUgY291bnRlcnMuIFRoZSBjb2RlIHRoZW4NCj4+IGVuYWJsZXMgdGhlIGNvdW50ZXJz IHRoYXQgYXJlIHNwZWNpZmllZCBpbiB0aGUgcmVsZXZhbnQgaGFyZHdhcmUgUE1VDQo+PiBzZWN0 aW9uIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUuIFsuLi5dDQo+DQo+VG8gY2xhcmlmeSwgSSB3 b25kZXIgd2hhdCB2YWx1ZSB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGJyaW5ncy4gIElmIHdlDQo+ Y2FuIGVudW1lcmF0ZSBoYXJkd2FyZS1hdmFpbGFibGUgY291bnRlcnMgYmFzZWQgb24gdGhlIGxv d2VyLWxldmVsDQo+bGlicmFyeSwgd2h5IG5vdCByZXByZXNlbnQgYXBwcnguIGFsbCBvZiB0aGVt IHRvIHRoZSBQTU5TPw0KPg0KPg0KPi0gRkNoRQ0KDQo= From nscott@redhat.com Thu Jun 26 19:24:50 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 7311D7F90 for ; Thu, 26 Jun 2014 19:24:50 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 3A34C8F8068 for ; Thu, 26 Jun 2014 17:24:50 -0700 (PDT) X-ASG-Debug-ID: 1403828684-04cb6c76d1320660001-S8gJnT Received: from mx6-phx2.redhat.com (mx6-phx2.redhat.com [209.132.183.39]) by cuda.sgi.com with ESMTP id hW54Rprpio9hicjN for ; Thu, 26 Jun 2014 17:24:45 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.39 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx6-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5R0OfbF001976; Thu, 26 Jun 2014 20:24:41 -0400 Date: Thu, 26 Jun 2014 20:24:41 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: Ken McDonell Cc: pcp@oss.sgi.com Message-ID: <1601784038.34470385.1403828681147.JavaMail.zimbra@redhat.com> In-Reply-To: <04d301cf912d$fb482980$f1d87c80$@internode.on.net> References: <04d301cf912d$fb482980$f1d87c80$@internode.on.net> Subject: Re: [pcp] pcp 3.9.5 build failure on ia64 & suse MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [pcp] pcp 3.9.5 build failure on ia64 & suse Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.12] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: pcp 3.9.5 build failure on ia64 & suse Thread-Index: Ac+RLWuGgOKZiQhbQ52FHmRc3jOGA93riqsG X-Barracuda-Connect: mx6-phx2.redhat.com[209.132.183.39] X-Barracuda-Start-Time: 1403828684 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6981 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Hi Ken, ----- Original Message ----- > Makepkgs dies thusly ... > > checking build system type... ia64-suse-linux-gnu > checking host system type... ia64-suse-linux-gnu > checking target system type... Invalid configuration `noarch-suse-linux': > machine `noarch-suse' not recognized > configure: error: /bin/sh ./config.sub noarch-suse-linux failed > error: Bad exit status from /var/tmp/rpm-tmp.24587 (%build) I think Dave fixed this recently (or something very similar), its sitting in his dev branch queued with the most recent iterations on discovery work he's doing. I'll cherry-pick it today - and check if its been applied to pcp.conf.in as well. cheers. -- Nathan From nscott@redhat.com Thu Jun 26 19:33:54 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 2E2C37F9C for ; Thu, 26 Jun 2014 19:33:54 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id EC9EB8F8035 for ; Thu, 26 Jun 2014 17:33:53 -0700 (PDT) X-ASG-Debug-ID: 1403829232-04bdf0566968d120001-S8gJnT Received: from mx5-phx2.redhat.com (mx5-phx2.redhat.com [209.132.183.37]) by cuda.sgi.com with ESMTP id AFUfCC6MQCvrbDH6 for ; Thu, 26 Jun 2014 17:33:52 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.37 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx5-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5R0Xq3i027436; Thu, 26 Jun 2014 20:33:52 -0400 Date: Thu, 26 Jun 2014 20:33:51 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: Dave Brolley Cc: "Frank Ch. Eigler" , pcp@oss.sgi.com Message-ID: <1193390011.34470957.1403829231937.JavaMail.zimbra@redhat.com> In-Reply-To: <53AC35B8.3000802@redhat.com> References: <20140619194444.3B03D58015@fche.csb> <53AB0F27.602@redhat.com> <1063089485.33910956.1403758262805.JavaMail.zimbra@redhat.com> <53AC35B8.3000802@redhat.com> Subject: Re: [pcp] pmServiceDiscoveryInterrupt() commit a8b87e2 et al. MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [pcp] pmServiceDiscoveryInterrupt() commit a8b87e2 et al. Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.12] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: pmServiceDiscoveryInterrupt() commit a8b87e2 et al. Thread-Index: odgSRIE01NjIAwLMo56gQttxpqLGSw== X-Barracuda-Connect: mx5-phx2.redhat.com[209.132.183.37] X-Barracuda-Start-Time: 1403829232 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.03 X-Barracuda-Spam-Status: No, SCORE=0.03 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA_TO_FROM_DOMAIN_MATCH, THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6981 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 0.01 BSF_SC0_SA_TO_FROM_DOMAIN_MATCH Sender Domain Matches Recipient Domain Hi Dave, ----- Original Message ----- > On 06/26/2014 12:51 AM, Nathan Scott wrote: > >> There is now a new expanded API, pmDiscoverServicesAdvanced(1) -- name > >> is not set in stone should anyone be able to think of a better one. See > > pmDiscoverServicesExtended(3)? (or Expanded?). > Hmmm, not really all that different really. The reason I am unsure of > Advanced/Extended/Expanded is that, if we were to need another variant > down the road, we will have reached a bit of a dead end when it comes to > naming it. Perhaps the name should describe the actual enhancement -- > pmDiscoverServicesWithOptions(3)? Perhaps this is all just bike-shedding. Ayup, 'tis a near-perfect bike shed. If we think there's a good chance we'll be changing it again, at this stage, we should not be exposing this stuff at the PMAPI level yet. We could go for use of the ever-delightful double-underscore routines? (and down the track, we can promote into the PMAPI once clarity arrives and we are more sure of ourselves). Or, the pmDiscoverServicesWithOptions name would be fine too, though it misses out on the new "interrupted" component I guess ... your call, but it would be disappointing to see a third PMAPI addition anytime soon. Ratcheting up the developer-pain-level (for ourselves I mean) by starting to document these APIs in the Programmers Guide too, might provide more incentive to stabilise the API. ;) > > Also, the whitespace police called and sent through the attached patch > > (and make some persnickety comments about that new function in pmfind.c). > Merged and pushed. Which function, BTW? Heh, bit of an obscure reference - I meant setupSignals() - its GNU-style and looks like it arrived from outer space, relative to the code around it - was it cut+pasted from somewhere? cheers. -- Nathan From nscott@redhat.com Thu Jun 26 19:44:22 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 536B07F9B for ; Thu, 26 Jun 2014 19:44:22 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 3B7338F8054 for ; Thu, 26 Jun 2014 17:44:22 -0700 (PDT) X-ASG-Debug-ID: 1403829860-04cb6c76d2320fa0001-S8gJnT Received: from mx6-phx2.redhat.com (mx6-phx2.redhat.com [209.132.183.39]) by cuda.sgi.com with ESMTP id p3QUvMg3EIUGSExO for ; Thu, 26 Jun 2014 17:44:20 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.39 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx6-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5R0iHfo006407; Thu, 26 Jun 2014 20:44:17 -0400 Date: Thu, 26 Jun 2014 20:44:17 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: "Frank Ch. Eigler" , Joseph White Cc: pcp@oss.sgi.com Message-ID: <1005571361.34471510.1403829857835.JavaMail.zimbra@redhat.com> In-Reply-To: References: Subject: Re: [pcp] New perfevent PMDA MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [pcp] New perfevent PMDA Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.12] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: New perfevent PMDA Thread-Index: 3keZqFA28wPtEUcAQ7svqcZIc15NKA== X-Barracuda-Connect: mx6-phx2.redhat.com[209.132.183.39] X-Barracuda-Start-Time: 1403829860 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.03 X-Barracuda-Spam-Status: No, SCORE=0.03 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA_TO_FROM_DOMAIN_MATCH, THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6981 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 0.01 BSF_SC0_SA_TO_FROM_DOMAIN_MATCH Sender Domain Matches Recipient Domain ----- Original Message ----- > > [...] This linux-specific pmda exposes the hardware performance > > counters available on recent x86 systems. This pmda has been running > > on our cluster the last 10 months without problems (I've been > > meaning to submit this for inclusion for a while!). [...] > > Thank you for posting. As you probably know, we have recently started > expending effort in a very similar direction, so will need to compare > & contrast the two to figure out how to proceed. Please be aware that the wording of this sentence could be interpreted as the "we" (who recently started expending effort...) "will need to compare and contrast..." before anything can progress in terms of including this new PMDA with the rest of PCP - which is not the case. In reality, no comparing and contrasting is *needed* at all (but it would be a good idea, for each implementation to learn from the other). PCP has an architecture that will allow both PMDAs to exist side-by-side in the git tree and in the binary packages that are shipped, of course. I'm a bit snowed under atm, but I am expecting to take a closer look next week at both these PMDAs (with the expectation that both will be merged at some point). I note with great delight that you already have several test programs, Joe. Can you describe how to build & run those - ideally we'd be including those in the pcp-testsuite, then many more people will be running those tests all the time. Martins has some experience doing this, it might help to talk directly with him too. cheers. -- Nathan From nscott@redhat.com Thu Jun 26 20:20:43 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 061F87F96 for ; Thu, 26 Jun 2014 20:20:43 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id C350B8F8037 for ; Thu, 26 Jun 2014 18:20:39 -0700 (PDT) X-ASG-Debug-ID: 1403832034-04bdf0566868e770001-S8gJnT Received: from mx6-phx2.redhat.com (mx6-phx2.redhat.com [209.132.183.39]) by cuda.sgi.com with ESMTP id B4fnf4LqfrMOteoz for ; Thu, 26 Jun 2014 18:20:34 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.39 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx6-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5R1KUV8012511; Thu, 26 Jun 2014 21:20:31 -0400 Date: Thu, 26 Jun 2014 21:20:30 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: Ken McDonell Cc: pcp@oss.sgi.com Message-ID: <1907775487.34476034.1403832030935.JavaMail.zimbra@redhat.com> In-Reply-To: <1601784038.34470385.1403828681147.JavaMail.zimbra@redhat.com> References: <04d301cf912d$fb482980$f1d87c80$@internode.on.net> <1601784038.34470385.1403828681147.JavaMail.zimbra@redhat.com> Subject: Re: [pcp] pcp 3.9.5 build failure on ia64 & suse MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [pcp] pcp 3.9.5 build failure on ia64 & suse Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.12] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: pcp 3.9.5 build failure on ia64 & suse Thread-Index: Ac+RLWuGgOKZiQhbQ52FHmRc3jOGA93riqsG7hkfOwk= X-Barracuda-Connect: mx6-phx2.redhat.com[209.132.183.39] X-Barracuda-Start-Time: 1403832034 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6982 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Hi Ken, ----- Original Message ----- > [...] > I think Dave fixed this recently (or something very similar), its > sitting in his dev branch queued with the most recent iterations on > discovery work he's doing. I'll cherry-pick it today - and check > if its been applied to pcp.conf.in as well. That fix is closely related but is not going to help you (its Fedora/ EPEL/RHEL-specific). It seems this "BuildArch: noarch" tag requires RPM 4.6.0 or higher - is the SuSE build machine you are using at a lower version? Assuming it is, I guess we'll need to make pcp.spec.in have a guard around it based on rpm --version info. Could add this to build/rpm/GNUmakefile and drive it into pcp.spec.in when its generated in there? cheers. -- Nathan From kenj@internode.on.net Thu Jun 26 22:48:58 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 927607F9D for ; Thu, 26 Jun 2014 22:48:58 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 7870030404E for ; Thu, 26 Jun 2014 20:48:55 -0700 (PDT) X-ASG-Debug-ID: 1403840929-04cbb06535153a00001-S8gJnT Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id XUGJmK4C7RjQHkCf for ; Thu, 26 Jun 2014 20:48:49 -0700 (PDT) X-Barracuda-Envelope-From: kenj@internode.on.net X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Aiw7APzorFN20YDzPGdsb2JhbABbgw1Sg0iEN70DAYEHFwQBAQEBODWEAwEBBQgCGTMjDAEDAgYDEQQBAQMCIwMCAhkgCgMJCAIEEwsFiDGlN50wF4ErjVUHBoJxgUwFkG2hNSs Received: from ppp118-209-128-243.lns20.mel6.internode.on.net (HELO bozohorize) ([118.209.128.243]) by ipmail04.adl6.internode.on.net with ESMTP; 27 Jun 2014 13:18:48 +0930 From: "Ken McDonell" To: "'Nathan Scott'" Cc: References: <04d301cf912d$fb482980$f1d87c80$@internode.on.net> <1601784038.34470385.1403828681147.JavaMail.zimbra@redhat.com> <1907775487.34476034.1403832030935.JavaMail.zimbra@redhat.com> In-Reply-To: <1907775487.34476034.1403832030935.JavaMail.zimbra@redhat.com> Subject: RE: [pcp] pcp 3.9.5 build failure on ia64 & suse Date: Fri, 27 Jun 2014 13:48:46 +1000 X-ASG-Orig-Subj: RE: [pcp] pcp 3.9.5 build failure on ia64 & suse Message-ID: <074a01cf91ba$b3a9ada0$1afd08e0$@internode.on.net> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Mailer: Microsoft Outlook 15.0 Thread-Index: AQK3Mo2JT9Ip6Xcd2hwMC5uPd+Go/QJ7uoGzAZggXTuZlHCXEA== Content-Language: en-au X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1403840929 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.01 X-Barracuda-Spam-Status: No, SCORE=0.01 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, THREAD_INDEX X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6985 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header Thanks Nathan and Frank (for the initial hint). > -----Original Message----- > From: Nathan Scott [mailto:nathans@redhat.com] > Sent: Friday, 27 June 2014 11:21 AM > To: Ken McDonell > Cc: pcp@oss.sgi.com > Subject: Re: [pcp] pcp 3.9.5 build failure on ia64 & suse > ... > It seems this "BuildArch: noarch" tag requires RPM 4.6.0 or higher - = is the > SuSE build machine you are using at a lower version? Assuming it is, = I guess > we'll need to make pcp.spec.in have a guard around it based on rpm -- > version info. Could add this to build/rpm/GNUmakefile and drive it = into > pcp.spec.in when its generated in there? The rpm version is 4.4.2.3 on the ia64 build machine. Commenting out the BuildArch line lets Makepkgs run to completion ... = rpms built and installed. Is there some magic predefined macro in rpm-land that already provides = the rpm version number that is the missing piece of the spell needed to = fix this permanently? From nscott@redhat.com Thu Jun 26 23:21:26 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 784447F9D for ; Thu, 26 Jun 2014 23:21:26 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 50BBE8F8037 for ; Thu, 26 Jun 2014 21:21:23 -0700 (PDT) X-ASG-Debug-ID: 1403842881-04cbb065361548d0001-S8gJnT Received: from mx4-phx2.redhat.com (mx4-phx2.redhat.com [209.132.183.25]) by cuda.sgi.com with ESMTP id Bk9gRoUmAKhT85IF for ; Thu, 26 Jun 2014 21:21:21 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.25 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx4-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id s5R4L613010375; Fri, 27 Jun 2014 00:21:06 -0400 Date: Fri, 27 Jun 2014 00:21:06 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: Ken McDonell Cc: pcp@oss.sgi.com Message-ID: <728977674.34501812.1403842866707.JavaMail.zimbra@redhat.com> In-Reply-To: <074a01cf91ba$b3a9ada0$1afd08e0$@internode.on.net> References: <04d301cf912d$fb482980$f1d87c80$@internode.on.net> <1601784038.34470385.1403828681147.JavaMail.zimbra@redhat.com> <1907775487.34476034.1403832030935.JavaMail.zimbra@redhat.com> <074a01cf91ba$b3a9ada0$1afd08e0$@internode.on.net> Subject: Re: [pcp] pcp 3.9.5 build failure on ia64 & suse MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [pcp] pcp 3.9.5 build failure on ia64 & suse Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.12] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: pcp 3.9.5 build failure on ia64 & suse Thread-Index: AQK3Mo2JT9Ip6Xcd2hwMC5uPd+Go/QJ7uoGzAZggXTuZlHCXEKZYK6SG X-Barracuda-Connect: mx4-phx2.redhat.com[209.132.183.25] X-Barracuda-Start-Time: 1403842881 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6985 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Hi Ken, ----- Original Message ----- > [...] > The rpm version is 4.4.2.3 on the ia64 build machine. > > Commenting out the BuildArch line lets Makepkgs run to completion ... rpms > built and installed. > > Is there some magic predefined macro in rpm-land that already provides the > rpm version number that is the missing piece of the spell needed to fix this > permanently? > I had a look but couldn't find RPM version info as spec %variables. pcp.spec is built in build/rpm/GNUmakefile, so I guess $(RPMBUILD) --version could be split apart and used? cheers. -- Nathan From aather@netflix.com Fri Jun 27 18:29:07 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HTML_MESSAGE,T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 00C217F3F for ; Fri, 27 Jun 2014 18:29:07 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id DD1FE8F8068 for ; Fri, 27 Jun 2014 16:29:03 -0700 (PDT) X-ASG-Debug-ID: 1403911742-04cb6c76d034c420001-S8gJnT Received: from mail-qc0-f175.google.com (mail-qc0-f175.google.com [209.85.216.175]) by cuda.sgi.com with ESMTP id TdMFZpktyG95d44e (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Fri, 27 Jun 2014 16:29:02 -0700 (PDT) X-Barracuda-Envelope-From: aather@netflix.com X-Barracuda-Apparent-Source-IP: 209.85.216.175 Received: by mail-qc0-f175.google.com with SMTP id i8so5163708qcq.34 for ; Fri, 27 Jun 2014 16:29:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=netflix.com; s=google; h=mime-version:date:message-id:subject:from:to:content-type; bh=qmf/+BR53orjS3TBRk+5DBepEwC3fkpnuUCVD4UQzPQ=; b=VzUh3TcZJRhbwEYmpMpmJw4+3sXdRCAzKEqLSUg9yvkL9CkOkZ4lE2XfMLfHsLiTGn U6U3s93mLt+YL5+22eJGo9w4iE89vOWm+28WI24OmHZS3KWBt12QmrVjt+ofxqNs6Mx7 Vk/p8FEZn80SGZJR5+fvSunGp2jnrAj2FXfQY= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:date:message-id:subject:from:to :content-type; bh=qmf/+BR53orjS3TBRk+5DBepEwC3fkpnuUCVD4UQzPQ=; b=IgUoDEYtrKBikW3OACvJ/40VeME8L9XOEC5GMe3+Bong1jsMB5ZF8OSSJRpKR1jx/y VbeDoq+6s0ST6bjRn6eDNTi+b3GtulWkwA0rPc+qRZdX87v3g6FzLLRw+ZL+DVuvNnBd sBykDoWyXFFoc8GuptnjR+5l6tG5gEXJQEJyWqmGvvCmPMXPJuTZggASjOxXf6ZpeRWn F3iuvtpi7NFNp8HKkTvuLywNbPtK7pOzsXBfTqs1PtldXGbdRu06RUIFeCycvLQeuYey ECi8aYXQHEoaRObosy0SNAOoeXWw8UQYvqk6rqyVlZdpteKPPr5HsnFsgihc9R426RgY WVaQ== X-Gm-Message-State: ALoCoQn/l4zags9YG04Kz9HSfZFAYhvgXmWtn2dWDJjLKfbZMU0RRp2r/PH4Y4ftHHypmxBDFjwM MIME-Version: 1.0 X-Received: by 10.140.87.225 with SMTP id r88mr35137703qgd.75.1403911742184; Fri, 27 Jun 2014 16:29:02 -0700 (PDT) Received: by 10.229.241.68 with HTTP; Fri, 27 Jun 2014 16:29:02 -0700 (PDT) Date: Fri, 27 Jun 2014 16:29:02 -0700 Message-ID: Subject: pcp grafana and graphite - How to convert pcp metric values into percent From: Amer Ather X-ASG-Orig-Subj: pcp grafana and graphite - How to convert pcp metric values into percent To: pcp@oss.sgi.com Content-Type: multipart/alternative; boundary=001a11c13554b0855604fcd9acac X-Barracuda-Connect: mail-qc0-f175.google.com[209.85.216.175] X-Barracuda-Start-Time: 1403911742 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.7010 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message --001a11c13554b0855604fcd9acac Content-Type: text/plain; charset=UTF-8 I have been playing with grafana and graphite extension. I want to know is there a way in grafana to convert stats like "kernel.all.cpu.idle" into percentages, similar to sar values. PCP site recommends, one should do: 100 * kernel.all.cpu.idle / (hinv.ncpu * 1000). My question is how to use this calculation in grafana or graphite to display in percentage. -- Thanks, Amer Ather Cloud Performance Engineering My Location --001a11c13554b0855604fcd9acac Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable

I have been playing with grafana and graphite extension. I wa= nt to know is there a way in grafana to convert stats like "kernel.all= .cpu.idle" into percentages, similar to sar values. PCP site recommend= s, one should do:=C2=A0

100 * kernel.all.cpu.idle / (hinv.ncpu * 1000).=C2=A0

My question is how to use this calculation in grafana or graphite= to display in percentage.


--
Thanks= ,

Amer Ather
Cloud Performance Engineering
--001a11c13554b0855604fcd9acac-- From kenj@internode.on.net Fri Jun 27 18:43:34 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 1C52E7F4E for ; Fri, 27 Jun 2014 18:43:34 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 06D31304070 for ; Fri, 27 Jun 2014 16:43:30 -0700 (PDT) X-ASG-Debug-ID: 1403912607-04cbb0653517bb10001-S8gJnT Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id RSNLhA547uOUFKtt for ; Fri, 27 Jun 2014 16:43:28 -0700 (PDT) X-Barracuda-Envelope-From: kenj@internode.on.net X-Barracuda-Apparent-Source-IP: 150.101.137.143 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AmITAKUArlN20YDzPGdsb2JhbAANTYNfh3++QwQBAQEBOIR3QDANFhgDAgECATEnBgIBAa8BnggXjiGBAYQtBbIsgVw Received: from ppp118-209-128-243.lns20.mel6.internode.on.net (HELO [192.168.1.100]) ([118.209.128.243]) by ipmail05.adl6.internode.on.net with ESMTP; 28 Jun 2014 09:13:27 +0930 Message-ID: <53AE0265.8020805@internode.on.net> Date: Sat, 28 Jun 2014 09:46:45 +1000 From: Ken McDonell User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.6.0 MIME-Version: 1.0 To: pcp@oss.sgi.com Subject: pcp updates - fix for rpm versions before 4.6 Content-Type: text/plain; charset=ISO-8859-1; format=flowed X-ASG-Orig-Subj: pcp updates - fix for rpm versions before 4.6 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Start-Time: 1403912608 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.7010 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- This fixes the build for our ia64 and suse test machine. Changes committed to git://oss.sgi.com/kenj/pcp.git dev build/rpm/GNUmakefile | 6 +++- build/rpm/get_rpm_version | 66 ++++++++++++++++++++++++++++++++++++++++++++++ build/rpm/pcp.spec.in | 4 ++ 3 files changed, 75 insertions(+), 1 deletion(-) commit 0b967667eda32ee970868864d0ae726ac94d6475 Author: Ken McDonell Date: Sat Jun 28 07:13:31 2014 +1000 Fix rpm builds for rpm versions prior to 4.6 For the pcp-doc package, conditionally exclude BuildArch: noarch if the rpm version is not 4.6 or later. From fche@redhat.com Fri Jun 27 20:02:55 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id DCCB77F47 for ; Fri, 27 Jun 2014 20:02:55 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id B872E30406B for ; Fri, 27 Jun 2014 18:02:52 -0700 (PDT) X-ASG-Debug-ID: 1403917371-04cb6c76d134f760001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id QM8iqqKkmIeCK0IU (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Fri, 27 Jun 2014 18:02:51 -0700 (PDT) X-Barracuda-Envelope-From: fche@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s5S12neY014198 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 27 Jun 2014 21:02:49 -0400 Received: from fche.csb (vpn-56-123.rdu2.redhat.com [10.10.56.123]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5S12n6x014661; Fri, 27 Jun 2014 21:02:49 -0400 Received: by fche.csb (Postfix, from userid 2569) id 871EE5853A; Fri, 27 Jun 2014 21:02:48 -0400 (EDT) To: Amer Ather Cc: pcp@oss.sgi.com Subject: Re: pcp grafana and graphite - How to convert pcp metric values into percent References: X-ASG-Orig-Subj: Re: pcp grafana and graphite - How to convert pcp metric values into percent From: fche@redhat.com (Frank Ch. Eigler) Date: Fri, 27 Jun 2014 21:02:42 -0400 In-Reply-To: (Amer Ather's message of "Fri, 27 Jun 2014 16:29:02 -0700") Message-ID: User-Agent: Gnus/5.1008 (Gnus v5.10.8) Emacs/21.4 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 2.68 on 10.5.11.24 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1403917371 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 aather wrote: > [...] > 100 * kernel.all.cpu.idle / (hinv.ncpu * 1000).=A0 > > My question is how to use this calculation in grafana or graphite to > display in percentage. This sort of thing could be expressed at the PCP level in at least two ways: client-side derived metrics, or the server-side pmdasummary. The former looks more appropriate here, but pmwebd doesn't have support for that just yet. Lemme go hack a little bit. - FChE From fche@redhat.com Fri Jun 27 20:14:15 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 0E8617F3F for ; Fri, 27 Jun 2014 20:14:15 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 950D4AC002 for ; Fri, 27 Jun 2014 18:14:11 -0700 (PDT) X-ASG-Debug-ID: 1403918049-04cb6c76d034fcf0001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id zqOINutH1qMH9sVx (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Fri, 27 Jun 2014 18:14:10 -0700 (PDT) X-Barracuda-Envelope-From: fche@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s5S1E8G3031170 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 27 Jun 2014 21:14:08 -0400 Received: from fche.csb (vpn-56-123.rdu2.redhat.com [10.10.56.123]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5S1E7TR028072; Fri, 27 Jun 2014 21:14:08 -0400 Received: by fche.csb (Postfix, from userid 2569) id 3B8D35853A; Fri, 27 Jun 2014 21:14:07 -0400 (EDT) To: Amer Ather Cc: pcp@oss.sgi.com Subject: Re: pcp grafana and graphite - How to convert pcp metric values into percent References: X-ASG-Orig-Subj: Re: pcp grafana and graphite - How to convert pcp metric values into percent From: fche@redhat.com (Frank Ch. Eigler) Date: Fri, 27 Jun 2014 21:14:07 -0400 In-Reply-To: (Frank Ch. Eigler's message of "Fri, 27 Jun 2014 21:02:42 -0400") Message-ID: User-Agent: Gnus/5.1008 (Gnus v5.10.8) Emacs/21.4 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Scanned-By: MIMEDefang 2.68 on 10.5.11.27 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1403918050 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 > [...] > This sort of thing could be expressed at the PCP level in at least two > ways: client-side derived metrics, or the server-side pmdasummary. > The former looks more appropriate here, but pmwebd doesn't have > support for that just yet. Lemme go hack a little bit. Actually, hacking not required. libpcp already automagically lets you add derived metrics to any pcp client using the $PCP_DERIVED_CONFIG environment variable. See man PCPintro(1) & pmLoadDerivedConfig(3). - FChE From kenj@internode.on.net Fri Jun 27 22:50:21 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id C88F67F3F for ; Fri, 27 Jun 2014 22:50:21 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 9F4ED8F8059 for ; Fri, 27 Jun 2014 20:50:21 -0700 (PDT) X-ASG-Debug-ID: 1403927415-04cbb06535184690001-S8gJnT Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id YnLUsWgqRaMnkG8a for ; Fri, 27 Jun 2014 20:50:16 -0700 (PDT) X-Barracuda-Envelope-From: kenj@internode.on.net X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AhlpAMA6rlN5LGxbPGdsb2JhbABagw2DSYUIuguDEAOBDxcEAQEBATg1hAoIAh4SHDAFBmIgCg4HAQQeBYgxmCysRY8ihC0FkG2hPyuBMyQ Received: from ppp121-44-108-91.lns20.syd6.internode.on.net (HELO bozohorize) ([121.44.108.91]) by ipmail06.adl2.internode.on.net with ESMTP; 28 Jun 2014 13:20:14 +0930 From: "Ken McDonell" To: Subject: pmdumptext question Date: Sat, 28 Jun 2014 13:50:12 +1000 X-ASG-Orig-Subj: pmdumptext question Message-ID: <002a01cf9284$120a3170$361e9450$@internode.on.net> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit X-Mailer: Microsoft Outlook 15.0 Thread-Index: Ac+SgxG4dqBy6BQlQjWKmRdwUm25nw== Content-Language: en-au X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1403927415 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.01 X-Barracuda-Spam-Status: No, SCORE=0.01 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.7017 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== Chatz, are you still there? I was trying to use pmdumptext to validate the derived metric expressions for kernel CPU times expressed as a percentage, and could make no sense of the numbers. Looking at the code I notice this in checkUnits() ... // Only scale units if interactive and not raw if (rawFlag || !niceFlag) return; Now this just looks wrong ... I can see no reason for -i enabling scaling (especially for time utilization) ... Can anyone explain the rationale for the current code, before I go change it? The example below shows that pmdumptext -I produces numbers in the same range as pmval, but pmdumptext without -I produces numbers that depend on the units of kernel.all.cpu.user from the kernel PMDA. kenj@bozo-vm:~/tmp$ pmval kernel.all.cpu.user metric: kernel.all.cpu.user host: bozo-vm semantics: cumulative counter (converting to rate) units: millisec (converting to time utilization) samples: all 0.0 1.995E-02 1.995E-02 9.984E-03 9.986E-03 ^C kenj@bozo-vm:~/tmp$ pmdumptext kernel.all.cpu.user Sat Jun 28 13:44:55 ? Sat Jun 28 13:44:56 9.995 Sat Jun 28 13:44:57 0.000 Sat Jun 28 13:44:58 10.014 Sat Jun 28 13:44:59 9.991 Sat Jun 28 13:45:00 10.000 Sat Jun 28 13:45:01 10.011 ^C kenj@bozo-vm:~/tmp$ pmdumptext -i kernel.all.cpu.user Sat Jun 28 13:45:13 ? Sat Jun 28 13:45:14 0.01 Sat Jun 28 13:45:15 0.02 Sat Jun 28 13:45:16 0.01 Sat Jun 28 13:45:17 0.01 From kenj@internode.on.net Fri Jun 27 22:50:59 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 29CC17F3F for ; Fri, 27 Jun 2014 22:50:59 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 01DA630404E for ; Fri, 27 Jun 2014 20:50:55 -0700 (PDT) X-ASG-Debug-ID: 1403927452-04bdf056696c25d0001-S8gJnT Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id 1n39ZpSZwUJWNyXw for ; Fri, 27 Jun 2014 20:50:53 -0700 (PDT) X-Barracuda-Envelope-From: kenj@internode.on.net X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AhlpAMA6rlN5LGxbPGdsb2JhbABagw2DSYUIuguDEAOBDxcEAQEBATg1hAoIAh4SHDAFBmIgCg4HAQQeBYgxmCysRY8ihC0FkG2hPyuBMyQ Received: from ppp121-44-108-91.lns20.syd6.internode.on.net (HELO bozohorize) ([121.44.108.91]) by ipmail06.adl2.internode.on.net with ESMTP; 28 Jun 2014 13:20:51 +0930 From: "Ken McDonell" To: Subject: pmdumptext question Date: Sat, 28 Jun 2014 13:50:50 +1000 X-ASG-Orig-Subj: pmdumptext question Message-ID: <002b01cf9284$287fdb80$797f9280$@internode.on.net> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit X-Mailer: Microsoft Outlook 15.0 Thread-Index: Ac+SgxG4dqBy6BQlQjWKmRdwUm25nw== Content-Language: en-au X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1403927452 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.01 X-Barracuda-Spam-Status: No, SCORE=0.01 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.7017 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== Chatz, are you still there? I was trying to use pmdumptext to validate the derived metric expressions for kernel CPU times expressed as a percentage, and could make no sense of the numbers. Looking at the code I notice this in checkUnits() ... // Only scale units if interactive and not raw if (rawFlag || !niceFlag) return; Now this just looks wrong ... I can see no reason for -i enabling scaling (especially for time utilization) ... Can anyone explain the rationale for the current code, before I go change it? The example below shows that pmdumptext -I produces numbers in the same range as pmval, but pmdumptext without -I produces numbers that depend on the units of kernel.all.cpu.user from the kernel PMDA. kenj@bozo-vm:~/tmp$ pmval kernel.all.cpu.user metric: kernel.all.cpu.user host: bozo-vm semantics: cumulative counter (converting to rate) units: millisec (converting to time utilization) samples: all 0.0 1.995E-02 1.995E-02 9.984E-03 9.986E-03 ^C kenj@bozo-vm:~/tmp$ pmdumptext kernel.all.cpu.user Sat Jun 28 13:44:55 ? Sat Jun 28 13:44:56 9.995 Sat Jun 28 13:44:57 0.000 Sat Jun 28 13:44:58 10.014 Sat Jun 28 13:44:59 9.991 Sat Jun 28 13:45:00 10.000 Sat Jun 28 13:45:01 10.011 ^C kenj@bozo-vm:~/tmp$ pmdumptext -i kernel.all.cpu.user Sat Jun 28 13:45:13 ? Sat Jun 28 13:45:14 0.01 Sat Jun 28 13:45:15 0.02 Sat Jun 28 13:45:16 0.01 Sat Jun 28 13:45:17 0.01 From kenj@internode.on.net Fri Jun 27 22:55:57 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 7DA267F3F for ; Fri, 27 Jun 2014 22:55:57 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 639F330405F for ; Fri, 27 Jun 2014 20:55:57 -0700 (PDT) X-ASG-Debug-ID: 1403927754-04cbb06536184970001-S8gJnT Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id wjwXQuNp9cte7Dj0 for ; Fri, 27 Jun 2014 20:55:55 -0700 (PDT) X-Barracuda-Envelope-From: kenj@internode.on.net X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AjVpAO47rlN5LGxbPGdsb2JhbABagw2DSYUIvRsDAgGBDBcEAQEBATg1hAMBAQUIAh4SHCMMAQMCBgMWAS8ZIAoMCAIEARILBYgxxFoXjwUHBoQ9BZBtn2uBVCs Received: from ppp121-44-108-91.lns20.syd6.internode.on.net (HELO bozohorize) ([121.44.108.91]) by ipmail06.adl2.internode.on.net with ESMTP; 28 Jun 2014 13:25:53 +0930 From: "Ken McDonell" To: "'Frank Ch. Eigler'" , "'Amer Ather'" Cc: References: In-Reply-To: Subject: RE: [pcp] pcp grafana and graphite - How to convert pcp metric values into percent Date: Sat, 28 Jun 2014 13:55:51 +1000 X-ASG-Orig-Subj: RE: [pcp] pcp grafana and graphite - How to convert pcp metric values into percent Message-ID: <002d01cf9284$dc8fe570$95afb050$@internode.on.net> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit X-Mailer: Microsoft Outlook 15.0 Thread-Index: AQGe8/z7D4wvNEEjUhHbOmDpyVH2UwMFu+SsAbarouibwT0C0A== Content-Language: en-au X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1403927754 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.01 X-Barracuda-Spam-Status: No, SCORE=0.01 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, THREAD_INDEX X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.7017 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header > -----Original Message----- > ... On Behalf Of Frank Ch. Eigler > Sent: Saturday, 28 June 2014 11:14 AM > To: Amer Ather > Cc: pcp@oss.sgi.com > Subject: Re: [pcp] pcp grafana and graphite - How to convert pcp metric > values into percent > ... > Actually, hacking not required. libpcp already automagically lets you add > derived metrics to any pcp client using the $PCP_DERIVED_CONFIG > environment variable. See man PCPintro(1) & pmLoadDerivedConfig(3). Correct ... Frank just beat me to responding. To expand a little ... Create a file called for example, $HOME/pctavg with these contents: kernel.pct.cpu.user = 100 * kernel.all.cpu.user / hinv.ncpu kernel.pct.cpu.nice = 100 * kernel.all.cpu.nice / hinv.ncpu kernel.pct.cpu.sys = 100 * kernel.all.cpu.sys / hinv.ncpu kernel.pct.cpu.idle = 100 * kernel.all.cpu.idle / hinv.ncpu kernel.pct.cpu.intr = 100 * kernel.all.cpu.intr / hinv.ncpu kernel.pct.cpu.wait.total = 100 * kernel.all.cpu.wait.total / hinv.ncpu then run pmwebd as $ PCP_DERIVED_CONFIG=$HOME/pctavg pmwebd ... and the (derived) metrics kernel.pct.cpu.* will magically become available for plotting. From kenj@internode.on.net Fri Jun 27 23:04:13 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=MIME_QP_LONG_LINE autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 572C47F47 for ; Fri, 27 Jun 2014 23:04:13 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 2DCBE304051 for ; Fri, 27 Jun 2014 21:04:10 -0700 (PDT) X-ASG-Debug-ID: 1403928246-04bdf056676c2bd0001-S8gJnT Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id sWeAa3tfN6Pfc9mz for ; Fri, 27 Jun 2014 21:04:06 -0700 (PDT) X-Barracuda-Envelope-From: kenj@internode.on.net X-Barracuda-Apparent-Source-IP: 150.101.137.129 Received: from ppp121-44-108-91.lns20.syd6.internode.on.net (HELO bozohorize) ([121.44.108.91]) by ipmail06.adl2.internode.on.net with ESMTP; 28 Jun 2014 13:33:37 +0930 From: "Ken McDonell" To: "'Frank Ch. Eigler'" , "'Amer Ather'" Cc: References: <002d01cf9284$dc8fe570$95afb050$@internode.on.net> In-Reply-To: <002d01cf9284$dc8fe570$95afb050$@internode.on.net> Subject: RE: [pcp] pcp grafana and graphite - How to convert pcp metric values into percent Date: Sat, 28 Jun 2014 14:03:34 +1000 X-ASG-Orig-Subj: RE: [pcp] pcp grafana and graphite - How to convert pcp metric values into percent Message-ID: <002f01cf9285$f0c63160$d2529420$@internode.on.net> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_000_0030_01CF92D9.C2728F80" X-Mailer: Microsoft Outlook 15.0 Thread-Index: AQGe8/z7D4wvNEEjUhHbOmDpyVH2UwMFu+SsAbarougBltsFqpu0iGuQ Content-Language: en-au X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1403928246 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.83 X-Barracuda-Spam-Status: No, SCORE=0.83 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, MIME_QP_LONG_LINE, MIME_QP_LONG_LINE_2, THREAD_INDEX X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.7017 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.00 MIME_QP_LONG_LINE RAW: Quoted-printable line longer than 76 chars 0.82 MIME_QP_LONG_LINE_2 RAW: Quoted-printable line longer than 76 chars This is a multipart message in MIME format. ------=_NextPart_000_0030_01CF92D9.C2728F80 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Grrr ... M$ mail client and damn line wrap! Attached is the real "pctavg" file I tried to paste into my last mail. ------=_NextPart_000_0030_01CF92D9.C2728F80 Content-Type: text/plain; name="pctavg.txt" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="pctavg.txt" kernel.pct.cpu.user =3D 100 * kernel.all.cpu.user / hinv.ncpu=0A= kernel.pct.cpu.nice =3D 100 * kernel.all.cpu.nice / hinv.ncpu=0A= kernel.pct.cpu.sys =3D 100 * kernel.all.cpu.sys / hinv.ncpu=0A= kernel.pct.cpu.idle =3D 100 * kernel.all.cpu.idle / hinv.ncpu=0A= kernel.pct.cpu.intr =3D 100 * kernel.all.cpu.intr / hinv.ncpu=0A= kernel.pct.cpu.wait.total =3D 100 * kernel.all.cpu.wait.total / hinv.ncpu=0A= ------=_NextPart_000_0030_01CF92D9.C2728F80-- From chandana@messagemedia.com.au Sat Jun 28 02:36:31 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 338FC7F3F for ; Sat, 28 Jun 2014 02:36:31 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 18D4F8F8065 for ; Sat, 28 Jun 2014 00:36:27 -0700 (PDT) X-ASG-Debug-ID: 1403940979-04cbb0653718a570001-S8gJnT Received: from remote.messagemedia.com.au (mail.messagemedia.com.au [175.45.83.34]) by cuda.sgi.com with ESMTP id RHTsgOjRY04aivan (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Sat, 28 Jun 2014 00:36:21 -0700 (PDT) X-Barracuda-Envelope-From: chandana@messagemedia.com.au X-Barracuda-Apparent-Source-IP: 175.45.83.34 Received: from [10.8.3.54] (10.8.3.54) by MM-SVR-RDC1.messagemedia.local (192.168.19.3) with Microsoft SMTP Server id 8.3.342.0; Sat, 28 Jun 2014 17:36:17 +1000 Message-ID: <53AE7070.5060801@messagemedia.com.au> Date: Sat, 28 Jun 2014 17:36:16 +1000 From: Chandana De Silva User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0 MIME-Version: 1.0 To: , Subject: Re: PCP and Graphite Content-Type: text/plain; charset="ISO-8859-1"; format=flowed X-ASG-Orig-Subj: Re: PCP and Graphite Content-Transfer-Encoding: 7bit X-TM-AS-Product-Ver: SMEX-10.1.0.2244-7.000.1014-20784.005 X-TM-AS-Result: No--9.848400-0.000000-31 X-TM-AS-User-Approved-Sender: Yes X-TM-AS-User-Blocked-Sender: No X-Barracuda-Connect: mail.messagemedia.com.au[175.45.83.34] X-Barracuda-Start-Time: 1403940980 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.7022 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Hello Frank I have been trying to get the pcp-graphite script working with graphite. My problem is with the graphite side, so please excuse me for posting here. I have followed your instructions at https://web.elastic.org/~fche/blog3/archive/2014/04/13/pcp-and-graphite My laptop is running Fedora 20 rather than 19. When I navigate to http://localhost/graphite/ , all I see is an index page. Can you help, please ? RPMS ===== $ rpm -qa | grep -P "graphite|carbon|whisper" graphite-web-0.9.12-5.fc20.noarch graphite2-1.2.2-4.fc20.x86_64 python-carbon-0.9.12-3.fc20.noarch graphite2-1.2.2-4.fc20.i686 python-whisper-0.9.12-1.fc20.noarch HTTPD Conf ========= $ cat /etc/httpd/conf.d/graphite-web.conf > Alias /graphite "/usr/share/graphite/webapp" > WSGIScriptAlias /graphite /usr/share/graphite/graphite-web.wsgi > WSGIImportScript /usr/share/graphite/graphite-web.wsgi process-group=%{GLOBAL} application-group=%{GLOBAL} > > Options All > AllowOverride All > Require all granted > > $ ls -la /usr/share/graphite/ > total 24 > drwxr-xr-x 3 root root 4096 Jun 21 11:12 . > drwxr-xr-x. 264 root root 12288 Jun 21 11:14 .. > -rw-r--r-- 1 root root 591 Oct 2 2013 graphite-web.wsgi > drwxr-xr-x 3 root root 4096 Jun 21 11:56 webapp Running Processes ================= > carbon 23237 1 0 17:11 ? 00:00:00 /usr/bin/python /usr/bin/carbon-cache --config=/etc/carbon/carbon.conf --pidfile=/var/run/carbon-cache.pid --logdir=/var/log/carbon start > chandana 23563 23174 0 17:23 pts/0 00:00:00 python workspace/pcpfans/src/pcp/graphite/pcp-graphite.py kernel When I start apache, I get a bunch of errors, which I assume are related to the graphite config: > [Sat Jun 28 02:31:38.078523 2014] [:error] [pid 24894] mod_wsgi (pid=24894): Target WSGI script '/usr/share/graphite/graphite-web.wsgi' cannot be loaded as Python module. > [Sat Jun 28 02:31:38.078523 2014] [:error] [pid 24894] mod_wsgi (pid=24894): Target WSGI script '/usr/share/graphite/graphite-web.wsgi' cannot be loaded as Python module. > [Sat Jun 28 02:31:38.078569 2014] [:error] [pid 24894] mod_wsgi (pid=24894): Exception occurred processing WSGI script '/usr/share/graphite/graphite-web.wsgi'. > [Sat Jun 28 02:31:38.078569 2014] [:error] [pid 24894] mod_wsgi (pid=24894): Exception occurred processing WSGI script '/usr/share/graphite/graphite-web.wsgi'. > [Sat Jun 28 02:31:38.078598 2014] [:error] [pid 24894] Traceback (most recent call last): > [Sat Jun 28 02:31:38.078598 2014] [:error] [pid 24894] Traceback (most recent call last): > [Sat Jun 28 02:31:38.078626 2014] [:error] [pid 24894] File "/usr/share/graphite/graphite-web.wsgi", line 16, in > [Sat Jun 28 02:31:38.078707 2014] [:error] [pid 24894] import graphite.metrics.search > [Sat Jun 28 02:31:38.078731 2014] [:error] [pid 24894] File "/usr/lib/python2.7/site-packages/graphite/metrics/search.py", line 6, in > [Sat Jun 28 02:31:38.078806 2014] [:error] [pid 24894] from graphite.storage import is_pattern, match_entries > [Sat Jun 28 02:31:38.078829 2014] [:error] [pid 24894] File "/usr/lib/python2.7/site-packages/graphite/storage.py", line 7, in > [Sat Jun 28 02:31:38.078952 2014] [:error] [pid 24894] from graphite.remote_storage import RemoteStore -- Chandana From dchatterton@aconex.com Sat Jun 28 07:33:52 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=MIME_QP_LONG_LINE autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 566EF7F3F for ; Sat, 28 Jun 2014 07:33:52 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 56A92304048 for ; Sat, 28 Jun 2014 05:33:49 -0700 (PDT) X-ASG-Debug-ID: 1403958822-04cbb065351913c0001-S8gJnT Received: from postoffice2.aconex.com (mail.aconex.com [175.45.105.35]) by cuda.sgi.com with ESMTP id HR4ugvBj1awf5Itj for ; Sat, 28 Jun 2014 05:33:43 -0700 (PDT) X-Barracuda-Envelope-From: dchatterton@aconex.com X-Barracuda-Apparent-Source-IP: 175.45.105.35 Received: from postoffice.aconex.com (postoffice.yarra.acx [192.168.35.100]) by postoffice2.aconex.com with ESMTP id IHnJAllI2IAnk5wn; Sat, 28 Jun 2014 22:33:41 +1000 (EST) Received: from gatekeeper.aconex.com (gatekeeper.yarra.acx [192.168.35.102]) by postoffice.aconex.com (Postfix) with ESMTP id CB7183CE0099; Sat, 28 Jun 2014 22:33:41 +1000 (EST) Received: from localhost (localhost.localdomain [127.0.0.1]) by gatekeeper.aconex.com (Postfix) with ESMTP id BB991243A086; Sat, 28 Jun 2014 22:33:41 +1000 (EST) Received: from gatekeeper.aconex.com ([127.0.0.1]) by localhost (gatekeeper.aconex.com [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id Ol2gn2WVUAir; Sat, 28 Jun 2014 22:33:40 +1000 (EST) Received: from localhost (localhost.localdomain [127.0.0.1]) by gatekeeper.aconex.com (Postfix) with ESMTP id BD0DD243A19E; Sat, 28 Jun 2014 22:33:40 +1000 (EST) X-Virus-Scanned: amavisd-new at aconex.com Received: from gatekeeper.aconex.com ([127.0.0.1]) by localhost (gatekeeper.aconex.com [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id hPKVhEQa65bx; Sat, 28 Jun 2014 22:33:40 +1000 (EST) Received: from acxmail-au2.aconex.com (acxmail-au2.aconex.com [192.168.35.104]) by gatekeeper.aconex.com (Postfix) with ESMTP id 9F465243A086; Sat, 28 Jun 2014 22:33:40 +1000 (EST) Received: from acxmail-au2.aconex.com (localhost.localdomain [127.0.0.1]) by acxmail-au2.aconex.com (Postfix) with ESMTP id 8739F69001CE; Sat, 28 Jun 2014 22:33:39 +1000 (EST) Received: from localhost (localhost.localdomain [127.0.0.1]) by acxmail-au2.aconex.com (Postfix) with ESMTP id 633B4690024F; Sat, 28 Jun 2014 22:33:38 +1000 (EST) X-Virus-Scanned: amavisd-new at aconex.com Received: from acxmail-au2.aconex.com ([127.0.0.1]) by localhost (acxmail-au2.aconex.com [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id rRSbj5GsAAmX; Sat, 28 Jun 2014 22:33:36 +1000 (EST) Received: from acxmail-au2.aconex.com (localhost.localdomain [127.0.0.1]) by acxmail-au2.aconex.com (Postfix) with ESMTP id 70CCA69001CE; Sat, 28 Jun 2014 22:33:34 +1000 (EST) Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable Subject: Re: [pcp] pmdumptext question References: <002b01cf9284$287fdb80$797f9280$@internode.on.net> X-ASG-Orig-Subj: Re: [pcp] pmdumptext question From: David Chatterton MIME-Version: 1.0 In-Reply-To: <002b01cf9284$287fdb80$797f9280$@internode.on.net> Message-Id: Date: Sat, 28 Jun 2014 22:33:25 +1000 (EST) To: Ken McDonell Cc: "pcp@oss.sgi.com" X-Mailer: Zimbra 8.0.7_GA_6021 (MobileSync - Apple-iPhone5C2/1104.201) Thread-Topic: pmdumptext question Thread-Index: Ac+SgxG4dqBy6BQlQjWKmRdwUm25n7G+jzOW X-Virus-Scanned: by bsmtpd at aconex.com X-Barracuda-Connect: mail.aconex.com[175.45.105.35] X-Barracuda-Start-Time: 1403958823 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.84 X-Barracuda-Spam-Status: No, SCORE=0.84 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=MIME_QP_LONG_LINE, MIME_QP_LONG_LINE_2, THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.7029 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 0.00 MIME_QP_LONG_LINE RAW: Quoted-printable line longer than 76 chars 0.82 MIME_QP_LONG_LINE_2 RAW: Quoted-printable line longer than 76 chars I'm still here. I'll have to look at the source again to work out what I was trying to do, t= he logic & flags were pretty awful from memory. Chatz=20 > On 28 Jun 2014, at 13:51, "Ken McDonell" wrote: >=20 > Chatz, are you still there? >=20 > I was trying to use pmdumptext to validate the derived metric expressions > for kernel CPU times expressed as a percentage, and could make no sense of= > the numbers. >=20 > Looking at the code I notice this in checkUnits() ... >=20 > // Only scale units if interactive and not raw > if (rawFlag || !niceFlag) > return; >=20 > Now this just looks wrong ... I can see no reason for -i enabling scaling= > (especially for time utilization) ... >=20 > Can anyone explain the rationale for the current code, before I go change > it? >=20 > The example below shows that pmdumptext -I produces numbers in the same > range as pmval, but pmdumptext without -I produces numbers that depend on > the units of kernel.all.cpu.user from the kernel PMDA. >=20 > kenj@bozo-vm:~/tmp$ pmval kernel.all.cpu.user >=20 > metric: kernel.all.cpu.user > host: bozo-vm > semantics: cumulative counter (converting to rate) > units: millisec (converting to time utilization) > samples: all > 0.0 =20 > 1.995E-02 > 1.995E-02 > 9.984E-03 > 9.986E-03 > ^C > kenj@bozo-vm:~/tmp$ pmdumptext kernel.all.cpu.user > Sat Jun 28 13:44:55 ? > Sat Jun 28 13:44:56 9.995 > Sat Jun 28 13:44:57 0.000 > Sat Jun 28 13:44:58 10.014 > Sat Jun 28 13:44:59 9.991 > Sat Jun 28 13:45:00 10.000 > Sat Jun 28 13:45:01 10.011 > ^C > kenj@bozo-vm:~/tmp$ pmdumptext -i kernel.all.cpu.user > Sat Jun 28 13:45:13 ? > Sat Jun 28 13:45:14 0.01=20 > Sat Jun 28 13:45:15 0.02=20 > Sat Jun 28 13:45:16 0.01=20 > Sat Jun 28 13:45:17 0.01 >=20 > _______________________________________________ > pcp mailing list > pcp@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/pcp From fche@redhat.com Sat Jun 28 07:38:04 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 7F0E17F3F for ; Sat, 28 Jun 2014 07:38:04 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 7F6958F8052 for ; Sat, 28 Jun 2014 05:38:01 -0700 (PDT) X-ASG-Debug-ID: 1403959079-04cbb065381916d0001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id s8FYolZSjUUyngcu (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Sat, 28 Jun 2014 05:38:00 -0700 (PDT) X-Barracuda-Envelope-From: fche@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s5SCbrr1025729 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Sat, 28 Jun 2014 08:37:53 -0400 Received: from fche.csb (vpn-56-123.rdu2.redhat.com [10.10.56.123]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5SCbqiI019979; Sat, 28 Jun 2014 08:37:53 -0400 Received: by fche.csb (Postfix, from userid 2569) id DE02B5853A; Sat, 28 Jun 2014 08:37:51 -0400 (EDT) Date: Sat, 28 Jun 2014 08:37:51 -0400 From: "Frank Ch. Eigler" To: Chandana De Silva Cc: pcp@oss.sgi.com Subject: Re: PCP and Graphite Message-ID: <20140628123751.GE29542@redhat.com> X-ASG-Orig-Subj: Re: PCP and Graphite References: <53AE7070.5060801@messagemedia.com.au> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <53AE7070.5060801@messagemedia.com.au> User-Agent: Mutt/1.4.2.2i X-Scanned-By: MIMEDefang 2.68 on 10.5.11.27 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1403959080 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Hi, Chandana - > [...] > I have been trying to get the pcp-graphite script working with graphite. OK. (I'm ambivalent as to whether or not to carry that work forward, considering the more recent pmwebd-graphite-emulation code. [1] It features apprx. none of the setup headaches you're going through.) [1] https://web.elastic.org/~fche/blog3/archive/2014/06/16/pcp-and-graphite-backwards > My problem is with the graphite side, so please excuse me for posting here. No problem. > [...] > My laptop is running Fedora 20 rather than 19. > [...] > When I start apache, I get a bunch of errors, which I assume are related > to the graphite config: Yes, the problem likely lies there. Could you post a more complete httpd error log, if there is one? Actually, I got hold of a F20 server, and got a little farther, terminating in errors in django database "OperationalError: no such table: auth_user" goo. Getting help from a launchpad FAQ (question #60576), running # python /usr/lib/python*/site-packages/graphite/manage.py syncdb got farther, to a few different errors, then got stuck. Please consider opening a bugzilla.redhat.com report against graphite-web. - FChE From aather@netflix.com Sat Jun 28 19:58:05 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HTML_MESSAGE,T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 5907F7F3F for ; Sat, 28 Jun 2014 19:58:05 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 0E7188F8050 for ; Sat, 28 Jun 2014 17:58:01 -0700 (PDT) X-ASG-Debug-ID: 1404003476-04bdf056686dcf20001-S8gJnT Received: from mail-qg0-f51.google.com (mail-qg0-f51.google.com [209.85.192.51]) by cuda.sgi.com with ESMTP id mj9FjjU4nvJY51Ma (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Sat, 28 Jun 2014 17:57:56 -0700 (PDT) X-Barracuda-Envelope-From: aather@netflix.com X-Barracuda-Apparent-Source-IP: 209.85.192.51 Received: by mail-qg0-f51.google.com with SMTP id z60so803314qgd.38 for ; Sat, 28 Jun 2014 17:57:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=netflix.com; s=google; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=rDmwg76LzTcfy2jdpMokzB4qLTPtULELdBySsLu1wfs=; b=dqLTjUJNUD5muiI1Dr9EKeV8+meLRSgVjhonMSmxDewFSD2x5CfN1TdKj9P6m0EMq1 hzIwRqGLc4EQ6riIYFVvU9UIdfrDZqqgubex2UKyiZU/d0rQTHOTLCiZilSdetCyN97s g7E0OLl0PnR1t/tOhojFWHeSfVfhkq8lYQJBE= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:date :message-id:subject:from:to:cc:content-type; bh=rDmwg76LzTcfy2jdpMokzB4qLTPtULELdBySsLu1wfs=; b=FjYmhvSRgSI8lGh3hwuz0c17Z9Wk3KoOygGNQ9CL9+kl8KFLWDu7bve0ewqgl0U4dP +QL7W7YKGUyXxKemcRcQySQrmQPULO2E8u+vfm8T6OjOMMA4CfeYONyz0pYxZ8pWNrWj ZilSp8kGBpfUXxglCGC136Bq93tTtygOlKaF78/fZjAecjYeGR2Dl7gm/9mzA9hzU5WV fnex1OYoeGCyGDDK92uzuuQj8+fgGbwGmYE9LnQArHlAozH3/Bt4E27zkwyg6cQDNf3F m2nvaZ4W/3UlS1KG9Jjzp39aqsRKW7wLEtCO2d0fNcTf7T6xttaAktgeA2+Cyo6W+H0L jTzA== X-Gm-Message-State: ALoCoQn/ASDGfuDiiDZmvDOL/1fL9hLn5n3CBzlqby1SgGJ1RSVrlOukqea4mF1H0ozDwn1jaQyD MIME-Version: 1.0 X-Received: by 10.224.13.82 with SMTP id b18mr9613261qaa.8.1404003475898; Sat, 28 Jun 2014 17:57:55 -0700 (PDT) Received: by 10.229.241.68 with HTTP; Sat, 28 Jun 2014 17:57:55 -0700 (PDT) In-Reply-To: <002f01cf9285$f0c63160$d2529420$@internode.on.net> References: <002d01cf9284$dc8fe570$95afb050$@internode.on.net> <002f01cf9285$f0c63160$d2529420$@internode.on.net> Date: Sat, 28 Jun 2014 17:57:55 -0700 Message-ID: Subject: Re: [pcp] pcp grafana and graphite - How to convert pcp metric values into percent From: Amer Ather X-ASG-Orig-Subj: Re: [pcp] pcp grafana and graphite - How to convert pcp metric values into percent To: Ken McDonell Cc: "Frank Ch. Eigler" , pcp@oss.sgi.com Content-Type: multipart/alternative; boundary=047d7bdca91e71e3f604fcef08de X-Barracuda-Connect: mail-qg0-f51.google.com[209.85.192.51] X-Barracuda-Start-Time: 1404003476 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.7046 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message --047d7bdca91e71e3f604fcef08de Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Thanks Ken and Frank! It works as designed. I tried to rebuild pmwebd with graphite support from fche git branch but getting errors when try building pmwebapi. Last time it built fine. Is there any change made to the repo? Steps followed: # git clone git://sourceware.org/git/pcpfans.git origin/fche/pmwebd # cd origin # cd fched/pmwebd/src # cd fche/pmwebd # cd src # git branch -r # git checkout fche/pmwebd # cd .. # ./configure # make Error I am getting during pmwebapi built: =3D=3D=3D pmwebapi =3D=3D=3D g++ -fPIC -fno-strict-aliasing -D_GNU_SOURCE -fstack-protector-all -D_FORTIFY_SOURCE=3D2 -Wextra -fPIE -Wall -O2 -g -DPCP_DEBUG -DPCP_VERSION=3D\"3.9.7\" -I../../src/include -I../../src/include/pcp -c main.cxx -o main.o g++ -fPIC -fno-strict-aliasing -D_GNU_SOURCE -fstack-protector-all -D_FORTIFY_SOURCE=3D2 -Wextra -fPIE -Wall -O2 -g -DPCP_DEBUG -DPCP_VERSION=3D\"3.9.7\" -I../../src/include -I../../src/include/pcp -c pmwebapi.cxx -o pmwebapi.o pmwebapi.cxx:619:1: warning: unused parameter =E2=80=98params=E2=80=99 [-Wu= nused-parameter] pmwebapi_respond_metric_fetch (struct MHD_Connection *connection, ^ pmwebapi.cxx:815:1: warning: unused parameter =E2=80=98params=E2=80=99 [-Wu= nused-parameter] pmwebapi_respond_instance_list (struct MHD_Connection *connection, ^ g++ -fPIC -fno-strict-aliasing -D_GNU_SOURCE -fstack-protector-all -D_FORTIFY_SOURCE=3D2 -Wextra -fPIE -Wall -O2 -g -DPCP_DEBUG -DPCP_VERSION=3D\"3.9.7\" -I../../src/include -I../../src/include/pcp -c pmresapi.cxx -o pmresapi.o g++ -fPIC -fno-strict-aliasing -D_GNU_SOURCE -fstack-protector-all -D_FORTIFY_SOURCE=3D2 -Wextra -fPIE -Wall -O2 -g -DPCP_DEBUG -DPCP_VERSION=3D\"3.9.7\" -I../../src/include -I../../src/include/pcp -c pmgraphite.cxx -o pmgraphite.o pmgraphite.cxx:311:1: warning: unused parameter =E2=80=98url=E2=80=99 [-Wun= used-parameter] pmgraphite_respond_metrics_find (struct MHD_Connection *connection, ^ pmgraphite.cxx:474:1: warning: unused parameter =E2=80=98url=E2=80=99 [-Wun= used-parameter] pmgraphite_respond_metrics_grep (struct MHD_Connection *connection, ^ pmgraphite.cxx:1127:1: warning: unused parameter =E2=80=98url=E2=80=99 [-Wu= nused-parameter] pmgraphite_gather_data (struct MHD_Connection *connection, const http_params & params, ^ g++ -fPIC -fno-strict-aliasing -D_GNU_SOURCE -fstack-protector-all -D_FORTIFY_SOURCE=3D2 -Wextra -fPIE -Wall -O2 -g -DPCP_DEBUG -DPCP_VERSION=3D\"3.9.7\" -I../../src/include -I../../src/include/pcp -c util.cxx -o util.o g++ -fPIC -fno-strict-aliasing -D_GNU_SOURCE -fstack-protector-all -D_FORTIFY_SOURCE=3D2 -Wextra -fPIE -Wall -O2 -g -DPCP_DEBUG -DPCP_VERSION=3D\"3.9.7\" -I../../src/include -I../../src/include/pcp -o pmwebd -Wall -L../../src/libpcp/src -L../../src/libpcp_pmda/src -pie -Wl,-z,relro -Wl,-z,now main.o pmwebapi.o pmresapi.o pmgraphite.o util.o -lpcp -lmicrohttpd /usr/bin/ld: pmgraphite.o: undefined reference to symbol 'pthread_create@ @GLIBC_2.2.5' //lib/x86_64-linux-gnu/libpthread.so.0: error adding symbols: DSO missing from command line collect2: error: ld returned 1 exit status make[2]: *** [pmwebd] Error 1 make[1]: *** [default_pcp] Error 2 make[1]: Leaving directory `/home/kvick-trustyhvmtest/origin/fche/pmwebd/src' make: *** [default_pcp] Error 2 On Fri, Jun 27, 2014 at 9:03 PM, Ken McDonell wrote= : > Grrr ... M$ mail client and damn line wrap! > > Attached is the real "pctavg" file I tried to paste into my last mail. > > --=20 Thanks, Amer Ather Cloud Performance Engineering My Location --047d7bdca91e71e3f604fcef08de Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Thanks Ken and Frank!=C2=A0

It works as= designed. =C2=A0

I tried to rebuild pmwebd with g= raphite support from fche git branch but getting errors when try building p= mwebapi. Last time it built fine. Is there any change made to the repo? Ste= ps followed:
=C2=A0
# git clone git://sourceware.org/git/pcpfans.git origin/fche/pmwebd
<= div># cd origin
# cd fched/pmwebd/src
# cd fche/pm= webd
# cd src
# =C2=A0git branch -r
# =C2=A0git checkou= t fche/pmwebd
# =C2=A0cd ..
# ./configure
# m= ake

=C2=A0Error I am getting during pmwebapi= built:

=3D=3D=3D pmwebapi =3D=3D=3D
g++ -fPIC -= fno-strict-aliasing -D_GNU_SOURCE -fstack-protector-all -D_FORTIFY_SOURCE= =3D2 -Wextra -fPIE -Wall -O2 -g -DPCP_DEBUG -DPCP_VERSION=3D\"3.9.7\&q= uot; -I../../src/include -I../../src/include/pcp =C2=A0 -c main.cxx -o main= .o
g++ -fPIC -fno-strict-aliasing -D_GNU_SOURCE -fstack-protector-all -D_= FORTIFY_SOURCE=3D2 -Wextra -fPIE -Wall -O2 -g -DPCP_DEBUG -DPCP_VERSION=3D\= "3.9.7\" -I../../src/include -I../../src/include/pcp =C2=A0 -c pm= webapi.cxx -o pmwebapi.o
pmwebapi.cxx:619:1: warning: unused parameter =E2=80=98params=E2=80=99= [-Wunused-parameter]
=C2=A0pmwebapi_respond_metric_fetch (struct= MHD_Connection *connection,
=C2=A0^
pmwebapi.cxx:815:1= : warning: unused parameter =E2=80=98params=E2=80=99 [-Wunused-parameter]
=C2=A0pmwebapi_respond_instance_list (struct MHD_Connection *connectio= n,
=C2=A0^
g++ -fPIC -fno-strict-aliasing -D_GNU_SOURCE= -fstack-protector-all -D_FORTIFY_SOURCE=3D2 -Wextra -fPIE -Wall -O2 -g -DP= CP_DEBUG -DPCP_VERSION=3D\"3.9.7\" -I../../src/include -I../../sr= c/include/pcp =C2=A0 -c pmresapi.cxx -o pmresapi.o
g++ -fPIC -fno-strict-aliasing -D_GNU_SOURCE -fstack-protector-all -D_= FORTIFY_SOURCE=3D2 -Wextra -fPIE -Wall -O2 -g -DPCP_DEBUG -DPCP_VERSION=3D\= "3.9.7\" -I../../src/include -I../../src/include/pcp =C2=A0 -c pm= graphite.cxx -o pmgraphite.o
pmgraphite.cxx:311:1: warning: unused parameter =E2=80=98url=E2=80=99 = [-Wunused-parameter]
=C2=A0pmgraphite_respond_metrics_find (struc= t MHD_Connection *connection,
=C2=A0^
pmgraphite.cxx:47= 4:1: warning: unused parameter =E2=80=98url=E2=80=99 [-Wunused-parameter]
=C2=A0pmgraphite_respond_metrics_grep (struct MHD_Connection *connecti= on,
=C2=A0^
pmgraphite.cxx:1127:1: warning: unused para= meter =E2=80=98url=E2=80=99 [-Wunused-parameter]
=C2=A0pmgraphite= _gather_data (struct MHD_Connection *connection, const http_params & pa= rams,
=C2=A0^
g++ -fPIC -fno-strict-aliasing -D_GNU_SOURCE -fstack= -protector-all -D_FORTIFY_SOURCE=3D2 -Wextra -fPIE -Wall -O2 -g -DPCP_DEBUG= -DPCP_VERSION=3D\"3.9.7\" -I../../src/include -I../../src/includ= e/pcp =C2=A0 -c util.cxx -o util.o
g++ -fPIC -fno-strict-aliasing -D_GNU_SOURCE -fstack-protector-all -D_= FORTIFY_SOURCE=3D2 -Wextra -fPIE -Wall -O2 -g -DPCP_DEBUG -DPCP_VERSION=3D\= "3.9.7\" -I../../src/include -I../../src/include/pcp =C2=A0-o pmw= ebd =C2=A0-Wall -L../../src/libpcp/src -L../../src/libpcp_pmda/src -pie -Wl= ,-z,relro -Wl,-z,now =C2=A0 main.o pmwebapi.o pmresapi.o pmgraphite.o util.= o =C2=A0 =C2=A0-lpcp =C2=A0-lmicrohttpd=C2=A0
/usr/bin/ld: pmgraphite.o: undefined reference to symbol 'pthread_= create@@GLIBC_2.2.5'
//lib/x86_64-linux-gnu/libpthread.so.0: = error adding symbols: DSO missing from command line
collect2: err= or: ld returned 1 exit status
make[2]: *** [pmwebd] Error 1
make[1]: *** [default_pcp] Err= or 2
make[1]: Leaving directory `/home/kvick-trustyhvmtest/origin= /fche/pmwebd/src'
make: *** [default_pcp] Error 2



On Fri, Jun 27, 2014 at 9:03 PM, Ken McDonell <= ;kenj@internode.= on.net> wrote:
Grrr ... M$ mail client and damn line wrap!<= br>
Attached is the real "pctavg" file I tried to paste into my last = mail.




--
Thanks,

Amer Ather
Cloud Performance Engi= neering
--047d7bdca91e71e3f604fcef08de-- From dchatterton@aconex.com Sun Jun 29 06:17:46 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 116A87F3F for ; Sun, 29 Jun 2014 06:17:46 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id E67D98F8040 for ; Sun, 29 Jun 2014 04:17:45 -0700 (PDT) X-ASG-Debug-ID: 1404040659-04bdf056666e8910001-S8gJnT Received: from postoffice2.aconex.com (mail.aconex.com [175.45.105.35]) by cuda.sgi.com with ESMTP id YmgFiTtWmMhOdtRO for ; Sun, 29 Jun 2014 04:17:39 -0700 (PDT) X-Barracuda-Envelope-From: dchatterton@aconex.com X-Barracuda-Apparent-Source-IP: 175.45.105.35 Received: from postoffice.aconex.com (postoffice.yarra.acx [192.168.35.100]) by postoffice2.aconex.com with ESMTP id Y8fVPFO8N08sJXWS; Sun, 29 Jun 2014 21:17:38 +1000 (EST) Received: from gatekeeper.aconex.com (gatekeeper.yarra.acx [192.168.35.102]) by postoffice.aconex.com (Postfix) with ESMTP id 0DC753CE00AE; Sun, 29 Jun 2014 21:17:38 +1000 (EST) Received: from localhost (localhost.localdomain [127.0.0.1]) by gatekeeper.aconex.com (Postfix) with ESMTP id 03CC42439FE1; Sun, 29 Jun 2014 21:17:38 +1000 (EST) Received: from gatekeeper.aconex.com ([127.0.0.1]) by localhost (gatekeeper.aconex.com [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id h983Io6XR-WY; Sun, 29 Jun 2014 21:17:37 +1000 (EST) Received: from localhost (localhost.localdomain [127.0.0.1]) by gatekeeper.aconex.com (Postfix) with ESMTP id 302A0243A17C; Sun, 29 Jun 2014 21:17:37 +1000 (EST) X-Virus-Scanned: amavisd-new at aconex.com Received: from gatekeeper.aconex.com ([127.0.0.1]) by localhost (gatekeeper.aconex.com [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id Iej7BPxnk8PI; Sun, 29 Jun 2014 21:17:37 +1000 (EST) Received: from acxmail-au2.aconex.com (acxmail-au2.aconex.com [192.168.35.104]) by gatekeeper.aconex.com (Postfix) with ESMTP id 14FB82439FE1; Sun, 29 Jun 2014 21:17:37 +1000 (EST) Received: from acxmail-au2.aconex.com (localhost.localdomain [127.0.0.1]) by acxmail-au2.aconex.com (Postfix) with ESMTP id 115D33B20001; Sun, 29 Jun 2014 21:17:37 +1000 (EST) Received: from localhost (localhost.localdomain [127.0.0.1]) by acxmail-au2.aconex.com (Postfix) with ESMTP id EA3BE3B20002; Sun, 29 Jun 2014 21:17:36 +1000 (EST) X-Virus-Scanned: amavisd-new at aconex.com Received: from acxmail-au2.aconex.com ([127.0.0.1]) by localhost (acxmail-au2.aconex.com [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id bnIcEQ5pnDqR; Sun, 29 Jun 2014 21:17:36 +1000 (EST) Received: from acxmail-au2.aconex.com (localhost.localdomain [127.0.0.1]) by acxmail-au2.aconex.com (Postfix) with ESMTP id C5B1A3B20001; Sun, 29 Jun 2014 21:17:36 +1000 (EST) From: David Chatterton To: "Ken McDonell" Cc: References: <002b01cf9284$287fdb80$797f9280$@internode.on.net> In-Reply-To: <002b01cf9284$287fdb80$797f9280$@internode.on.net> Subject: RE: [pcp] pmdumptext question Date: Sun, 29 Jun 2014 21:17:35 +1000 (EST) X-ASG-Orig-Subj: RE: [pcp] pmdumptext question Message-ID: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit X-Mailer: Microsoft Outlook 14.0 X-Mailer: Zimbra 8.0.7_GA_6021 (ZimbraConnectorForOutlook/8.0.7.1146) Thread-Index: fO0dwvCvmcPp8LMXi1qsaALliuX4ug== Content-Language: en-au X-Originating-IP: [120.148.101.4] Thread-Topic: pmdumptext question X-Virus-Scanned: by bsmtpd at aconex.com X-Barracuda-Connect: mail.aconex.com[175.45.105.35] X-Barracuda-Start-Time: 1404040659 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.7059 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header Ken, It's been a while since I've thought about the unit semantics in PCP... >From memory and looking at the code, the -i flag was there for generating fixed width output but not using scientific format, rather by changing the units to be consistent (ie SPACE to bytes) and then using "K", "M", "G" postfix multiplier for large values. That way it could keep the values to a manageable size. So I'm not sure the "if" statement is what's wrong? Looking down further the code treats time dimension metrics differently, it has to be a counter...I'm going to have a play to understand the output here. Chatz -----Original Message----- From: pcp-bounces@oss.sgi.com [mailto:pcp-bounces@oss.sgi.com] On Behalf Of Ken McDonell Sent: Saturday, 28 June 2014 1:51 PM To: pcp@oss.sgi.com Subject: [pcp] pmdumptext question Chatz, are you still there? I was trying to use pmdumptext to validate the derived metric expressions for kernel CPU times expressed as a percentage, and could make no sense of the numbers. Looking at the code I notice this in checkUnits() ... // Only scale units if interactive and not raw if (rawFlag || !niceFlag) return; Now this just looks wrong ... I can see no reason for -i enabling scaling (especially for time utilization) ... Can anyone explain the rationale for the current code, before I go change it? The example below shows that pmdumptext -I produces numbers in the same range as pmval, but pmdumptext without -I produces numbers that depend on the units of kernel.all.cpu.user from the kernel PMDA. kenj@bozo-vm:~/tmp$ pmval kernel.all.cpu.user metric: kernel.all.cpu.user host: bozo-vm semantics: cumulative counter (converting to rate) units: millisec (converting to time utilization) samples: all 0.0 1.995E-02 1.995E-02 9.984E-03 9.986E-03 ^C kenj@bozo-vm:~/tmp$ pmdumptext kernel.all.cpu.user Sat Jun 28 13:44:55 ? Sat Jun 28 13:44:56 9.995 Sat Jun 28 13:44:57 0.000 Sat Jun 28 13:44:58 10.014 Sat Jun 28 13:44:59 9.991 Sat Jun 28 13:45:00 10.000 Sat Jun 28 13:45:01 10.011 ^C kenj@bozo-vm:~/tmp$ pmdumptext -i kernel.all.cpu.user Sat Jun 28 13:45:13 ? Sat Jun 28 13:45:14 0.01 Sat Jun 28 13:45:15 0.02 Sat Jun 28 13:45:16 0.01 Sat Jun 28 13:45:17 0.01 _______________________________________________ pcp mailing list pcp@oss.sgi.com http://oss.sgi.com/mailman/listinfo/pcp From chandana@desilva.id.au Sun Jun 29 13:45:26 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 09FC17F4E for ; Sun, 29 Jun 2014 13:45:26 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 0052B8F8039 for ; Sun, 29 Jun 2014 11:45:22 -0700 (PDT) X-ASG-Debug-ID: 1404067516-04bdf056686f11c0001-S8gJnT Received: from mho-01-ewr.mailhop.org (mho-03-ewr.mailhop.org [204.13.248.66]) by cuda.sgi.com with ESMTP id ZyBu2IgqwDVuaopm (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Sun, 29 Jun 2014 11:45:17 -0700 (PDT) X-Barracuda-Envelope-From: chandana@desilva.id.au X-Barracuda-Apparent-Source-IP: 204.13.248.66 Received: from ec2-54-252-74-219.ap-southeast-2.compute.amazonaws.com ([54.252.74.219] helo=mail.desilva.id.au) by mho-01-ewr.mailhop.org with esmtpa (Exim 4.72) (envelope-from ) id 1X1K6G-00069B-Bb; Sun, 29 Jun 2014 18:45:16 +0000 Received: from [192.168.1.135] (d211-31-205-134.sun802.vic.optusnet.com.au [211.31.205.134]) by mail.desilva.id.au (Postfix) with ESMTPSA id 9BEF124B6F; Sun, 29 Jun 2014 18:45:13 +0000 (UTC) X-Mail-Handler: Dyn Standard SMTP by Dyn X-Originating-IP: 54.252.74.219 X-Report-Abuse-To: abuse@dyndns.com (see http://www.dyndns.com/services/sendlabs/outbound_abuse.html for abuse reporting information) X-MHO-User: U2FsdGVkX19vlJLxkzKMhDzHtGdeiIXFpWJLw+fzPgI= Message-ID: <53B05EB9.3010703@desilva.id.au> Date: Mon, 30 Jun 2014 04:45:13 +1000 From: Chandana De Silva Reply-To: chandana@desilva.id.au User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0 MIME-Version: 1.0 To: "Frank Ch. Eigler" CC: "pcp@oss.sgi.com" Subject: Re: PCP and Graphite References: <53AE7070.5060801@messagemedia.com.au> <20140628123751.GE29542@redhat.com> X-ASG-Orig-Subj: Re: PCP and Graphite In-Reply-To: <20140628123751.GE29542@redhat.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mho-03-ewr.mailhop.org[204.13.248.66] X-Barracuda-Start-Time: 1404067517 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.7071 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header Hello Frank, Thanks for the prompt reply. Looking at the issues you have had, I will concentrate my energies on the 'backwards' solution. Will let you know how I go. Chandana On 28/06/14 22:37, Frank Ch. Eigler wrote: > OK. (I'm ambivalent as to whether or not to carry that work forward, > considering the more recent pmwebd-graphite-emulation code. [1] It > features apprx. none of the setup headaches you're going through.) > > [1]https://web.elastic.org/~fche/blog3/archive/2014/06/16/pcp-and-graphite-backwards > From fche@redhat.com Sun Jun 29 17:07:50 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 7B13C7F4E for ; Sun, 29 Jun 2014 17:07:50 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 1718DAC001 for ; Sun, 29 Jun 2014 15:07:46 -0700 (PDT) X-ASG-Debug-ID: 1404079662-04cbb065371b4f30001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id k4yAwzCKRFIXolnf (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Sun, 29 Jun 2014 15:07:42 -0700 (PDT) X-Barracuda-Envelope-From: fche@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s5TM7b2T001182 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Sun, 29 Jun 2014 18:07:37 -0400 Received: from fche.csb (vpn-56-123.rdu2.redhat.com [10.10.56.123]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5TM7btA010736; Sun, 29 Jun 2014 18:07:37 -0400 Received: by fche.csb (Postfix, from userid 2569) id B079D5811C; Sun, 29 Jun 2014 18:07:35 -0400 (EDT) Date: Sun, 29 Jun 2014 18:07:35 -0400 From: "Frank Ch. Eigler" To: Amer Ather Cc: Ken McDonell , pcp@oss.sgi.com Subject: Re: [pcp] pcp grafana and graphite - How to convert pcp metric values into percent Message-ID: <20140629220735.GA13993@redhat.com> X-ASG-Orig-Subj: Re: [pcp] pcp grafana and graphite - How to convert pcp metric values into percent References: <002d01cf9284$dc8fe570$95afb050$@internode.on.net> <002f01cf9285$f0c63160$d2529420$@internode.on.net> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.4.2.2i X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1404079662 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Hi - > I tried to rebuild pmwebd with graphite support from fche git branch but > getting errors when try building pmwebapi. Last time it built fine. Is > there any change made to the repo? [...] Please try again now. > /usr/bin/ld: pmgraphite.o: undefined reference to symbol 'pthread_create@ > @GLIBC_2.2.5' Fixed with a new commit pushed to the branch. - FChE From nscott@redhat.com Sun Jun 29 20:02:03 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 83FAC7F4E for ; Sun, 29 Jun 2014 20:02:03 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 119ACAC001 for ; Sun, 29 Jun 2014 18:01:59 -0700 (PDT) X-ASG-Debug-ID: 1404090114-04cbb065351b7a10001-S8gJnT Received: from mx4-phx2.redhat.com (mx4-phx2.redhat.com [209.132.183.25]) by cuda.sgi.com with ESMTP id K0jm1wgMEdmBhsCy for ; Sun, 29 Jun 2014 18:01:55 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.25 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx4-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id s5U11s1C007458; Sun, 29 Jun 2014 21:01:54 -0400 Date: Sun, 29 Jun 2014 21:01:54 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: Dave Brolley Cc: pcp@oss.sgi.com Message-ID: <1374649635.181830.1404090114319.JavaMail.zimbra@redhat.com> In-Reply-To: <1193390011.34470957.1403829231937.JavaMail.zimbra@redhat.com> References: <20140619194444.3B03D58015@fche.csb> <53AB0F27.602@redhat.com> <1063089485.33910956.1403758262805.JavaMail.zimbra@redhat.com> <53AC35B8.3000802@redhat.com> <1193390011.34470957.1403829231937.JavaMail.zimbra@redhat.com> Subject: Re: [pcp] pmServiceDiscoveryInterrupt() commit a8b87e2 et al. MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [pcp] pmServiceDiscoveryInterrupt() commit a8b87e2 et al. Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: pmServiceDiscoveryInterrupt() commit a8b87e2 et al. Thread-Index: odgSRIE01NjIAwLMo56gQttxpqLGSwh3NME7 X-Barracuda-Connect: mx4-phx2.redhat.com[209.132.183.25] X-Barracuda-Start-Time: 1404090115 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.03 X-Barracuda-Spam-Status: No, SCORE=0.03 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA_TO_FROM_DOMAIN_MATCH, THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.7085 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 0.01 BSF_SC0_SA_TO_FROM_DOMAIN_MATCH Sender Domain Matches Recipient Domain Hi Dave, ----- Original Message ----- > [...] > Ayup, 'tis a near-perfect bike shed. If we think there's a good chance > we'll be changing it again, at this stage, we should not be exposing this > stuff at the PMAPI level yet. We could go for use of the ever-delightful > double-underscore routines? (and down the track, we can promote into the > PMAPI once clarity arrives and we are more sure of ourselves). > > Or, the pmDiscoverServicesWithOptions name would be fine too, though it > misses out on the new "interrupted" component I guess ... your call, but > it would be disappointing to see a third PMAPI addition anytime soon. Thought of another possible approach over the weekend. If we expect this interface to need further change (given this is the second version of the interface now, with more development being planned in discovery, we should plan for it) we could use a versioned interface like pmGetOptions(3) and his little friend, pmdaGetOptions(3). That might look something like... typedef struct { int version; int interrupted; /* could become a flags bitfield? */ const char *globalOptions; /* and this could be more explicit, */ /* instead of every possibly option being */ /* coerced into one comma-separated string? */ } pmDiscoveryOptions; int pmDiscoverServicesWithOptions( const char *service, const char *mechanism, pmDiscoveryOptions *options, char ***urls); That API looks fairly neat to me and is a bit more future proof than what we currently have. As new extensions/requirements for the API come along, using the version field & addition-to-end-of-struct-only gives backwards compatibility almost for free (the libpcp code gets to be simpler to extend internally too). cheers. -- Nathan From nscott@redhat.com Sun Jun 29 20:51:24 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 362277F4E for ; Sun, 29 Jun 2014 20:51:24 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 1A02E304039 for ; Sun, 29 Jun 2014 18:51:20 -0700 (PDT) X-ASG-Debug-ID: 1404093077-04cbb065381b8c00001-S8gJnT Received: from mx6-phx2.redhat.com (mx6-phx2.redhat.com [209.132.183.39]) by cuda.sgi.com with ESMTP id 8uT9T6AMXhpWnIZ8 for ; Sun, 29 Jun 2014 18:51:18 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.39 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx6-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5U1pHMO010910 for ; Sun, 29 Jun 2014 21:51:17 -0400 Date: Sun, 29 Jun 2014 21:51:17 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: PCP Message-ID: <261179001.189283.1404093077539.JavaMail.zimbra@redhat.com> In-Reply-To: <1016903188.189073.1404092931662.JavaMail.zimbra@redhat.com> Subject: pcp updates: spec files, pmda longopts, qa MIME-Version: 1.0 X-ASG-Orig-Subj: pcp updates: spec files, pmda longopts, qa Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: pcp updates: spec files, pmda longopts, qa Thread-Index: AN2u9LPwJk0f5c8RUokzS417PzNmbA== X-Barracuda-Connect: mx6-phx2.redhat.com[209.132.183.39] X-Barracuda-Start-Time: 1404093078 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.7086 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Changes committed to git://git.performancecopilot.org/pcp.git dev build/rpm/GNUmakefile | 6 build/rpm/fedora.spec | 7 build/rpm/get_rpm_version | 66 ++++ build/rpm/pcp.spec.in | 4 qa/linux/GNUmakefile | 10 qa/qt/GNUmakefile | 5 src/pmdas/aix/aix.c | 44 +-- src/pmdas/jbd2/pmda.c | 49 +-- src/pmdas/linux/pmda.c | 45 +-- src/pmdas/linux_proc/pmda.c | 52 +-- src/pmdas/linux_xfs/pmda.c | 34 +- src/pmdas/lmsensors/lmsensors.c | 46 +-- src/pmdas/lustrecomm/lustrecomm.c | 44 +-- src/pmdas/mounts/mounts.c | 446 ++++++++++++++------------------ src/pmdas/process/Install | 2 src/pmdas/process/process.c | 524 +++++++++++++++++--------------------- src/pmdas/sendmail/sendmail.c | 45 +-- src/pmdas/txmon/txmon.c | 63 ++-- 18 files changed, 742 insertions(+), 750 deletions(-) commit 49e708a711a1df8502b60c1ae63afaf7b25a24fa Merge: 22b1357 0b96766 Author: Nathan Scott Date: Mon Jun 30 11:46:54 2014 +1000 Merge branch 'dev' of git://git.performancecopilot.org/kenj/pcp into dev commit 22b135709acbed47cb964b2a6ba6a1cadc85cf10 Author: Dave Brolley Date: Thu Jun 19 15:05:01 2014 -0400 Update fedora.spec with changes needed to build for epel5 (el5). commit c82d9dfab9fb64741b6ff9dcd4e1f519ef0153bc Author: Nathan Scott Date: Mon Jun 30 11:37:32 2014 +1000 pmdatxmon: support for long form command line options commit b72dd915808b71c641c407c1c385e72bb2102a7a Author: Nathan Scott Date: Mon Jun 30 11:37:19 2014 +1000 pmdaprocess: support for long form command line options commit e527c4b2190c827088e6ef9fc77ccb8ae6e5cfdc Author: Nathan Scott Date: Mon Jun 30 11:37:06 2014 +1000 pmdamounts: support for long form command line options commit 7e3c055ecb25c0271df4120f890b36311959a066 Author: Nathan Scott Date: Mon Jun 30 11:36:55 2014 +1000 pmdalustre: support for long form command line options commit 930708b6f9d35c426b49f596c1a94c3bcb975ca2 Author: Nathan Scott Date: Mon Jun 30 11:36:42 2014 +1000 pmdalmsensors: support for long form command line options commit 439029ff2111e0b8f32ddc429acb7cfa1e00a0d2 Author: Nathan Scott Date: Mon Jun 30 11:36:24 2014 +1000 pmdaxfs: support for long form command line options commit 358e467d64817deef0b6009d6872661933e96cec Author: Nathan Scott Date: Mon Jun 30 11:36:05 2014 +1000 pmdalinux: support for long form command line options commit ca661a2fc59bdd8701850e85fcede50335b84013 Author: Nathan Scott Date: Mon Jun 30 11:35:50 2014 +1000 pmdajbd2: support for long form command line options commit db4d43c5a9ad481bd790d5a5ff5d7a4e132ac86c Author: Nathan Scott Date: Mon Jun 30 11:35:29 2014 +1000 pmdaaix: support for long form command line options commit c5d5076e00ea47c5fd9df6641a6f550041679501 Author: Nathan Scott Date: Sat Jun 28 10:41:08 2014 +1000 pmdasendmail: convert option parsing to long option form commit 978dc45f84db492f9ad61e1fa27ac5a06bad2215 Author: Nathan Scott Date: Sat Jun 28 10:36:49 2014 +1000 pmdaproc: convert option parsing to long option form commit 0b967667eda32ee970868864d0ae726ac94d6475 Author: Ken McDonell Date: Sat Jun 28 07:13:31 2014 +1000 Fix rpm builds for rpm versions prior to 4.6 For the pcp-doc package, conditionally exclude BuildArch: noarch if the rpm version is not 4.6 or later. commit 3d719332675f77305072c0bc5e19410afcb807bb Author: Nathan Scott Date: Thu Jun 26 16:50:26 2014 +1000 Fix build for installed testsuite packages (missing file) From kenj@internode.on.net Mon Jun 30 02:21:54 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 6F57F7F56 for ; Mon, 30 Jun 2014 02:21:54 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 6263C30405F for ; Mon, 30 Jun 2014 00:21:51 -0700 (PDT) X-ASG-Debug-ID: 1404112905-04bdf056696ff910001-S8gJnT Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id hcYlt9RYbQdUbQPH for ; Mon, 30 Jun 2014 00:21:45 -0700 (PDT) X-Barracuda-Envelope-From: kenj@internode.on.net X-Barracuda-Apparent-Source-IP: 150.101.137.143 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AgpYAKkPsVN20YDzPGdsb2JhbABagw1SgndRhDe+MoEMFwQBAQEBODWEAwEBBQgCGQUuIwwBBQYDEQQBAQMCIwMCGyAKAwkJAQQTCwWIMaoonDKBK41cDYJxgUwFkG2hQis Received: from ppp118-209-128-243.lns20.mel6.internode.on.net (HELO bozohorize) ([118.209.128.243]) by ipmail05.adl6.internode.on.net with ESMTP; 30 Jun 2014 16:51:37 +0930 From: "Ken McDonell" To: "'Nathan Scott'" Cc: Subject: RE: ia64 rpms for 3.9.2 (actually 3.9.5) Date: Mon, 30 Jun 2014 17:21:36 +1000 X-ASG-Orig-Subj: RE: ia64 rpms for 3.9.2 (actually 3.9.5) Message-ID: <001901cf9433$eefbdc40$ccf394c0$@internode.on.net> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Mailer: Microsoft Outlook 15.0 Thread-Index: Ac+UM8IePfi0GNGoQo6VTWwaoOBvtw== Content-Language: en-au X-Barracuda-Connect: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Start-Time: 1404112905 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.01 X-Barracuda-Spam-Status: No, SCORE=0.01 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, THREAD_INDEX X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.7095 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header I have uploaded the sles11/ia64 rpms for 3.9.5 and updated the MD5SUM = file at the root of the PCP ftp download directory. Lemme know if this does not seem OK. > -----Original Message----- > From: Nathan Scott [mailto:nathans@redhat.com] > Sent: Monday, 30 June 2014 8:08 AM > To: Ken McDonell > Subject: Re: ia64 rpms for 3.9.2 >=20 >=20 >=20 > ----- Original Message ----- > > I don't have root on oss.sgi.com (and don't want it). > > > > All the pcp download dirs appear to be owned pcp:pcp and mode 755, = so > > I'm stuck. > > > > Can you change the workflow so the dirs are group pcp mode 775 and > > the files group pcp mode 664 ... then those of us in group pcp could > > create and delete files with different user ids? >=20 > Yep - done. >=20 > > I have the 3.9.5 ia64 rpms for sles11 ready to go. > > > > And I've scripted the pull and push parts, so I should be able to > > easily fire this off in future. >=20 > Great, thanks! Lemme know if there's any issues, but should be fine - = have > recursively set g+w on all of the download area, and checked the = user/group > are set right. >=20 > cheers. >=20 > -- > Nathan From fche@redhat.com Mon Jun 30 05:31:59 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 3F6DC7F56 for ; Mon, 30 Jun 2014 05:31:59 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 35A1D8F8035 for ; Mon, 30 Jun 2014 03:31:59 -0700 (PDT) X-ASG-Debug-ID: 1404124314-04bdf05668704f90001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id Xm5xSDynHKcChqwv (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Mon, 30 Jun 2014 03:31:55 -0700 (PDT) X-Barracuda-Envelope-From: fche@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s5UAVs1S025076 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Mon, 30 Jun 2014 06:31:54 -0400 Received: from fche.csb (vpn-56-123.rdu2.redhat.com [10.10.56.123]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5UAVrjh022998; Mon, 30 Jun 2014 06:31:54 -0400 Received: by fche.csb (Postfix, from userid 2569) id 3AD6858119; Mon, 30 Jun 2014 06:31:53 -0400 (EDT) To: Nathan Scott Cc: Dave Brolley , pcp@oss.sgi.com Subject: Re: pmServiceDiscoveryInterrupt() commit a8b87e2 et al. References: <20140619194444.3B03D58015@fche.csb> <53AB0F27.602@redhat.com> <1063089485.33910956.1403758262805.JavaMail.zimbra@redhat.com> <53AC35B8.3000802@redhat.com> <1193390011.34470957.1403829231937.JavaMail.zimbra@redhat.com> <1374649635.181830.1404090114319.JavaMail.zimbra@redhat.com> X-ASG-Orig-Subj: Re: pmServiceDiscoveryInterrupt() commit a8b87e2 et al. From: fche@redhat.com (Frank Ch. Eigler) Date: Mon, 30 Jun 2014 06:31:53 -0400 In-Reply-To: <1374649635.181830.1404090114319.JavaMail.zimbra@redhat.com> (Nathan Scott's message of "Sun, 29 Jun 2014 21:01:54 -0400 (EDT)") Message-ID: User-Agent: Gnus/5.1008 (Gnus v5.10.8) Emacs/21.4 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Scanned-By: MIMEDefang 2.68 on 10.5.11.24 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1404124314 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Nathan Scott writes: > typedef struct { > int version; > int interrupted; /* could become a flags bitfield? */ > const char *globalOptions; /* and this could be more explicit, */ > } pmDiscoveryOptions; FWIW, since the abi comes to include the version# in the field, it is IMHO a little worse than just putting the version number right into the function name. At least with that approach, we would have proper type checking by the compiler for each version. That's something lacking in version-tagged structs -- and a hassle with e.g. the pmda structure. - FChE From wcohen@redhat.com Mon Jun 30 13:41:35 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 1CE657F66 for ; Mon, 30 Jun 2014 13:41:35 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 041C88F8065 for ; Mon, 30 Jun 2014 11:41:34 -0700 (PDT) X-ASG-Debug-ID: 1404153690-04cbb065351d9040001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id e9pDlODqZYX6S34u (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Mon, 30 Jun 2014 11:41:30 -0700 (PDT) X-Barracuda-Envelope-From: wcohen@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s5UIfThK019322 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Mon, 30 Jun 2014 14:41:30 -0400 Received: from [10.13.129.123] (dhcp129-123.rdu.redhat.com [10.13.129.123]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5UIfT7U032579; Mon, 30 Jun 2014 14:41:29 -0400 Message-ID: <53B1AF59.9080506@redhat.com> Date: Mon, 30 Jun 2014 14:41:29 -0400 From: William Cohen User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.6.0 MIME-Version: 1.0 To: Lukas Berk , pcp@oss.sgi.com Subject: Re: [pcp] PCP papi PMDA References: <20140625024307.GA9275@redhat.com> X-ASG-Orig-Subj: Re: [pcp] PCP papi PMDA In-Reply-To: <20140625024307.GA9275@redhat.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.22 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1404153690 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On 06/24/2014 10:43 PM, Lukas Berk wrote: > Hey, > > As Nathan noted on the PCP developer conference call agenda[1], I've been > working on a new pmda for accessing Performance API counters. The > latest iteration has been pushed to the lberk/papi branch on pcpfans[2] > for anybody that would like to take a look (I would greatly appreciate > any feedback). Some potential points of interest (and maybe things to > discuss on tomorrows call?): > > - I've decided to experiment with adding the metrics of interest on a > per client basis, instead of a global-enabled-all-metrics variable > which is set with the pmstore functions. I think this approach might > be worth applying here so we're more surgical in which events are > actually included in the active papi 'eventset', hopefully lowering > our performance hit while papi functionality is enabled. > > - Currently just system wide events are reported, but I'd like to add > functionality for a per-process domain > > - I'm aware that what is currently in the branch assumes papi is > installed on the machine running the PMDA. I'll be adding the > required configury bits moving forward to check for papi first. > > - Currently the PMNS is fixed, a possible stretch goal would be to > dynamically create the PMNS based on what papi events are actually > available on the specific hardware. > > - I've structured the PMNS currently to resemble > papi.kernel. > where 'metric_name' is similar to the papi 'event code' (ex, > total_inst or L2_TCM). This approach would leave room for the process > name once the per-process domain is added. > > - Only root level UID's are allowed to access the papi values > > > Looking forward to discussing this tomorrow on the call, and any > thoughts on list welcome as well. > > Thanks, > > Lukas > > [1] - > http://www.performancecopilot.org/pipermail/pcp-announce/2014-June/000043.html > [2] - > https://www.sourceware.org/git/gitweb.cgi?p=pcpfans.git;a=shotlog;h=refs/heads/lberk/papi > > > > _______________________________________________ > pcp mailing list > pcp@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/pcp > Hi Lukas, I am looking over the papi pmda code and I have the following questions and comments. The following is more of an desired future feature that requires changes to current papi. It would be really nice if this (and other pmdas) allowed grouping by cgroups. This would be really useful for things using containers such as docker and openshift. Then it would make it easy to pick out problem containers. Some processors do not implement all versions of pap.kernel.L[123].[IDT]CM listed in metrictab imlemented. Do these fail gracefully in the papi pmda? Is it expected when trying my locally built pcp RPM with papi patches I needed to manually do the following or is something missing for the install? cd /var/lib/pcp/pmdas/papi sudo ./Install "pminfo -FT papi" only appears to work as root? Shouldn't there be a note on that? Or would it be possible to pminfo just check to see that the event is available within a process and extrapolate that it should be aavailable system-wide? Also got messages like the following for virtually all of the events (there isn't anything else using the pmu at the moment): papi.kernel.L1_STM Help: Level 1 store misses. Error: Try again. Information not currently available In papi_fetchCallBack() the switch statement codes the magic numbers to various entries. Isn't there a more compact and regular way to code that? Would it be possible to use negative number for control and have the events be positive to avoid having to offset some values by 1? -Will From wcohen@redhat.com Mon Jun 30 16:10:04 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id AFF377F62 for ; Mon, 30 Jun 2014 16:10:04 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 3E560AC003 for ; Mon, 30 Jun 2014 14:10:01 -0700 (PDT) X-ASG-Debug-ID: 1404162596-04cbb065381de880001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id cIQOQHdWc7cMHlka (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Mon, 30 Jun 2014 14:09:56 -0700 (PDT) X-Barracuda-Envelope-From: wcohen@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s5UL9so7027238 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 30 Jun 2014 17:09:54 -0400 Received: from [10.13.129.123] (dhcp129-123.rdu.redhat.com [10.13.129.123]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s5UL9sxv019330; Mon, 30 Jun 2014 17:09:54 -0400 Message-ID: <53B1D222.8010601@redhat.com> Date: Mon, 30 Jun 2014 17:09:54 -0400 From: William Cohen User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.6.0 MIME-Version: 1.0 To: "White, Joseph" , "pcp@oss.sgi.com" Subject: Re: [pcp] New perfevent PMDA References: X-ASG-Orig-Subj: Re: [pcp] New perfevent PMDA In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1404162596 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On 06/26/2014 01:29 PM, White, Joseph wrote: > Hi, > > Attached is a perfevent PMDA for general review/comments/suggestions. This linux-specific pmda exposes the hardware performance counters available on recent x86 systems. This pmda has been running on our cluster the last 10 months without problems (I've been meaning to submit this for inclusion for a while!). > > Notes: > > The PMDA uses the libpfm4 library to access the hardware performance counters so any counters that are supported in libpfm4 should be available. Also included is the ability to read the Intel RAPL counters via direct MSR access. > > The PMDA supports automatically loading different counters for each hardware architecture. A single configuration file is used to specify the desired counters for each chipset family. The configuration file allows different counters to be programmed on different CPUs and supports round-robin assignment of uncore counters needed for some AMD chips. The default configuration is known to work on Intel Sandybridge EP, Intel Westmere DP, Intel Nehalem EX and Intel Core2 chipsets. > > The PMDA accesses the system-wide hardware counters and runs as root. This means that the hardware counters are unavailable to use by normal unprivileged user applications when they are in use by the PMDA. The PMDA provides a mechanism to temporarily disable the system-wide counters in order to allow normal users to be able to use the counters if they wish. > > Build requirements: > - libpfm4 > - flex > > Cheers, > > Joe > Hi Joe, I am just starting to take a look at the perfevent pmda. You mentioned that perfevent pmda has been used for the past 10 months. Is perfevent pmda being used to collect data for XDMoD (https://xdmod.ccr.buffalo.edu/)? People may want to run this on other architectures such as arm, aarch64, or power or at least build pcp on those architectures with same sources. Has there been attempt to compile the code on non-x86 architectures so this won't break builds on Fedora or distributions with non-x86 architectures? How portable is the perf event selection to non-x86 architectures? This might be an error on my part, but do the libraries for math and pthreads (-lm and -lphtread) need to be stated in the GNUmakefile or are those passed by $(PCP_PMDALIB)? -Will