A Preliminary Exploration of the LUTF
Slide Deck
Download from here.
Video Transcript
Slide 01
Hello, this is Amir Shehata with another quick tip on the LUTF. In this video we will take a 5-minute tour over how the LUTF directory is structured and how to configure it.
Slide 02
I have written a step by step walk-thru on how to build and deploy the LUTF. Please go to the link provided here or in the video transcript on the wiki for more details.
Slide 03
Once you have the Lustre tests rpm installed along with the other lustre rpms, you can see the LUTF installed in the standard lustre tests directory:
/usr/lib64/lustre/tests/lutf
Slide 04
The LUTF directory structure is fairly straight forward.
The top level directory contains the LUTF binary and a set of other generated shared libraries and python files.
These include the C/Python wrappers which the LUTF python scripts use to call the C APIs.
Slide 05
Let's look at an example. You can see here two files of interest: _lnetconfig.so
and lnetconfig.py
.
The .py file is generated by SWIG and enables the LUTF python scripts to call the liblnetconfig API
The .so file is a shared library which includes the glue code that implements the liblnetconfig API calls
Slide 06
Configuration scripts are under the python/config
directory. These configuration scripts setup all the different elements required to run the LUTF.
Various infrastructure scripts, which implement the remote script execution feature as well as other LUTF features, are under the infra
directory.
Lustre and LNet specific infrastructure scripts, such as scripts to clean the test setup and configure LNet are located in the tests-infra
directory
Finally all the various tests suites are located under the tests
directory.
At the time of this recording, the shown test suites are available.
Slide 7
The LUTF requires a single YAML configuration file which specifies its environment. Let's briefly explore the configuration parameters.
If you remember I mentioned that the LUTF can run in master or agent mode. Some parameters are relevant to the agent and not the master.
Although all parameters can be specified. On startup only the parameters which matter are examined.
Slide 8
First off, let's look at the shell parameter. It defines how the LUTF will run. There are three modes it can run in:
- First, the interactive mode. In this mode you can access the python shell. You can do everything you would normally do from a regular python shell from there.
- Second, the daemon mode. As the name suggests the LUTF will run as a daemon process. However, its shell can still be access by TELNETTing to it.
- Finally, the batch mode. Now this mode is unique to the master and it basically runs all the specified tests and then shuts down.
Slide 9
The agent parameter tells the LUTF if it should run as a master or an agent
node-name specifies a symbolic name for the node. It can be any alpha-numeric value.
The LUTF agent will need to know the master's IP address or hostname which it will use to connect to the master. A symbolic name is also provided to associate with the master.
The LUTF will require a port to listen on for incoming connections as well as a port to use for the telnet server
Slide 10
This is what the LUTF YAML configuration looks like. A couple of other parameters relevant to the master node are:
- the suite. This defines a suite name to run when in batch mode. If nothing is specified the LUTF will run all available suites
- and the script. This defines the script name to run and it's only valid if a suite is provided.
Both the suite and the script names can contain wild cards which define a group of suites or scripts.
You can follow the shown link for more details on the configuration parameters.
Before I leave this topic, I just want to remind you that the YAML configuration file will be automatically generated for you, as I'll show you later on.
Slide 11
We're almost ready to run the LUTF, but first just a quick note on a couple of important naming conventions.
All test suites under the python/tests
directory must start with the literal: suite_
And all the tests under a test suite must start with the literal: test_
Otherwise the LUTF will not pick them up and you won't be able to run them.
In the next tutorial we will run the LUTF and see what it offers us.
LUTF YAML Configuration
lutf: shell: interactive # [interactive|batch|daemon] agent: false # [true|false] run as an agent or master telnet-port: 49304 # a port to telnet to, to access agent master-address: 192.14.4.3 # IP address of master or hostname master-port: 43943 # port master is listening on node-name: ost2_HOST # name to associate with the node. master-name: mds_HOST # name of master to be given to agents script: test_dlc_01.py # script name to run in batch mode. Suite name needs to be specified as well. suite: suite_dlc # suite name to run. If not present all suites are run in batch mode lutf-path: /usr/lib64/lustre/tests/lutf/ # path to lutf directory py-path: "/usr/lib64/:/usr/lib64/tests" # ':' separated lists of paths for extra python modules