| PMGENMAP(1) | General Commands Manual | PMGENMAP(1) |
نام (NAME)
pmgenmap - تولید کد C برای سادهسازی مدیریت معیارهای کارایی
خلاصه دستور (SYNOPSIS)
pmgenmap [infile]
توضیحات (DESCRIPTION)
با دریافت یک یا چند فهرست از نامهای معیار در infile یا در ورودی استاندارد، pmgenmap اعلانهای C و ماکروهای cpp(1) مناسب برای استفاده در «رابط برنامهنویسی معیارهای کارایی» (PMAPI) را در خروجی استاندارد تولید میکند.
اعلانهای تولیدشده توسط pmgenmap کدنویسی برنامههای کارخواهی را که از PMAPI استفاده میکنند ساده میسازد.
ورودی باید شامل یک یا چند فهرست از نامهای معیار به شکل زیر باشد:
listname {
metricname1 symbolname1
metricname2 symbolname2
...
}
که اعلانهای C و cpp(1) را به شکل زیر تولید خواهد کرد:
char *listname[] = {
#define symbolname1 0
"metricname1",
#define symbolname2 1
"metricname2",
...
};
اعلانهای آرایهایِ تولیدشده بهعنوان آرگومان برای pmLookupName(3) مناسب هستند، و از ثابتهای تعریفشده با #define میتوان برای نمایهگذاری vset ها در ساختار pmResult که توسط فراخوانی pmFetch(3) بازگردانده میشود، استفاده کرد.
بدیهی است که listname باید با قواعد نامگذاری شناسهها در C مطابقت داشته باشد، هر symbolname باید از قواعد نامگذاری ماکروهای cpp(1) پیروی کند، و انتظار میرود هر metricname یک نام معتبر برای معیارهای کارایی باشد (برای جزئیات بیشتر به PMNS(5) مراجعه کنید).
ورودی ممکن است شامل خطوط توضیح به سبک sh باشد، یعنی خطوطی که در آنها نخستین نویسهٔ غیرفاصله یک «#» است؛ این خطوط در خروجی به توضیحات تکخطی یا چندخطی C به سبک K&R تبدیل میشوند. برای نمونه، ورودی:
# leading block of multi-line comments
# initialization group
foo {
a.b.c ONE
d.e.f.g TWO
# embedded block of multi-lines
# comments and boring pad text
xx.yy.zz THREE
}
# trailing single line comment
خروجی زیر را تولید میکند:
/*
* leading block of multi-line comments
* initialization group
*/
char *foo[] = {
#define ONE 0
"a.b.c",
#define TWO 1
"d.e.f.g",
/*
* embedded block of multi-lines
* comments and boring pad text
*/
#define THREE 2
"xx.yy.zz",
};
/* trailing single line comment */
مثالها (EXAMPLES)
برای رعایت اختصار، کد مدیریت خطا حذف شده است و فرض شده معیارهای انتخابشده دارای چندین مقدار نیستند.
فایل ورودی
mystats {
kernel.percpu.cpu.idle IDLE
kernel.percpu.cpu.sys SYS
kernel.percpu.cpu.user USER
hinv.ncpu NCPU
}
کد C زیر را تولید میکند که برای #include کردن مناسب است:
/*
* Performance Metrics Name Space Map
* Built by pmgenmap from the file
* mystats.metrics
* on Wed Dec 28 19:44:17 EST 1994
*
* Do not edit this file!
*/
char *mystats[] = {
#define IDLE 0
"kernel.percpu.cpu.idle",
#define SYS 1
"kernel.percpu.cpu.sys",
#define USER 2
"kernel.percpu.cpu.user",
#define NCPU 3
"hinv.ncpu",
};
با استفاده از کد تولیدشده توسط pmgenmap، اکنون میتوانیم به شکل زیر بهسادگی معیارهایی را از «زیرسیستم جمعآوری معیارهای کارایی» (PMCS) به دست آوریم:
#define MAX_PMID 4
int trip = 0;
int numpmid = sizeof(mystats)/sizeof(mystats[0]);
double duration;
pmResult *resp;
pmResult *prev;
pmID pmidlist[MAX_PMID];
pmNewContext(PM_CONTEXT_HOST, "localhost");
pmLookupName(numpmid, mystats, pmidlist);
pmFetch(numpmid, pmidlist, &resp);
printf("%d CPUs: %d usr %d sys %d idle0,
resp->vset[NCPU]->vlist[0].value.lval,
resp->vset[USER]->vlist[0].value.lval,
resp->vset[SYS]->vlist[0].value.lval,
resp->vset[IDLE]->vlist[0].value.lval);
برخی از فراخوانیها برای اطمینان از قابلیت حمل، جهت وضوح بیشتر از کد بالا حذف شدهاند - مثال بالا نباید بهعنوان الگویی برای برنامهنویسی استفاده شود. بهویژه، مقادیر خام معیارها در حالی استفاده شدهاند که برای تعیین معناشناسی هر معیار باید pmLookupDesc(3) فراخوانی میشد.
مثالهای کاملتری که نحوهٔ استفاده از pmgenmap را نشان میدهند و میتوانند بهعنوان پایهای برای توسعهٔ برنامهها به کار روند، در برنامههای نمایشی PCP گنجانده شدهاند؛ مانند $PCP_DEMOS_DIR/pmclient.
فایلها (FILES)
- $PCP_VAR_DIR/pmns/*
- فایلهای مشخصات پیشفرض PMNS
محیط PCP (PCP ENVIRONMENT)
متغیرهای محیطی با پیشوند PCP_ برای پارامتریکسازی نام فایلها و دایرکتوریهای مورداستفادهٔ PCP به کار میروند. در هر نصب، فایل /etc/pcp.conf حاوی مقادیر محلی برای این متغیرها است. همانطور که در pcp.conf(5) شرح داده شده است، متغیر $PCP_CONF میتواند برای مشخص کردن یک فایل پیکربندی جایگزین استفاده شود.
همچنین ببینید (SEE ALSO)
cpp(1)، PMAPI(3)، pmFetch(3)، pmLookupName(3)، pmNewContext(3)، pcp.conf(5)، pcp.env(5) و PMNS(5).
| PCP | Performance Co-Pilot |