123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534 |
- Overview of commands
- =====================
- Here is an overview of the most common usage of the PTL commands, there are many
- more options to control the commands, see the --help option of each command for
- details.
- .. _pbs_benchpress:
- How to use pbs_benchpress
- -------------------------
- pbs_benchpress is PTL's test harness, it is used to drive testing, logging
- and reporting of test suites and test cases.
- To list information about a test suite::
- pbs_benchpress -t <TestSuiteName> -i
- To check for compilation errors use below command::
- python -m py_compile /path/to/your/test/file.py
- Before running any test we have to export below 2 paths::
- export PYTHONPATH=</path/to/install/location>/lib/python<python version>/site-packages
- ::
-
- export PATH=</path/to/install/location>/bin
- To Run a test suite and/or a test case
- 1. To run the entire test suite::
- pbs_benchpress -t <TestSuiteName>
- where `TestSuiteName` is the name of the class in the .py file you created
- 2. To run a test case part of a test suite::
- pbs_benchpress -t <TestSuiteName>.<test_case_name>
- where `TestSuiteName` is as described above and `test_case_name` is the name
- of the test method in the class
- 3. You can run the under various logging levels using the -l option::
- pbs_benchpress -t <TestSuiteName> -l DEBUG
- To see various logging levels see :ref:`log_levels`
- 4. To run all tests that inherit from a parent test suite class run the
- parent test suite passing the `--follow-child` param to pbs_benchpress::
- pbs_benchpress -t <TestSuite> --follow-child
- 5. To exclude specific testsuites, use the --excluding option as such::
- pbs_benchpress -t <TestSuite> --follow-child --exclude=<SomeTest>
- 6. To run the test by the name of the test file, for example, if a test
- class is defined in a file named pbs_XYZ.py then you an run it using::
- pbs_benchpress -f ./path/to/pbs_XYZ.py
- 7. To pass custom parameters to a test suite::
- pbs_benchpress -t <TestSuite> -p "<key1>=<val1>,<key2>=<val2>,..."
- Alternatively you can pass --param-file pointing to a file where parameters
- are specified. The contents of the file should be one parameter per line::
- pbs_benchpress -t <TestSuite> --param-file=</path/to/file>
- Example: take file as "param_file" then file content should be as below.
-
- key1=val1
- key2=val2
- .
- .
- Once params are specified, a class variable called param is set in the Test
- that can then be parsed out to be used in the test. When inheriting from
- PBSTestSuite, the key=val pairs are parsed out and made available in the
- class variable ``conf``, so the test can retrieve the information using::
- if self.conf.has_key(key1):
- ...
- 8. To check that the available Python version is above a minimum::
- pbs_benchpress --min-pyver=<version>
- 9. To check that the available Python version is less than a maximum::
- pbs_benchpress --max-pyver=<version>
- 10. On Linux, you can generate PBS coverage data using PTL.
- To collect coverage data using LCOV/LTP, first ensure that PBS was
- compiled using --set-cflags="--coverage" and make sure that you have the lcov
- utility installed. Lcov utility can be obtained at http://ltp.sourceforge.net/coverage/lcov.php
- Then to collect PBS coverage data run pbs_benchpress as follow::
- pbs_benchpress -t <TestName> --lcov-data=</path/to/gcov/build/dir>
- By default the output data will be written to TMPDIR/pbscov-YYYMMDD_HHMMSS,
- this can be controlled using the option --lcov-out.
- By default the lcov binary is expected to be available in the environment, if
- it isn't you can set the path using the option --lcov-bin.
- 11. For tests that inherit from PBSTestSuite, to collect procecess information::
- pbs_benchpress -t <TestSuite> -p "procmon=<proc name>[:<proc name>],procmon-freq=<seconds>"
- where `proc name` is a process name such as pbs_server, pbs_sched, pbs_mom.
- RSS,VSZ,PCPU info will be collected for each colon separated name.
- 12. To run ptl on multinode cluster we have following two basic requirements.
- A. PTL to be installed on all the nodes.
- B. Passwordless ssh between all the nodes.
- Suppose we have a multinode cluster of three node (M1-type1, M2-type2, M3-type3)
- We can invoke pbs_benchpress command as below::
- pbs_benchpress -t <TestSuite> -p "servers=M1,moms=M1:M2:M3"
- .. _log_levels:
- Logging levels
- ~~~~~~~~~~~~~~
- PTL uses the generic unittest log levels: INFO, WARNING, DEBUG, ERROR, FATAL
- and three custom log levels: INFOCLI, INFOCLI2, DEBUG2.
- INFOCLI is used to log command line calls such that the output of a test run
- can be read with anyone familiar with the PBS commands.
- INFOCLI2 is used to log a wider set of commands run through PTL.
- DEBUG2 is a verbose debugging level. It will log commands, including return
- code, stdout and stderr.
- .. _pbs_loganalyzer:
- How to use pbs_loganalyzer
- --------------------------
- To analyze scheduler logs::
- pbs_loganalyzer -l </path/to/schedlog>
- To only display scheduling cycles summary::
- pbs_loganalyzer -l </path/to/schedlog> -c
- To analyze server logs::
- pbs_loganalyzer -s </path/to/serverlog>
- To analyze mom logs::
- pbs_loganalyzer -m </path/to/momlog>
- To analyze accounting logs::
- pbs_loganalyzer -a </path/to/accountinglog>
- To specify a begin and/or end time::
- pbs_loganalyzer -b "02/20/2013 21:00:00" -e "02/20/2013 22:00:00" <rest>
- Note that for accounting logs, the file will be 'cat' using the sudo command,
- so the tool can be run as a regular user with sudo privilege.
- To compute cpu/hour utilization against a given snapshot of nodes::
- pbs_loganalyzer -U --nodes-file=/path/to/pbsnodes-av-file
- --jobs-file=/path/to/qstat-f-file
- -a /path/acct
- A progress bar can be displayed by issuing::
- pbs_loganalyzer --show-progress ...
- To analyze the scheduler's estimated start time::
- pbs_loganalyzer --estimated-info -l <path/to/sched/log>
- To analyze per job scheduler performance metrics, time to run, time to discard,
- time in scheduler (solver time as opposed to I/O with the server), time to
- calendar::
- pbs_loganalyzer -l </path/to/schedlog> -S
- In addition to a scheduler log, a server log is required to compute the time in
- scheduler metric, this is due to the fact that the time in sched is measured
- as the difference between a sched log "Considering job to run" and a
- corresponding server log's "Job Run" message.
- To output analysis to a SQLite file::
- pbs_loganalyzer --db-name=<name or path of database> --db-type=sqlite
- Note that the sqlite3 module is needed to write out to the DB file.
- To output to a PostgreSQL database::
- pbs_loganalyzer --db-access=</path/to/pgsql/cred/file>
- --db-name=<name or path of database>
- --db-type=psql
- Note that the psycopg2 module is needed to write out ot the PostgreSQL database.
- The cred file should specify the following::
- user=<db username> password=<user's password> dbname=<databasename> port=<val>
- To analyze the time (i.e., log record time) between occurrences of a regular
- expression in any log file::
- pbs_loganalyzer --re-interval=<regex expression>
- This can be used, for example, to measure the interval of occurrences between
- E records in an accounting log::
- pbs_loganalyzer -a <path/to/accountlog> --re-interval=";E;"
- A useful extended option to the occurrences interval is to compute the number
- of regular expression matches over a given period of time::
- pbs_loganalyzer --re-interval=<regex> --re-frequency=<seconds>
- For example, to count how many E records are emitted over a 60 second window::
- pbs_loganalyzer -a <acctlog> --re-interval=";E;" --re-frequency=60
- When using --re-interval, the -f option can be used to point to an arbitrary
- log file instead of depending on -a, -l, -s, or -m, however all these log
- specific options will work.
- A note about the regular expression used, every Python named group, i.e.,
- expressions of the (?P<name>...), will be reported out as a dictionary of
- items mapped to each named group.
- .. _pbs_stat:
- How to use pbs_stat
- -------------------
- pbs_stat is a useful tool to display filtered information from querying
- PBS objects. The supported objects are nodes, jobs, resvs, server, queues.
- The supported operators on filtering attributes or resources are >,
- <, >=, <=, and ~, the latter being for a regular expression match on the value
- associated to an attribute or resource.
- In the examples below one can replace the object type by any of
- those alternative ones, with the appropriate changes in attribute or resource
- names.
- Each command can be run by passing a -t <hostname> option to specify a
- desired target hostname, the default (no -t) will query the localhost.
- To list a summary of all jobs equivalence classes on Resource_List.select, use::
- pbs_stat -j -a "Resource_List.select"
- To list a summary of all nodes equivalence classes::
- pbs_stat -n
- Note that node equivalence classes are collected by default on
- resources_available.ncpus, resources_available.mem, and state. To specify
- attributes to create the equivalence class on use -a/-r.
- To list all nodes that have more than 2 cpus::
- pbs_stat --nodes -a "resources_available.ncpus>2"
- or equivalently (for resources)::
- pbs_stat --nodes -r "ncpus>2"
- To list all jobs that request more than 2 cpus and are in state 'R'::
- pbs_stat --jobs -a "Resource_List.ncpus>2&&job_state='R'"
- To filter all nodes that have a host value that start with n and end with a,
- i.e., "n.*a"::
- pbs_stat --nodes -r "host~n.*a"
- To display information in qselect like format use the option -s to each command
- using -s the attributes selected are displayed first followed by a list of
- names that match the selection criteria.
- To display data with one entity per line use the --sline option::
- pbs_stat --nodes --sline
- To show what is available now in the complex (a.k.a, backfill hole) use::
- pbs_stat -b
- by default the backfill hole is computed based on ncpus, mem, and state, you
- can specify the attributes to compute it on by passing comma-separated list of
- attributes into the -a option. An alternative to compute the backfill hole is
- to use pbs_sim -b.
- To show utilization of the system use::
- pbs_stat -U [-r "<resource1,resource2,...>]
- resources default to ncpus, memory, and nodes
- To show utilization of a specific user::
- pbs_stat -U --user=<name>
- To show utilization of a specific group::
- pbs_stat -U --group=<name>
- To show utilization of a specific project::
- pbs_stat -U --project=<name>
- To count the grand total of a resource values in complex for the queried resource::
- pbs_stat -r <resource, e.g. ncpus> -C --nodes
- Note that nodes that are not up are not counted
- To count the number of resources having same values in complex for the queried resource::
- pbs_stat -r <resource e.g. ncpus> -c --nodes
- To show an evaluation of the formula for all non-running jobs::
- pbs_stat --eval-formula
- To show the fairshare tree and fairshare usage::
- pbs_stat --fairshare
- To read information from file use for example::
- pbs_stat -f /path/to/pbsnodes/or/qstat_f/output --nodes -r ncpus
- To list all resources currently set on a given object type::
- pbs_stat --nodes --resources-set
- To list all resources defined in resourcedef::
- pbs_stat --resources
- To list a specific resource by name from resourcedef (if it exists)::
- pbs_stat --resource=<custom_resource>
- To show limits associated to all entities::
- pbs_stat --limits-info
- To show limits associated to a specific user::
- pbs_stat --limits-info --user=<name>
- To show limits associated to a specific group::
- pbs_stat --limits-info --group=<name>
- To show limits associated to a specific project::
- pbs_stat --limits-info --project=<name>
- To show entities that are over their soft limits::
- pbs_stat --over-soft-limits
- The output of limits information shows named entities associated to each
- container (server or queue) to which a limit is applied. The entity's usage
- as well as limit set are displayed, as well as a remainder usage value that
- indicates whether an entity is over a limit (represented by a negative value)
- or under a limit (represented by a positive or zero value). In the case of a
- PBS_ALL or PBS_GENERIC limit setting, each entity's name is displayed using
- the entity's name followed by "/PBS_ALL" or "/PBS_GENERIC" as the case may be.
- Here are a few examples, if a server soft limit is set to 0::
- qmgr -c "set server max_run_soft=[u:user1=0]"
- for user user1 on the server object, pbs_stat --limits-info will show::
- u:user1
- container = server:minita.pbspro.com
- limit_type = max_run_soft
- remainder = -1
- usage/limit = 1/0
- if a server soft limit is set to 0 on generic users::
- qmgr -c "set server max_run_soft=[u:PBS_GENERIC=0]"
- then pbs_stat --limits-info will show::
- u:user1/PBS_GENERIC
- container = server:minita.pbspro.com
- limit_type = max_run_soft
- remainder = -1
- usage/limit = 1/0
- To print a site report that summarizes some key metrics from a site::
- pbs_stat --report
- optionally, use the path to a pbs_diag using the -d option to summarize that
- site's information.
- To show the number of privileged ports in use::
- pbs_stat --pports
- To show information directly from the database (requires psycopg2 module)::
- pbs_stat --db-access=<path/to/dbaccess_file> --db-type=psql
- --<objtype> [-a <attribs>]
- where the dbaccess file is of the form::
- user=<value>
- password=<value>
- # and optionally
- [port=<value>]
- [dbname=<value>]
- .. _pbs_config:
- How to use pbs_config
- ---------------------
- pbs_config is useful in the following cases, use:
- .. option:: --revert-config
- To revert a configuration of PBS entities specified as one or
- more of --scheduler, --server, --mom to its default configuration. Note that
- for the server, non-default queues and hooks are not deleted but disabled
- instead.
- .. option:: --save-config
- save the configuration of a PBS entity, one of --scheduler,
- --server, --mom to file. The server saves the resourcedef, a qmgr print
- server, qmgr print sched, qmgr print hook. The scheduler saves sched_config,
- resource_group, dedicated_time, holidays. The mom saves the config file.
- .. option:: --load-config
- load configuration from file. The changes will be applied to
- all PBS entities as saved in the file.
- .. option:: --vnodify
- create a vnode definition and insert it into a given MoM. There are
- many options to this command, see the help page for details.
- .. option:: --switch-version
- swith to a version of PBS installed on the system. This
- only supports modifying the PBS installed on a system that matches
- PBS_CONF_FILE.
- .. option:: --check-ug
- To check if the users and groups required for automated testing are defined as
- expected on the system
- .. option:: --make-ug
- To make users and groups as required for automated testing.This will create
- user home directories with 755 permission.If test user is not using this command
- for user creation then he/she has to make sure that the home directories
- should have 755 permission.
- To setup, start, and add (to the server) multiple MoMs::
- pbs_config --multi-mom=<num> -a <attributes> --serverhost=<host>
- The multi-mom option creates <num> pbs.conf files, prefixed by pbs.conf_m
- followed by an incrementing number by default, for which each configuration
- file has a unique PBS_HOME directory that is defined by default to be PBS_m
- followed by the same incrementing number as the configuration file. The
- configuration prefix can be changed by passing the --conf-prefix option and
- the PBS_HOME prefix can be changed via --home-prefix.
- To make a PBS daemons mimic the snapshot of a pbs_diag::
- pbs_config --as-diag=<path/to/diag>
- This will set all server and queue attributes from the diag, copy sched_config,
- resource_group, holidays, resourcedef, all site hooks, and create and insert a
- vnode definition that translates all of the nodes reported by pbsnodes -av.
- There may be some specific attributes to adjust, such as pbs_license_info,
- or users or groups, that may prevent submission of jobs.
- .. _pbs_py_spawn:
- How to use pbs_py_spawn
- -----------------------
- The pbs_py_spawn wrapper can only be used when the pbs_ifl.h API is SWIG
- wrapped. The tool can be used to invoke a pbs_py_spawn action associated to a
- job running on a MoM.
- To call a Python script during the runtime of a job::
- pbs_py_spawn -j <jobid> <path/to/python/script/on/MoM>
- To call a Python script that will detach from the job's session::
- pbs_py_spawn --detach -j <jobid> </path/to/python/script/on/MoM>
- Detached scripts essentially background themselves and are attached back to
- the job monitoring through pbs_attach such that they are terminated when the
- job terminates. The detached script must write out its PID as its first
- output.
|