Reviewed-by: Paul Szczepanek <paul.szczepa...@arm.com>

On 28/05/2025 21:40, Patrick Robb wrote:
> 
> 
> On Tue, May 27, 2025 at 11:37 AM Dean Marx <dm...@iol.unh.edu
> <mailto:dm...@iol.unh.edu>> wrote:
> 
>     Remove unnecessary information from README.md, and add new sections
>     to clarify
>     the purpose/use of DTS along with clear setup instructions.
> 
>     Signed-off-by: Dean Marx <dm...@iol.unh.edu <mailto:dm...@iol.unh.edu>>
>     ---
>      dts/README.md | 104 +++++++++++++++++++-------------------------------
>      1 file changed, 39 insertions(+), 65 deletions(-)
> 
>     diff --git a/dts/README.md b/dts/README.md
>     index 2b3a7f89c5..879cf65abc 100644
>     --- a/dts/README.md
>     +++ b/dts/README.md
>     @@ -1,81 +1,55 @@
>     -# DTS Environment
>     +# Description
> 
>     -The execution and development environments for DTS are the same,
>     -a [Docker](https://docs.docker.com/ <https://docs.docker.com/>)
>     container defined by our [Dockerfile](./Dockerfile).
>     -Using a container for the development environment helps with a few
>     things.
>     +DTS is a testing framework and set of testsuites for end to end
>     testing of DPDK and DPDK
>     +enabled hardware. Unlike the DPDK unit test application, DTS is
>     intended to be used to
> 
> 
> Maybe change to "unlike DPDK's dpdk-test application, which is used for
> running unit tests, DTS is intended to be used to evaluate real DPDK
> workloads run over supported hardware."
>  
> 
> 
>     +evaluate real DPDK workloads run over supported hardware. For
>     instance, DTS will control
>     +a traffic generator node which will send packets to a system under
>     test node which is
>     +running a DPDK application, and evaluate those results.
> 
> 
> Change to "evaluate the resulting DPDK application behavior."
>  
> 
>     -1. It helps enforce the boundary between the DTS environment and
>     the TG/SUT,
>     -   something which caused issues in the past.
>     -2. It makes creating containers to run DTS inside automated tooling
>     much easier, since
>     -   they can be based off of a known-working environment that will
>     be updated as DTS is.
>     -3. It abstracts DTS from the server it is running on. This means
>     that the bare-metal OS
>     -   can be whatever corporate policy or your personal preferences
>     dictate,
>     -   and DTS does not have to try to support all distros that are
>     supported by DPDK CI.
>     -4. It makes automated testing for DTS easier,
>     -   since new dependencies can be sent in with the patches.
>     -5. It fixes the issue of undocumented dependencies,
>     -   where some test suites require Python libraries that are not
>     installed.
>     -6. Allows everyone to use the same Python version easily,
>     -   even if they are using a distribution or Windows with out-of-
>     date packages.
>     -7. Allows you to run the tester on Windows while developing via
>     Docker for Windows.
>     +# Supported Test Node Topologies
> 
>     -## Tips for setting up a development environment
>     +DTS is a python application which will control a traffic generator
>     node (TG) and system
>     +under test node (SUT). The nodes represent a DPDK device (usually a
>     NIC) located on a
>     +host. The devices/NICs can be located on two separate servers, or
>     on the same server. If you use
>     +the same server for both NICs, install them on separate NUMA
>     domains if possible (this is ideal
>     +for performance testing.)
> 
>     -### Getting a docker shell
>     +1. 2 link: Represents a topology in which the TG node and SUT node
>     both have two network interfaces
> 
> 
> 2 links topology
>  
> 
>     +which form the TG <-> SUT connection. An example of this would be a
>     dual interface NIC which is the
>     +TG node connected to a dual interface NIC which is the SUT node.
>     Interface 0 on TG <-> interface 0
>     +on SUT, interface 1 on TG <-> interface 1 on SUT.
>     +2. 1 link: Works, but may result in skips for testsuites which are
>     explicitly decorated with a
> 
> 
> 1 links topology
>  
> 
>     +2 link requirement. Represents a topology in which the TG node and
>     SUT node are both located on one
>     +network interface. An example of this would be a dual interface NIC
>     with a connection between
>     +its own ports.
> 
> 
> I wonder whether it makes sense to provide an ascii drawing of the
> various topologies?
> 
> I google an online ascii art tool and got these 2 showing the 2 links
> topology for 2 servers and 1 server: 
> 
> +------------------------------+                 
> +------------------------------+                      
> |                              |                 |                            
>   |                      
> |                              | --------------- |                            
>   |                      
> |                              |                 |                            
>   |                      
> |  Tester (Traffic Generator)  |                 |     System Under Test      
>   |                      
> |                              |                 |                            
>   |                      
> |                              | --------------- |                            
>   |                      
> |                              |                 |                            
>   |                      
> +------------------------------+                 
> +------------------------------+                      
>                                                                               
>                          
>                                                                               
>                          
>                                                                               
>                          
>                                                                               
>                          
>                                                                               
>                          
>                        -----------------------------------                    
>                          
>                       |                                   |                   
>                          
>                       |     -------------------------     |                   
>                          
>                       |    |                        |     |                   
>                          
>                       |    |                        |     |                   
>                          
>                       |    |                        |     |                   
>                          
>                       |    |                        |     |                   
>                          
>                       |    |                        |     |                   
>                          
>                       |    |                        |     |                   
>                          
>                       |    |                        |     |                   
>                          
>                       |    |                        |     |                   
>                          
>                 +--------------------------------------------------+          
>                          
>                 |                                                  |          
>                          
>                 |                                                  |          
>                          
>                 |                                                  |          
>                          
>                 |                                                  |          
>                          
>                 |          Combined Tester & SUT system            |          
>                          
>                 |                                                  |          
>                          
>                 |                                                  |          
>                         -
>                 |                                                  |          
>                          
>                 |                                                  |          
>                          
>                 +--------------------------------------------------+  
> 
> 
> 
> If you wanted to do this you might have to use triple tilde to put it in
> a code block so it renders with a monospaced font for readers.
> 
> 
> 
>     -These commands will give you a bash shell inside the container
>     -with all the Python dependencies installed.
>     -This will place you inside a Python virtual environment.
>     -DTS is mounted via a volume, which is essentially a symlink from
>     the host to the container.
>     -This enables you to edit and run inside the container
>     -and then delete the container when you are done, keeping your work.
>     -It is also strongly recommended that you mount your SSH keys into
>     the container
>     -to allow you to connect to hosts without specifying a password.
>     +# Simple linux setup
> 
> 
> capitalize linux and setup
>  
> 
> 
>     -#### Start docker container with SSH keys
>     +1. On your TG and SUT nodes, add a dedicated user. In this example
>     I will name the user "dts."
>     +2. Grant passwordless sudo to the dts user, like so:
>     +    2a: enter 'visudo' in your terminal
>     +    2b: In the visudo text editor, add:
>     +        dts   ALL=(ALL:ALL) NOPASSWD:ALL
>     +3. DTS uses ssh key auth to control the nodes. Copy your ssh keys
>     to the TG and SUT:
>     +    ssh-copy-id dts@{your host}.
> 
>     -```shell
>     -docker build --target dev -t dpdk-dts .
>     -docker run -v $(pwd)/..:/dpdk -v /home/dtsuser/.ssh:/root/.ssh:ro -
>     it dpdk-dts bash
>     -$ poetry install
>     -$ poetry shell
>     -```
>     +For additional detail, please refer to [dts.rst](doc/guides/tools/
>     dts.rst)
>     +
>     +# DTS Configuration
> 
>     -#### Start docker container without SSH keys
>     +DTS requires two yaml files to be filled out with information about
>     your environment,
>     +test_run.yaml and nodes.yaml, which follow the format illustrated
>     in the example files.
> 
>      ```shell
>      docker build --target dev -t dpdk-dts .
>     -docker run -v $(pwd)/..:/dpdk -it dpdk-dts bash
>     +docker run -v $(pwd)/..:/dpdk -v /home/dtsuser/.ssh:/root/.ssh:ro -
>     it dpdk-dts bash
> 
> 
> Instead of dtsuser maybe we can more explicitly say {insert your dts ssh
> user}/ or similar.
>  
> 
>      $ poetry install
>     -$ poetry shell
>     +$ poetry run ./main.py
>      ```
> 
> 
> This information looks good, but I think it needs to be tied together
> more cohesively. I would make a step 4 like: 
> 
> 4. Create and fill out a test_run.yaml and nodes.yaml file within your
> dts directory, based on the structure from the example config files.
> 
> And a step 5 like:
> 
> 5. Run the bash terminal commands below in order to run the DTS
> container and start the DTS execution.
>  
> ```shell
> docker build --target dev -t dpdk-dts .
> docker run -v $(pwd)/..:/dpdk -v /home/{insert your dts ssh user}/.ssh:/
> root/.ssh:ro -it dpdk-dts bash
> $ poetry install
> $ poetry run ./main.py
> ```
> 
> 
> I also think we may have to call out some of the project dependencies
> (this is outside of the python dependencies that poetry handles for the
> DTS execution). So that would include Docker on the execution host,
> Scapy on the TG host.
> 
> 
>     -### Vim/Emacs
>     -
>     -Any editor in the Ubuntu repos should be easy to use,
>     -with Vim and Emacs already installed.
>     -You can add your normal config files as a volume,
>     -enabling you to use your preferred settings.
>     -
>     -```shell
>     -docker run -v ${HOME}/.vimrc:/root/.vimrc -v $(pwd)/..:/dpdk -it
>     dpdk-dts bash
>     -```
> 
> 
> I agree we can remove this.
>  
> 
>     -
>     -### Visual Studio Code
>     -
>     -VSCode has first-class support for developing with containers.
>     -You may need to run the non-Docker setup commands in the integrated
>     terminal.
>     -DTS contains a .devcontainer config,
>     -so if you open the folder in VSCode it should prompt you to use the
>     dev container
>     -assuming you have the plugin installed.
>     -Please refer to
>     -[VS Development Containers Docs](https://code.visualstudio.com/
>     docs/remote/containers <https://code.visualstudio.com/docs/remote/
>     containers>)
>     -to set it all up.
>     -Additionally, there is a line in `.devcontainer/devcontainer.json`
>     that, when included,
>     -will mount the SSH keys of the user currently running VSCode into
>     the container for you.
>     -The `source` on this line can be altered to mount any SSH keys
>     -on the local machine into the container at the correct location.
>     +These commands will give you a bash shell inside a docker container
>     +with all DTS Python dependencies installed.
> 
> 
> Well... I know I was saying the devcontainers aren't so useful, but upon
> reflection, it's kind of nice to not have to manage the 2nd terminal for
> driving the container, and of course it means python intellisense will
> work without having to poetry install on your base system. I would leave
> this part in, but stick a sentence in at the start saying  "usage of
> vscode devcontainers is NOT required for developing on DTS and running
> DTS, but provide some small quality of life improvements for the
> developer. If you want to develop from a devcontainer, see the
> instructions here" or somethign like that.
>  
> 
>     -### Other
>     +## Other
> 
>     -Searching for '$IDE dev containers' will probably lead you in the
>     right direction.
>     +Searching for '$IDE dev containers' will probably lead you in the
>     right direction.
>     \ No newline at end of file
>     -- 
>     2.49.0
> 
> 
> Reviewed-by: Patrick Robb <pr...@iol.unh.edu <mailto:pr...@iol.unh.edu>> 

Reply via email to