Hi everyone,
I would like to share my current experience and some challenges I encountered while designing and scaling a labgrid setup. My intention is to start a discussion and explore how we can improve usability, especially for larger deployments.
Target Setup
The setup I am working on is designed for approximately 40 clients and 5 exporters, distributed across multiple locations.
These users are not only embedded Linux engineers. They include board designers, electrical engineers, and application-level developers. Therefore, it is important that they can use the system without needing to understand labgrid internals in detail.
Current Client Experience
Let’s walk through the typical flow from a client perspective.
1. Resource Discovery Confusion
After installation, the user tries to list available resources and sees something like:
adi-test/group-1/NetworkSerialPort
adi-test/group-1/NetworkUSBDebugger
adi-test/group-1/NetworkPowerPort
adi-test/group-2/NetworkSerialPort
adi-test/group-2/NetworkUSBDebugger
adi-test/group-2/NetworkPowerPort
At this point, the concept of “groups” becomes confusing.
- Users may assume they can directly use these group names.
- However, they later learn that resources must be mapped into "places" before use.
This creates an unnecessary learning step and introduces ambiguity.
2. Redundancy Between Groups and Places
There are two common ways to structure groups:
a) By hardware type:
adi-test/consoles/NetworkSerialPort
adi-test/debuggers/NetworkUSBDebugger
adi-test/power-ports/NetworkPowerPort
This structure provides no information about which resources belong to which device.
b) By device:
adi-test/SC598_EZKIT-01/NetworkSerialPort
adi-test/SC598_EZKIT-01/NetworkPowerPort
adi-test/SC598_EZKIT-01/NetworkUSBDebugger
This is much clearer and easier to understand.
However, even when groups are already well-structured, users still need to redefine the same mapping again as “places” on the client side.
This creates redundancy, additional configuration effort and confusion for new users.
3. Environment on Client Side
Another major issue is the need for an environment on the client side.
Each client is expected to:
- Create and maintain their own environment
- Define tool configurations (e.g., OpenOCD)
- Specify coordinator settings
- Configure access details
In practice:
- These environments are mostly identical for all users
- Boards and setups are rarely changing
- Yet every user maintains their own copy
This leads to duplication, inconsistency and maintenance overhead. For a setup with many users, this is not scalable.
4. SSH and Access Management Complexity
Each client also needs:
- SSH access to exporters
- Proper SSH configuration
- A correctly defined
NetworkService with a username
This introduces two challenges:
- SSH setup must be repeated for each user and exporter
- Environment files become user-specific and this reduces reusability
5. Configuration Management Problem
Effectively, each client needs a local configuration database, including the labgrid environment configuration and SSH configuration. Managing this becomes especially difficult for users who are not familiar with these concepts.
Summary of Current Workflow
Today, a typical client must:
- Install labgrid
- Understand concepts like "groups" and "places"
- Identify and acquire a place
- Create or obtain an environment configuration
- Configure SSH access
- Customize settings (e.g., username for NetworkService)
- Finally connect and use the board
This is a complex process, especially for non-expert users.
Proposed Improvements
To simplify the experience and improve scalability, I suggest the following:
1. Simplify Resource Abstraction
- Make the distinction between groups and places clearer, or unify them
- Allow exporters to define ready-to-use “places"
- Clients should not need to remap resources manually
2. Centralize Configuration
- Move environment configuration to the exporter side
- Maintain a shared configuration for all users
- Avoid duplication across clients
3. Improve SSH Handling
- Simplify or centralize SSH configuration
- Reduce the need for per-user customization
- Align CLI and pytest workflows
4. Reduce Client Responsibilities
The ideal client workflow should be:
- Install labgrid
- Acquire a place
- Connect to debugger or console
- Use the device
No deep knowledge of labgrid internals should be required.
Conclusion
The goal is to make labgrid accessible and easy to use for all clients, not only those familiar with its internal architecture.
By reducing configuration overhead and centralizing responsibilities, we can improve usability, reduce maintenance effort and scale more effectively across teams and locations
I would especially like to hear from teams working on similar large-scale setups.
- How do you manage configurations across many users?
- How do you handle SSH access and permissions at scale?
- Do you centralize configurations, or keep them client-side?
- What are your main pain points and best practices?
It would be very valuable to discuss these use cases and experiences.
Looking forward to your feedback.
Hi everyone,
I would like to share my current experience and some challenges I encountered while designing and scaling a labgrid setup. My intention is to start a discussion and explore how we can improve usability, especially for larger deployments.
Target Setup
The setup I am working on is designed for approximately 40 clients and 5 exporters, distributed across multiple locations.
These users are not only embedded Linux engineers. They include board designers, electrical engineers, and application-level developers. Therefore, it is important that they can use the system without needing to understand labgrid internals in detail.
Current Client Experience
Let’s walk through the typical flow from a client perspective.
1. Resource Discovery Confusion
After installation, the user tries to list available resources and sees something like:
At this point, the concept of “groups” becomes confusing.
This creates an unnecessary learning step and introduces ambiguity.
2. Redundancy Between Groups and Places
There are two common ways to structure groups:
a) By hardware type:
This structure provides no information about which resources belong to which device.
b) By device:
This is much clearer and easier to understand.
However, even when groups are already well-structured, users still need to redefine the same mapping again as “places” on the client side.
This creates redundancy, additional configuration effort and confusion for new users.
3. Environment on Client Side
Another major issue is the need for an environment on the client side.
Each client is expected to:
In practice:
This leads to duplication, inconsistency and maintenance overhead. For a setup with many users, this is not scalable.
4. SSH and Access Management Complexity
Each client also needs:
NetworkServicewith a usernameThis introduces two challenges:
5. Configuration Management Problem
Effectively, each client needs a local configuration database, including the labgrid environment configuration and SSH configuration. Managing this becomes especially difficult for users who are not familiar with these concepts.
Summary of Current Workflow
Today, a typical client must:
This is a complex process, especially for non-expert users.
Proposed Improvements
To simplify the experience and improve scalability, I suggest the following:
1. Simplify Resource Abstraction
2. Centralize Configuration
3. Improve SSH Handling
4. Reduce Client Responsibilities
The ideal client workflow should be:
No deep knowledge of labgrid internals should be required.
Conclusion
The goal is to make labgrid accessible and easy to use for all clients, not only those familiar with its internal architecture.
By reducing configuration overhead and centralizing responsibilities, we can improve usability, reduce maintenance effort and scale more effectively across teams and locations
I would especially like to hear from teams working on similar large-scale setups.
It would be very valuable to discuss these use cases and experiences.
Looking forward to your feedback.