The Configuration Hierarchy
SMuRF is a complex system with many configuration parameters which vary depending on the cryostat, the experiment being conducted, and the network configuration of the smurf-server and data-acquisition nodes.
These config parameters will be stored in various files in the configuration directory, where institutions will maintain and version-control the configuration of their systems.
The configuration directory may or may not be the same as the
OCS_CONFIG_DIR, which contains the OCS site-config file. If it is different,
the correct configuration path can be set separately using the
SMURF_CONFIG_DIR environment variable.
In the following sections we will go over what is contained in each file. The hierarchy of configuration files is as follows:
- sys_config
The sys_config file is top-level system configuration. It contains general system info such as the crate-id, active slots, and docker image tags for all the software being used. In addition, it points to which lower-level config files should be used for each slot.
- pysmurf config files
The pysmurf config files set certain pysmurf settings and rogue registers. This file is loaded in the pysmurf
setupfunction, which will usually be run once per reboot.- device config files
The device config files contain many of the parameters that are passed to pysmurf function calls. These values are optimized per system and experiment, so each system-slot-experiment combination will have its own file. These parameters are used and updated throughout testing in sodetlib functions and scripts.
Sys Config
The system configuration file is located in the sys_config.yml file
and contains general system configuration, certain slot-specific configuration,
and docker environment variables. See here for a template.
General System Configuration
The following parameters can be set in the top-level of the yaml file
|
ID of the smurf-crate, e.g. |
|
Shelf manager name |
|
Dict used to set fan-policy and speed on hammer |
|
Communication type to the crate – either |
|
Path to the meta registers file. This is where we set what metadata should be streamed to G3 files. |
|
A list containing all active slots in the order that they should be started. |
Fan Configuration
The smurf_fans key is a dict which can be used to set the fan policy and
speed during hammer, or with the jackhammer setup-fans command.
Before configuring you need to determine the address of the fans on the smurf. To do this, ssh into the shelf-manager, and run the following:
# clia fans
> Pigeon Point Shelf Manager Command Line Interpreter
> 20: FRU # 4
> Current Level: 14
> Minimum Speed Level: 1, Maximum Speed Level: 100 Dynamic minimum fan level: 11
> 20: FRU # 3
> Current Level: 14
> Minimum Speed Level: 1, Maximum Speed Level: 100
This tells us that there are two configurable fans, one with address 20 and FRU-id 4, and the other with address 20 and FRU-id 3. This also tells us that the maximum speed of the fan is 100.
Our sys-config entry under smurf_fans should look like
smurf_fans:
addresses:
- [<address-1>, <fru_id-1>]
- [<address-2>, <fru_id-2>]
speed: <speed>
policy: <policy>
Here, speed is the speed it will set all fans to, policy can be
enable or disable, where enable will have the fan-controller
auto-adjust the speed based on the junction temps, and disable will keep the fan
speed fixed.
It can be dangerous to disable the fan-controller if you are not setting fans to their max speed, as the controller will have no ability to increase the speed to keep smurf cool if they need to.
However, keeping the fan speeds fixed at their max speed can be beneficial, as fan-speed changes cause sudden changes FPGA temp and electronics temp, which make its way into our data.
For operating the SAT (and for most SO smurfs), the max-fan speed is 100, so our configuration looks like:
smurf_fans:
addresses:
- [20, 3]
- [20, 4]
speed: 100
policy: disable
Slot Configuration
Slot configuration will grouped under the slots key, and each slot will
have its own entry SLOT[<slot>].
Warning
Are the stream ports used at all anymore?
|
Port to stream G3Frames. Currently using |
|
Path to the pysmurf_config file for this slot |
|
Path to the device_config file for this slot |
Docker Environment
Any keys in the docker_env section will be copied to the .env file in
the configuration directory. Whenever jackhmmer hammer is run, which will
treat them as environment variables inside the docker-compose file. These are
used to set the docker image tags which will be used.
Required variables are:
|
Tag of the smurf-streamer docker image |
|
Tag of the socs docker image |
|
Address of the crossbar host from the smurf-server |
Pysmurf Config
The pysmurf configurtion file is loaded through a pysmurf instance when S.setup is run. There will be one per slot per site, and this should not change once it has been configured. For more details, see the pysmurf readthedocs
Device Config
The device config file has three main sections. experiment, bias_groups
and bands. See here for an example device config file. Specific
experiment, bias group, and band configuration variables are not set in stone,
but certain sodetlib scripts will sometimes require specific config variables
to exist. Currently there are no restrictions on what config variables can be
added, and sodetlib script writers should feel free to add new ones if they
think it would be useful for their script.
The experiment section contains experiment-level configurations that are
not specific to a band or bias groups, such as amp_50k_Id, and
tune_file.
The bias_groups section contains configuration per-bias group. Each key in
this section must be a list of 12 items, one value per bias group. Examples
include bias_high, bias_low, bias_step, enabled etc.
The bands section contains config info on each band. There are two
subsections, one for each AMC labeled AMC[0] and AMC[1]. Each AMC
subgroup contains band-specific configuration, where each key must be a list of
four values, one for each band in the AMC. Examples include dc_att,
drive, flux_ramp_rate_khz, etc.