ນີ້ແມ່ນຄໍາສັ່ງ pmcpp ທີ່ສາມາດດໍາເນີນການໄດ້ໃນ OnWorks ຜູ້ໃຫ້ບໍລິການໂຮດຕິ້ງຟຣີໂດຍໃຊ້ຫນຶ່ງໃນຫຼາຍບ່ອນເຮັດວຽກອອນໄລນ໌ຂອງພວກເຮົາເຊັ່ນ Ubuntu Online, Fedora Online, Windows online emulator ຫຼື MAC OS online emulator
ໂຄງການ:
NAME
pmcpp - ໂປເຊດເຊີ preprocessor ງ່າຍດາຍສໍາລັບການປະຕິບັດການຮ່ວມ Pilot
ສະຫຼຸບສັງລວມ
pmcpp [- ປ] [-D ຊື່[=ມູນຄ່າ] ...] [-I dir ... ] [infile]
ລາຍລະອຽດ
pmcpp ສະໜອງເຄື່ອງປະມວນຜົນທາງສ່ວນໜ້າທີ່ງ່າຍດາຍຫຼາຍທີ່ອອກແບບມາເພື່ອການຈັດການ
ໄຟລ໌ Performance Metric Name Space (PMNS) ສໍາລັບ Performance Co-Pilot (PCP), ແຕ່ຕໍ່ມາ
generalized ເພື່ອສະຫນອງຕັນທີ່ມີເງື່ອນໄຂ, ປະກອບມີການປຸງແຕ່ງໄຟລ໌, ຄໍາສັ່ງ shell ໃນເສັ້ນ
ການປະຕິບັດແລະການທົດແທນມະຫາພາກສໍາລັບໄຟລ໌ທີ່ມັກ. ມັນຖືກນໍາໃຊ້ຫຼາຍທີ່ສຸດພາຍໃນ
ເພື່ອປະມວນຜົນໄຟລ໌ PMNS ຫຼັງຈາກ pmLoadNameSpace(3) ຫຼື pmLoadASCIINameSpace(3) ເອີ້ນວ່າ
ແລະກ່ອນການປະມວນຜົນໄຟລ໌ການຕັ້ງຄ່າສໍາລັບ pmlogger(1).
ສາຍການປ້ອນຂໍ້ມູນແມ່ນອ່ານຈາກ infile (ຫຼືການປ້ອນຂໍ້ມູນມາດຕະຖານຖ້າ infile ບໍ່ໄດ້ລະບຸ), ດໍາເນີນການ
ແລະຂຽນເປັນຜົນຜະລິດມາດຕະຖານ.
ຄຳເຫັນ C-style ທັງໝົດຂອງແບບຟອມ /* ... */ ຖືກຖອດອອກຈາກກະແສການປ້ອນຂໍ້ມູນ.
ບໍ່ມີມະຫາພາກທີ່ກຳນົດໄວ້ລ່ວງໜ້າສຳລັບ pmcpp ເຖິງແມ່ນວ່າ macro ອາດຈະຖືກກໍານົດໄວ້ໃນຄໍາສັ່ງ
ເສັ້ນການນໍາໃຊ້ -D ທາງເລືອກ, ບ່ອນທີ່ ຊື່ ແລະ ມູນຄ່າ ຕ້ອງປະຕິບັດຕາມກົດລະບຽບດຽວກັນກັບຄໍາອະທິບາຍ
ຂ້າງລຸ່ມນີ້ສໍາລັບ #ກໍານົດ ທິດທາງ.
pmcpp ຍອມຮັບຄໍາສັ່ງຕໍ່ໄປນີ້ໃນກະແສການປ້ອນຂໍ້ມູນ (ເຊັ່ນ: cpp(1)):
· #include "ຊື່ເອກະສານ"
or
#include <ຊື່ເອກະສານ>
ໃນກໍລະນີໃດກໍ່ຕາມເສັ້ນທາງຄົ້ນຫາໄດເລກະທໍລີສໍາລັບ ຊື່ເອກະສານ ພະຍາຍາມ ຊື່ເອກະສານ ກ່ອນອື່ນ ໝົດ, ຈາກນັ້ນ
ໄດເລກະທໍລີສໍາລັບເສັ້ນຄໍາສັ່ງ infile (ຖ້າມີ), ຕາມດ້ວຍໄດເລກະທໍລີທີ່ມີຊື່ຢູ່ໃນ -I
ການໂຕ້ຖຽງເສັ້ນຄໍາສັ່ງ, ແລະສຸດທ້າຍໄດ້ $PCP_VAR_DIR/ນາທີ ໄດເລກະທໍລີ (ອັນສຸດທ້າຍແມ່ນສໍາລັບ
ຄວາມເຂົ້າກັນໄດ້ໃນດ້ານຫຼັງກັບລຸ້ນກ່ອນໜ້າຂອງ pmcpp ແລະໂດຍຄວາມຫມາຍນໍາໃຊ້ຈາກ
pmLoadASCIINameSpace(3)). #include ຄໍາສັ່ງອາດຈະຖືກວາງໄວ້, ສູງເຖິງຄວາມເລິກສູງສຸດຂອງ
5.
· #ຫອຍ "ຄໍາສັ່ງ"
or
#ຫອຍ 'ຄໍາສັ່ງ'
ໄດ້ ຫອຍ ຄໍາສັ່ງ ຈະຖືກປະຕິບັດແລະຜົນຜະລິດມາດຕະຖານຖືກໃສ່ເຂົ້າໄປໃນນ້ໍາ
ຂອງຂໍ້ມູນທີ່ຈະດໍາເນີນການໂດຍ pmcpp. ການເຮັດວຽກນີ້ແມ່ນຄ້າຍຄືກັນກັບ a #include
ຄໍາສັ່ງ, ຍົກເວັ້ນສາຍການປ້ອນຂໍ້ມູນແມ່ນອ່ານຈາກ a ຄໍາສັ່ງ ແທນທີ່ຈະເປັນໄຟລ໌. ໄດ້ #ຫອຍ
ຄໍາສັ່ງແມ່ນເປັນປະໂຫຍດທີ່ສຸດສໍາລັບການລວມຫຼືຍົກເວັ້ນ #ກໍານົດ or #ສຸດຍອດ ຄໍາແນະນໍາໂດຍອີງໃສ່
on run-time logic ໃນ ຄໍາສັ່ງ.
· #ກໍານົດ ຊື່ ມູນຄ່າ
or
#ກໍານົດ ຊື່ "ມູນຄ່າ"
or
#ກໍານົດ ຊື່ 'ມູນຄ່າ'
ກຳນົດຄ່າສຳລັບມະຫາພາກ ຊື່ ເຊິ່ງຕ້ອງເປັນຊື່ C-style ທີ່ຖືກຕ້ອງ, ດັ່ງນັ້ນຈຶ່ງນໍາ
ຕົວອັກສອນ ຫຼື ຂີດກ້ອງຕາມດ້ວຍຕົວເລກສູນ ຫຼື ຫຼາຍກວ່ານັ້ນ ຫຼື ຂີດກ້ອງ. ມູນຄ່າ
ເປັນທາງເລືອກ (ແລະຄ່າເລີ່ມຕົ້ນຂອງສະຕຣິງຫວ່າງເປົ່າ). ບໍ່ມີກົນໄກການຫລົບຫນີຕົວລະຄອນ,
ແຕ່ວົງຢືມດຽວຫຼືວົງຢືມຄູ່ອາດຈະຖືກນໍາໃຊ້ເພື່ອກໍານົດ a ມູນຄ່າ ມີພິເສດ
ຕົວອັກສອນ ຫຼື ຝັງພື້ນທີ່ສີຂາວຕາມແນວນອນ (ບໍ່ມີເສັ້ນໃໝ່).
· #ສຸດຍອດ ຊື່
ເອົາຄໍານິຍາມມະຫາພາກ, ຖ້າມີ, ສໍາລັບ ຊື່.
· #ifdef ຊື່
...
#ສຸດທ້າຍ
or
#ifndef ຊື່
...
#ສຸດທ້າຍ
ເສັ້ນປິດລ້ອມຈະຖືກລອກອອກຫຼືລວມ, ຂຶ້ນກັບມະຫາພາກ ຊື່ is
ກໍານົດຫຼືບໍ່.
· #ອື່ນ
ພາຍໃນກ #ifdef or #ifndef ຕັນ, #ອື່ນ ອາດຈະຖືກນໍາໃຊ້ເພື່ອ delimit ສາຍທີ່ຈະລວມຖ້າຫາກວ່າ
ເງື່ອນໄຂ ``ຖ້າ'' ກ່ອນໜ້າແມ່ນຜິດ.
ການທົດແທນ Macro ແມ່ນບັນລຸໄດ້ໂດຍການທໍາລາຍການປ້ອນຂໍ້ມູນເຂົ້າໄປໃນຄໍາສັບທີ່ແຍກດ້ວຍສີຂາວ
ຍະຫວ່າງ ຫຼືຕົວອັກສອນທີ່ບໍ່ຖືກຕ້ອງຢູ່ໃນຊື່ມະຫາພາກ, ເຊັ່ນວ່າບໍ່ແມ່ນຕົວເລກ ແລະບໍ່ແມ່ນຕົວເລກ
ຂີດກ້ອງ. ແຕ່ລະຄໍາຖືກກວດສອບແລະຖ້າມັນກົງກັບຊື່ມະຫາພາກ, ຄໍາຈະຖືກແທນທີ່ດ້ວຍ
ຄ່າມະຫາພາກ, ຖ້າບໍ່ດັ່ງນັ້ນຄໍາສັບຈະບໍ່ປ່ຽນແປງ.
ໂດຍທົ່ວໄປແລ້ວມີເສັ້ນຫນຶ່ງຜົນຜະລິດສໍາລັບແຕ່ລະສາຍການປ້ອນຂໍ້ມູນ, ເຖິງແມ່ນວ່າສາຍອາດຈະຫວ່າງເປົ່າຖ້າ
ຂໍ້ຄວາມໄດ້ຖືກຖອດອອກເນື່ອງຈາກການຈັດການຄໍາຄິດເຫັນຫຼືຄໍາແນະນໍາເງື່ອນໄຂ.
ໃນເວລາທີ່ມີການປ່ຽນແປງໃນນ້ໍາການປ້ອນຂໍ້ມູນ, ສາຍການຜະລິດເພີ່ມເຕີມແມ່ນການຜະລິດຂອງ
ແບບຟອມ:
# lineno "ຊື່ໄຟລ໌"
ເພື່ອຊີ້ບອກ ດັ່ງຕໍ່ໄປນີ້ ເສັ້ນຜົນຜະລິດກົງກັບຕົວເລກແຖວ lineno ຂອງການປ້ອນຂໍ້ມູນ
ເອກະສານ ຊື່ເອກະສານ.
ໄດ້ -P argument ສະກັດກັ້ນການຜະລິດຂອງ linemarker ເຫຼົ່ານີ້.
ໄດ້ -s argument ປ່ຽນຮູບແບບການປ້ອນຂໍ້ມູນທີ່ຄາດໄວ້ຈາກ C-like ເປັນ shell-like (ບ່ອນທີ່ # ແມ່ນ a
ຄໍານໍາຫນ້າຄໍາເຫັນ). ນີ້ບັງຄັບໃຫ້ມີການປ່ຽນແປງດັ່ງຕໍ່ໄປນີ້ໃນ pmcpp ພຶດຕິກຳ:
· ຕົວແທນທີ່ຈະຄວບຄຸມການປ່ຽນແປງຈາກ # to %, ດັ່ງນັ້ນ % ລວມມີ ຍົກຕົວຢ່າງ.
· ບໍ່ມີການລົບລ້າງຄວາມຄິດເຫັນແມ່ນປະຕິບັດ.
ເພື່ອໃຫ້ການຄວບຄຸມການຂະຫຍາຍມະຫາພາກທີ່ລະອຽດກວ່າ, ໄດ້ -r ທາງເລືອກຈໍາກັດການທົດແທນມະຫາພາກເປັນ
ຄໍາທີ່ກົງກັບຮູບແບບ #ຊື່ຫຼື #{ຊື່} ຫຼືຖ້າ -s ຖືກກໍານົດ, ຫຼັງຈາກນັ້ນ %ຊື່ຫຼື
%{ຊື່}. ໃນຮູບແບບນີ້, ມະຫາພາກ ຊື່ ຢູ່ຄົນດຽວໃນກະແສການປ້ອນຂໍ້ມູນຈະບໍ່ຖືກຂະຫຍາຍ,
ແນວໃດກໍ່ຕາມໃນສາຍການຄວບຄຸມ (ເຊັ່ນ: #ifdef) ມະຫາພາກ ຊື່ ຄວນຈະປາກົດຢູ່ຄົນດຽວໂດຍບໍ່ມີການອອກ
ຕົວອັກສອນຄຳນຳໜ້າ ຫຼືວົງເລັບໂຄ້ງ (ເບິ່ງຕົວຢ່າງຂ້າງລຸ່ມນີ້).
ທີ່ສໍາຄັນ cpp(1) ລັກສະນະທີ່ມີ ບໍ່ ສະ ໜັບ ສະ ໜູນ ໂດຍ pmcpp ປະກອບມີ:
· Macros ກັບພາລາມິເຕີ - the pmcpp macros ຮອງຮັບພຽງແຕ່ສະຕຣິງທີ່ບໍ່ມີຕົວກໍານົດການ
ການທົດແທນ.
· # ຖ້າ ຕົວຢ່າງ
...
#ສຸດທ້າຍ
· ການນໍາໃຊ້ Nested ຂອງ #ifdef or #ifndef.
· Stripping ຄໍາເຫັນແບບ C++, ເຊັ່ນດຽວກັນກັບ // ຄໍາເຫັນ.
·ການຟື້ນຕົວຄວາມຜິດພາດ - ຄວາມຜິດພາດຄັ້ງທໍາອິດພົບໂດຍ pmcpp ຈະຕາຍ.
· cpp(1) ທາງເລືອກແຖວຄໍາສັ່ງເຊັ່ນ: -o, -W, -U, ແລະ -x.
ຕົວຢ່າງ
┌───────────────────────────────────── ┐
│ ຄຳສັ່ງ: pmcpp │
├────────────────── ┬─────────────────────
│ການປ້ອນຂໍ້ມູນ │ ຜົນຜະລິດ │
├──────────────────────── ┼───────────────────
│ │ #1" " │
│#define MYDOMAIN 27 │ │
│ │ │
│ root { │ ຮາກ { │
│ foo MYDOMAIN:0:0 │ foo 27:0:0 │
│} │ } │
└──────────────────────── ┴──────────────────
ສໍາລັບຕົວຢ່າງຕໍ່ໄປນີ້, ໄຟລ໌ ຄວາມຖີ່ ປະກອບດ້ວຍສາຍ:
% ກໍານົດ dk_freq 1 ນາທີ
% ກໍານົດ cpu_freq '15 ວິນາທີ'
┌──────────────────────────────────────── ────────────────────────┐
│ ຄຳສັ່ງ: pmcpp -rs │
├───────────────────────────────────────────── ────────────────────────┤
│ການປ້ອນຂໍ້ມູນ │ ຜົນຜະລິດ │
├─────────────────────────────────────────── ────────────────────────┤
│# ໄດ້ຮັບຄວາມຖີ່ຂອງການເຂົ້າສູ່ລະບົບ │ # ໄດ້ຮັບຄວາມຖີ່ຂອງການບັນທຶກ │
│# ຕົວຢ່າງ dk_freq macro │ # ຕົວຢ່າງ dk_freq macro │
│% ລວມມີ "ຄວາມຖີ່" │ │
│ │ │
│ ບັນທຶກບັງຄັບຢູ່ໃນ %dk_freq { │ ບັນທຶກບັງຄັບໃນ 1 ນາທີ { │
│ disk.dev │ disk.dev │
│} │ } │
│ │ │
│# note no % for want_cpu here │ # note no % for want_cpu here │
│%ifdef want_cpu │ │
│%define cpu_pfx 'kernel.all.cpu.' │ │
│log ບັງຄັບຢູ່ໃນ %cpu_freq { │ │
│ %{cpu_pfx}ຜູ້ໃຊ້ │ │
│ %{cpu_pfx}sys │ │
│} │ │
│%endif │ │
└──────────────────────────────────────────── ────────────────────────┘
┌──────────────────────────────────────── ────────────────────────┐
│ ຄຳສັ່ງ: pmcpp -rs -Dwant_cpu │
├───────────────────────────────────────────── ────────────────────────┤
│ການປ້ອນຂໍ້ມູນ │ ຜົນຜະລິດ │
├─────────────────────────────────────────── ────────────────────────┤
│# ໄດ້ຮັບຄວາມຖີ່ຂອງການເຂົ້າສູ່ລະບົບ │ # ໄດ້ຮັບຄວາມຖີ່ຂອງການບັນທຶກ │
│# ຕົວຢ່າງ dk_freq macro │ # ຕົວຢ່າງ dk_freq macro │
│% ລວມມີ "ຄວາມຖີ່" │ │
│ │ │
│ ບັນທຶກບັງຄັບຢູ່ໃນ %dk_freq { │ ບັນທຶກບັງຄັບໃນ 1 ນາທີ { │
│ disk.dev │ disk.dev │
│} │ } │
│ │ │
│# note no % for want_cpu here │ # note no % for want_cpu here │
│%ifdef want_cpu │ │
│%define cpu_pfx 'kernel.all.cpu.' │ │
│log ບັງຄັບໃນ %cpu_freq { │ ບັນທຶກບັງຄັບໃນ 15 ວິນາທີ { │
│ %{cpu_pfx}ຜູ້ໃຊ້ │ kernel.all.cpu.user │
│ %{cpu_pfx}sys │ kernel.all.cpu.sys │
│} │ } │
│%endif │ │
└──────────────────────────────────────────── ────────────────────────┘
PCP ENVIRONMENT
ຕົວແປສະພາບແວດລ້ອມທີ່ມີຄໍານໍາຫນ້າ PCP_ ຖືກນໍາໃຊ້ເພື່ອກໍານົດໄຟລ໌ແລະໄດເລກະທໍລີ
ຊື່ທີ່ໃຊ້ໂດຍ PCP. ໃນແຕ່ລະການຕິດຕັ້ງ, ໄຟລ໌ /etc/pcp.conf ປະກອບມີຄ່າທ້ອງຖິ່ນ
ສໍາລັບຕົວແປເຫຼົ່ານີ້. ໄດ້ $PCP_CONF ຕົວແປອາດຈະຖືກໃຊ້ເພື່ອລະບຸທາງເລືອກ
ໄຟລ໌ການຕັ້ງຄ່າ, ດັ່ງທີ່ໄດ້ອະທິບາຍໄວ້ໃນ pcp.conf(5).
ໃຊ້ pmcpp ອອນໄລນ໌ ໂດຍໃຊ້ບໍລິການ onworks.net