PTP Dual NIC Boundary Clock Configuration¶
Storyboard: https://storyboard.openstack.org/#!/story/2009248
The objective of this feature is to rework how StarlingX handles the configuration and deployment of the PTP userspace applications (ptp4l, phc2sys and ts2phc). There are a wide variety of applicable configurations that a user may wish to deploy on their system and this work is required to allow these diverse configurations to be achieved. The basic solution is for StarlingX to provide a method to configure multiple instances of each application type, each with their own independent configs. This kind of approach will provide the required flexibility for users to achieve any number of configurations.
Problem description¶
Users wishing to configure a StarlingX host as a T-GM or T-BC PTP node have very limited configuration options and may not be able to achieve the desired config due to how PTP is currently implemented in StarlingX. The current implementation only supports a single instance of ptp4l and phc2sys on each host. The new ts2phc application is not currently supported at all. Additionally, many of the config options for these services apply across all hosts and do not allow for host-specific settings. Finally, some parameters for the PTP applications are not configurable at all - specifically interface level parameters and command line flags.
Use Cases¶
End user wants to configure multiple instances of ptp4l, phc2sys and ts2phc to achieve a T-BC (boundary clock) or T-GM (grand leader) configuration.
End user wants full access to all of the program options for each of these services and the ability to configure them on a per-instance, per-interface and per-host basis.
Proposed change¶
Updating linuxptp
The existing linuxptp package installed in StarlingX is version 2.0, which does not include the ts2phc utility that users may want for certain configurations. The installed package will be updated to the latest 3.1.1 version.
Rework of CLI and Data Model
The existing CLI and data model is not flexible enough to support multiple instances of the linuxptp services and also does not provide access to all of the configuration parameters for these services. It will be necessary to develop new CLI commands and a new data model which will handle each instance independently and allow a user to deploy a variety of configurations.
Alternatives¶
This work is an extension of StarlingX’s suppport for PTP. The existing model has been in place since at least STX 4.0 and has been utilized by many end users. During this time, new use cases have been identified which can be met with the linuxptp application, but not with StarlingX because of the limitations that the platform places on congfiguration options. Alternatives for linuxptp have not been examined, as it continues to meet the needs of users.
Regarding alternatives to the approach described in this spec, the goal of this work is create a fully flexible and user-defined PTP interface where any current and future use cases can easily be supported.
Data model impact¶
A new group of tables will be introduced to handle the PTP configurations. The diagram below shows the new table names and relationships.
The Hosts and Interfaces tables are pre-existing and used to map data into PtpInstances and PtpInterfaces respectively.
The PtpInstances table contains the instance name, type and host(s) it is associated with.
PtpInterfaces contains the PTP interface name, which PtpInstance owns it, and which physical interface(s) are associated with it.
PtpParameters contains all of the key/value parameters. To avoid duplicate entries the PtpParameterOwnerships and PtpParameterOwners tables are used to map the associaton of parameters to PtpInstances and PtpInterfaces. Given the hierarchy of the tables, it is not necessary to implement logic to decide upon the actual owner, leaving such resolution for SQLAlchemy to manage.
Migrations will be provided to copy existing PTP configurations from the existing tables to the new ones. The relevant tables that will supply data for this are the ‘ptp’ table and the ‘service-parameters’ table.
REST API impact¶
- The following REST API endpoints will be deprecated:
/v1/ptp (GET)
/v1/ptp/{ptp_id} (PATCH)
/v1/ptp/apply (POST)
The new paths for PTP are:
/v1/ptp_instances¶
GET /v1/ptp_instances
RESP:
POST /v1/ptp_instances
RESP:
/v1/ptp_instances/{ptp_instance_id}¶
GET /v1/ptp_instances/45576c98-caf6-4ced-a323-067bdd472bf2
RESP:
PATCH /v1/ptp_instances/19fa712a-1296-486c-92a8-f84d0887352e
RESP:
/v1/ptp_interfaces¶
GET /v1/ptp_interfaces
RESP:
POST /v1/ptp_interfaces
RESP:
/v1/ptp_interfaces/{ptp_interface_id}¶
GET /v1/ptp_interfaces/07258277-e123-4362-95b5-8b7372daf39f
RESP:
DELETE /v1/ptp_interfaces/53efedee-770f-40ec-8a4b-2c80fcc7e1dc
RESP: Empty
PATCH /v1/ptp_interfaces/cee22189-53cd-463f-aaac-1bf744af1eb8
RESP:
/v1/ihosts/{ihost_uuid}/ptp_instances¶
GET /v1/ihosts/e68ae900-2eef-4481-b865-b8dee686f028/ptp_instances
RESP:
/v1/ihosts/{host_id}/ptp_interfaces¶
GET /v1/ihosts/e68ae900-2eef-4481-b865-b8dee686f028/ptp_interfaces
RESP:
/v1/iinterfaces/{interface_id}/ptp_interfaces¶
GET /v1/iinterfaces/4c3a3435-7275-4a4d-b52b-2dfa9759bda7/ptp_interfaces
RESP:
/v1/ptp_parameters¶
GET /v1/ptp_parameters
RESP:
/v1/ptp_parameters/{ptp_parameter_id}¶
GET /v1/ptp_parameters/061dbf29-e38d-4249-8317-f53ca2d74b2b
RESP:
PATCH /v1/ptp_parameters/1a0615ee-c2db-4b93-857b-88c71f2acf90
RESP:
/v1/ptp_instances/apply¶
POST /v1/ptp_instances/apply RESP: None
Security impact¶
PTP functionality impacts system time, so could carry with it the risk of system instability due to poor configuration. The new multi-instance approach will expose a wide range of configuration options compared to limited amount currently available. Users will have to take care to read the documentation and become familiar with the operation of the linuxptp applications in order to set up PTP.
Other end user impact¶
For upgrading from a previous release, users should be aware that existing PTP configuration in the PTP table and in the service-parameters table will be migrated to the new tables. Systems that have PTP configured will create ptp4l-legacy and phc2sys-legacy instances to hold this prior configuration. While the existing database entries will remain present, the CLIs and APIs used to configure the old single instance PTP will be deprecated.
Developer impact¶
None
Upgrade impact¶
See “Other end user impact” above for upgrade related details.
Implementation¶
Assignee(s)¶
- Primary assignee:
Cole Walker
Other contributors:
Douglas Koerich
Teresa Ho
Repos Impacted¶
starlingx/clients
starlingx/config
starlingx/gui
starlingx/integ
starlingx/monitoring
starlingx/root
starlingx/stx-puppet
Work Items¶
Create new database entries for PTP tables
SQLAlchemy handling for tables
Update REST API / deprecate old PTP
Update CLI / deprecate old PTP
Generate Puppet hieradata from database inputs
Create puppet manifests to apply configurations
Update stx-platformclients container image
Alarming and monitoring support
Dependencies¶
None
Testing¶
Unit tests will be created for APIs, as well as for the hieradata generation.
Functional testing will be performed on hardware meeting the requirements of having at least two PTP capable NICs per node in AIO-SX, AIO-DX, Standard and DC configurations. Scenarios will include testing T-GM, T-BC and OC PTP configurations in order to test a wide range of linuxptp behaviours. Testing will be completed on several different NIC types.
Existing regression testing for the ptp-notification feature should be run during this period in order to verify that the application still functions as expected. It is possible that updates to the ptp-notification app may be required as part of this work.
Documentation Impact¶
This work will primarily impact deployers and end users. The End User documentation will need to be updated to remove old PTP instructions and provide guidance on how to set up PTP with the new CLI commands.
The API reference documentation will also have to be updated with new paths and to indicate the deprecated ones.
StarlingX release notes describing the PTP changes will also be provided.
References¶
None
History¶
None