pScheduler is the replacement for perfSONAR's bwctl tool starting with perfSONAR v4.0.


pscheduler command [ switches/args ]


pscheduler task [ task-swtiches ] test [ test-switches ]

task-switches - Options that affect scheduling (how often, how many times, etc.), output format (plain text, JSON, HTML) and what host leads the test (see below).

test - What kind of test the task will do.

test-switches - Options specific to the kind of test being done.

Note that on systems with pScheduler installed, there is a shell alias called 'psc' available for convenience.


The --tool switch to the task command allows specifying a tool to use in running the test:

pscheduler task --tool iperf3 throughput ...

The option can be repeated to allow any of a list of tools to run the test:

pscheduler task --tool iperf3 --tool iperf2 throughput ...

The one selected will be the first in the list that all participants have in common.


The command-line interface will give you context-sensitive help at pretty much any point:

pscheduler --help
pscheduler task --help
pscheduler task throughput --help

 More information on pScheduler is available at:


bwctl to pScheduler Transition Guide

Sample bwctl commands, and the PScheduler equivalent

bwctl -c receive_host

pscheduler task throughput --dest receive_host

This will use your host as the sender, and run a 10 second iperf3 test.

bwctl -c receive_host -t 30 -i 2 -w 64M

pscheduler task throughput --dest receive_host --interval PT2S --window-size 64M --duration PT30S

This will use your host as the sender, run a 30 second test, and show output every 2 secs (instead of the default of 1 sec), and the TCP window will be 64MB.

bwctl -c receive_host -s send_host -t 30 

pscheduler task throughput --source send_host --dest receive_host --duration PT30S

This is very useful if you are not logged into one of the two endpoints. It runs a 30 second test from send_host to recv_host.

bwctl -L 1000 -c receive_host

pscheduler task --slip PT10M throughput --dest receive_host

By default bwctl exits if it can not get a test slot within 5 minutes. Use the -L flag for heavily used servers where you might have to wait longer.

bwctl -T iperf2 -c receive_host -s send_host -i 2 -u -b 500M

pscheduler task --tool iperf2 throughput --dest receive_host --interval 2 -u --bandwidth 500M

Use iperf2 instead of iperf3, and do a 500Mbps UDP test.

bwctl -c receive_host -T nuttcp

pscheduler task --tool nuttcp throughput --dest receive_host

run nuttcp instead of iperf3.

This will only work to another perfSONAR 4.x host. To test to a 3.x host, continue to use bwctl.

bwctl -c receive_host -s send_host -O 5 -t 20

pscheduler task --tool iperf3 throughput --omit 5 --duration PT20S --source send_host --dest receive_host

Use iperf3 instead of iperf, and omit the first 5 seconds of a 20 second test (removes TCP slowstart ramp up time)

bwctl -4 -c receive_host -s send_host

pscheduler task throughput --ip-version 4 --source send_host --dest receive_host

Force test to use IPv4 instead of IPv6.

Note: If you are running pscheduler on a host that only has the perfsonar-tools bundle, either the source or destination host must be running the full pscheduler package (e.g: perfsonar-toolkit, perfsonar-core, or perfsonar-testpoint), and you must use the --assist flag to specify which host to use as the scheduler. For example:

pscheduler task --assist send_host throughput --ip-version 4 --source send_host --dest receive_host
Sample Latency commands

bwping -s send_host -c receive_host

pscheduler task rtt --source send_host --dest receive_host


run a ping from host A to host B

bwping -T owamp -s send_host-c receive_host -N 1000 -i .01

pscheduler task latency --dest receive host --packet-count 1000 --packet-interval .01

run owping from host A to host B, sending 1000 packets, spaced .01 seconds apart.

bwping -E -c

pscheduler task rtt --dest

run a ping to a host not running bwctld or pScheduler
Sample traceroute commands

bwtraceroute -c receive_host -s send_host

pscheduler task trace --source send_host --dest receive_host

run a tracetroute from host A to host B

bwtraceroute -T tracepath -c receive_host -l 8192 -s send_host

pscheduler task trace --length 8192 --dest receive_host

run a tracepath from host A to host B, using a packet size of 8192 bytes. This will help find MTU issues.

bwtraceroute -E -s send_host -c receive host

pscheduler task trace --dest receive_host

Run a traceroute from a bwctl host to a non-bwctl or pScheduler host


The main pScheduler control port is 443. Make sure this port is not blocked by any firewalls.

Other useful pScheduler commands

pscheduler plugins tests : list all tests that pscheduler knows how to run
pscheduler plugins tools : list all tools that pscheduler knows how to run

pscheduler task clock --dest hostname
: measure the clock difference between your host and a remote host
pscheduler task clock —source host1 --dest host2 : measure the clock difference between these 2 hosts

pscheduler schedule --filter-test=throughput --host hostname
: show the upcoming test schedule for this host
pscheduler schedule --filter-test=throughput -PT1H --host hostname : show the tests run in the past hour
pscheduler task dns --query --record a : measure the amount of time to do a DNS lookup