Skip to main content

Comprehensive Architecture of CXL Type 3 Device

· 7 min read
Paul Kang
Founding Engineer @ EEUM, Inc.

Introduction

OpenCXL is carefully designed to provide a strong platform for emulating CXL devices. Within this ecosystem, the Python class SingleLogicalDeviceClient acts as a high-level model for a CXL type 3 single logical device.

High-Level Components

This part of the article looks into the structure of the SingleLogicalDeviceClient class from OpenCXL. It focuses on two main parts: the ConnectionClient and the SingleLogicalDevice classes. The ConnectionClient class is important for making TCP socket connections with the CXL Switch. These connections are key for moving data packets that are vital for the device's communication. The class not only establishes these connections but also manages the flow of data, ensuring smooth communication between the CXL type 3 device and the CXL switch.

The SingleLogicalDevice class includes three layers, each designed for its effective working. These layers handle different kinds of data packets, adjust device settings, and imitate the physical parts needed for the operations of a CXL Type 3 device. This organized setup ensures the device works as per CXL standards.

ConnectionClient Class

TCP Socket Management

The ConnectionClient class has a key role in setting up and keeping TCP socket connections with the CXL Switch. This facilitates the important movement of transaction layer packets in OpenCXL.

Packet Routing

In the ConnectionClient class, the role involves more than just managing. It includes actively directing packets. This means receiving packets through the TCP connection and sending them to the right FIFOs in the CxlConnection class for processing. It also involves taking packets from these FIFOs that need to go to the host and sending them back through the TCP socket. This two-way routing ensures smooth communication between the device and the host.

Scalability and Communication

The ConnectionClient class is designed to be scalable, which means it can easily include new devices into OpenCXL. Its packet routing system supports a stable and reliable communication network, which is essential for handling complex operations managed by the SingleLogicalDeviceClient.

SingleLogicalDevice Class

Packet Processing Layer

The core of the SingleLogicalDevice class is the Packet Processing Layer. This includes the ConfigSpaceManager, MmioManager, and CxlMemManager classes. Each of these managers deals with specific types of packets, ensuring complete coverage of CXL Type 3 device operations.

Register Interface Layer

Below the Packet Processing Layer is the Register Interface Layer. This layer contains the CxlType3SldConfigSpace and CombinedMmioRegister classes. These classes process packets from the upper layer and access emulated hardware logic when needed.

Hardware Emulation Layer

The base layer, Hardware Emulation Layer, consists of the PciComponent and CxlMemoryDeviceComponent classes. These simulate the necessary behaviors for CXL Type 3 device operations. This layer makes sure that interactions with the registers result in the right hardware actions according to the CXL specification.

The SingleLogicalDevice class shows a well-structured approach to handling CXL packets, register interactions, and hardware imitation. The Packet Routing feature within the ConnectionClient shows the efficiency of OpenCXL in managing complex data exchanges.

In-depth Analysis of SingleLogicalDevice Class

The SingleLogicalDeviceClient class includes the SingleLogicalDevice class, which is made for handling operations specific to CXL Type 3 devices. This structure is divided into different layers, each playing a crucial role in ensuring efficient and correct processing of packets as per CXL specifications.

[Figure 2]

Packet Processing Layer

The Packet Processing Layer, a key part of the SingleLogicalDevice class, is responsible for getting and processing CXL packets, using registers for precise operations.

ConfigSpaceManager Class

The ConfigSpaceManager class manages Configuration transaction packets. It uses these packets to set up and control the device according to PCI Express and CXL specifications.

MmioManager Class

The MmioManager class handles memory-mapped IO requests. It changes memory requests aimed at the device's base address registers and accesses MMIO registers set up for a CXL type 3 device.

CxlMemManager Class

The CxlMemManager class deals with CXL.mem packets, important for reaching host-managed device memories in CXL type 3 devices. It works with the CxlMemoryDeviceComponent class, changing CXL.mem operations into actions that access memories in the CxlMemoryDeviceComponent class.

Register Interface Layer

This layer is the control center, using registers to carry out tasks based on incoming CXL packets.

CxlType3SldConfigSpace Class

The CxlType3SldConfigSpace class in the SingleLogicalDevice is a set of configuration registers for a CXL type 3 device. These registers define how the device is set up and controlled. The DVSEC registers, unique to CXL Type 3 devices, extend their capabilities beyond standard PCIe devices. These registers allow a CXL host to manage advanced features of CXL Type 3 devices. The ConfigSpaceManager class uses these registers to modify the device's behavior based on PCI configuration requests, ensuring it follows the CXL specification.

CombinedMmioRegister Class

The CombinedMmioRegister class, used in the MmioManager class, is important for handling CXL operations in CXL Type 3 devices. These are shown to the device's base address registers (BARs), allowing device configurations through memory requests to the addresses shown by the BARs.

The CxlType3SldConfigSpace and CombinedMmioRegister classes show the SingleLogicalDevice class's capability to meet the needs of CXL Type 3 devices, especially in imitating CXL Component Registers and CXL Device Registers.

Hardware Emulation Layer

The Hardware Emulation Layer accurately simulates the hardware behaviors necessary for a CXL Type 3 device's functionality. This layer turns software-driven configurations and commands into simulated hardware actions.

PciComponent Class

This component simulates standard PCI device interfaces and functions as per PCI Express standards, ensuring the CXL Type 3 device fits well into OpenCXL.

CxlMemoryDeviceComponent Class

The CxlMemoryDeviceComponent class is designed to imitate behaviors needed for managing host-managed device memory (HDM) operations in a CXL Type 3 device. It cooperates with the CxlMemManager class to handle memory protocol interactions for HDM read/write requests.

The cooperation between the Register Interface Layer and the Hardware Emulation Layer, especially with the CxlMemoryDeviceComponent class, is vital for carrying out HDM operations, making sure that commands and configurations related to HDM are properly applied in the emulated environment.

Detailed Features of CxlMemoryDeviceComponent Class

The CxlMemoryDeviceComponent class is essential for the functioning of CXL Type 3 devices, focusing on configuration through registers and processing memory requests. It is organized into two main groups: Configuration and Communication, and Memory Management.

Configuration and Communication

Event Manager

This part processes Component Command Interface (CCI) Event command sets, allowing the device to respond correctly to system events.

Log Manager

It manages CCI Log command sets, important for keeping system logs for diagnostics and monitoring.

CXL Mailbox

This enables communication between the device and the host, allowing for the exchange of commands and information.

CDAT Entries

The Coherent Device Attribute Table (CDAT), accessible through PCI Express Data Object Exchange (DOE), provides important details on memory attributes and latency, key for managing coherent memory access.

Memory Management

HDM Decoder Capabilities and Manager

This function converts Host Physical Address (HPA) to Device Physical Address (DPA), ensuring correct memory addressing and access.

Memory Accessor

It allows access to emulated memory devices via DPA, facilitating read/write operations needed for memory management.

Memory Device Status

This offers real-time status information about the CXL Type 3 device, important for monitoring and managing operations.

Memory Device Identity

It provides identification details for the CXL Type 3 device, helping in its recognition and setup within OpenCXL.

The CxlMemoryDeviceComponent class's organization into Configuration and Communication, and Memory Management emphasizes its crucial role in the operations of CXL Type 3 devices. These functions support efficient working, from processing command sets and enabling communication to managing memory operations and providing device information.

Conclusion

This article has explained how CXL Type 3 devices function within the OpenCXL, focusing on their structure and how they handle data and operations. The SingleLogicalDeviceClient class models the accurate behaviors of these devices.

The ConnectionClient class manages connections and data flow effectively, ensuring smooth device communication. The SingleLogicalDevice class, with its layered structure, processes data, manages settings, and imitates physical components. This allows CXL Type 3 devices to work correctly and follow CXL standards.

In summary, the SingleLogicalDeviceClient class is a prime example of how OpenCXL can accurately model a CXL component. By carefully organizing and managing every aspect of the device, OpenCXL ensures these devices perform their roles as defined by the CXL specification, showing OpenCXL's importance in the evolution of CXL technology.

Transaction Layer Packet Emulation

· 3 min read
Paul Kang
Founding Engineer @ EEUM, Inc.

Introduction

OpenCXL stands out for its unique method of modeling CXL components around CXL transaction layer packets. Unlike QEMU, which includes CXL models that only replicate functional behaviors from the CXL specification without utilizing CXL transaction layer packets, OpenCXL aims for a comprehensive emulation. Functional implementations suffice for emulating CXL hosts and supporting Linux guest OS. However, to construct an extensive CXL ecosystem that models multiple CXL hosts with various CXL devices, functional implementations fall short.

Below is an illustration showing the structure of CXL transaction layer packets and the interaction among CXL components using these packets through a TCP socket.

As depicted, diverse CXL components such as CXL type 1, 2, 3 devices, and CXL hosts connect to a CXL switch as a TCP client. Upon connection, they interact using CXL transaction layer packets. This method offers numerous benefits, detailed in the upcoming sections.

Isolation of Components

Connecting each component to a CXL switch via a TCP socket allows for the addition of CXL components with minimal dependencies on the existing ones within OpenCXL.

Provided that each component adheres to the packet standards set by OpenCXL, which closes follows the CXL specificiation, developers have the flexibility to use any programming language for component development. Moreover, components can be located on different machines, connecting over a TCP/IP network.

For those interested in creating their components, OpenCXL offers readily available building blocks, particularly in Python.

Standardization of Models

The diagrams below showcase how OpenCXL relies on the CXL Connection, a series of FIFOs storing various CXL transaction layer packets.

The internal hardware models are interconnected through the CXL Connection, facilitating the replacement of one hardware model with another. This is because the connection standardizes the method of component interaction.

Interoperability with Hardware

Currently, OpenCXL is implemented entirely in software. However, it is not confined to software limitations. EEUM, the creator of the OpenCXL, plans to introduce a hardware-based Ethernet to CXL bridge. This innovation will bridge software-based CXL components with hardware components, expanding OpenCXL's capabilities.

The diagram below highlights different applications possible with the Ethernet to CXL bridge.

This bridge extends OpenCXL beyond software, enabling a hybrid environment that integrates both software and hardware-based CXL components.

The subsequent diagrams illustrate two key applications of the Ethernet to CXL bridge:

SW CXL Switch Interacting with Physical CXL Hosts and Devices

SW CXL Hosts and Devices Interacting with Physical CXL Switch

Conclusion

OpenCXL's adoption of transaction layer packet emulation marks a significant advancement in modeling and simulating complex CXL architectures. By emphasizing isolation, standardization, and interoperability, it paves the way for a more versatile and inclusive development environment. This approach not only simplifies the integration of new components but also opens up possibilities for hybrid configurations that merge software and hardware elements. As OpenCXL continues to evolve, the potential for innovation and efficiency in CXL component emulation and interaction grows, offering promising prospects for developers and engineers alike.

Architectural Insights into OpenCXL

· 2 min read
Paul Kang
Founding Engineer @ EEUM, Inc.

OpenCXL, developed by EEUM, showcases a meticulous approach to architectural design, aimed at addressing the complexities of CXL emulation and development. This article delves into the core architectural components that define OpenCXL, emphasizing its structural integrity, scalability, and adaptability.

Utilizing QEMU for Host Emulation

The architecture of OpenCXL is distinguished by its utilization of QEMU to simulate CXL host behaviors. This strategic decision tackles the challenge of limited access to CXL memory devices and the constraints of existing CXL host capabilities. By leveraging QEMU, OpenCXL introduces a flexible foundation for feature integration and system-level verification, facilitating development processes in the absence of direct hardware access.

Integrating Python for CXL Functionality

A pivotal architectural choice is the integration of Python for developing CXL-specific functionalities, independent of QEMU's emulation capabilities. This separation enhances OpenCXL's modularity, allowing for streamlined development and testing of CXL components. Python's inclusion lowers the barrier to entry for contributors, enriching OpenCXL with a diverse range of expertise and perspectives.

Adopting TCP/IP for Enhanced Connectivity

In its architectural blueprint, OpenCXL employs TCP/IP protocols to interconnect simulated components, such as hosts, switches, and devices. This approach not only simulates real-world CXL physical link connections but also promotes scalability and flexibility across various deployment scenarios. The TCP/IP framework ensures robustness and adaptability, key attributes for replicating and extending CXL network functionalities.

Architectural Flexibility and Future Expansion

OpenCXL's design principles emphasize flexibility and readiness for future technological advancements. While Python is the primary language for current development, OpenCXL's architecture supports the inclusion of any component that facilitates TCP socket communication. This open design philosophy allows for ongoing optimization and adaptation, ensuring OpenCXL remains relevant and capable of incorporating emerging technologies.

Conclusion

The architectural framework of OpenCXL is a testament to EEUM's commitment to overcoming the challenges inherent in CXL technology development and emulation. Through the strategic use of QEMU for host emulation, the integration of Python for functionality development, and the adoption of TCP/IP for connectivity, OpenCXL establishes a robust and scalable platform. These architectural choices ensure OpenCXL's adaptability and its capacity to evolve with the advancing landscape of CXL and computing technologies.

Design Background of OpenCXL

· 3 min read
Paul Kang
Founding Engineer @ EEUM, Inc.

Introduction

OpenCXL is a pioneering project designed to accurately simulate Compute Express Link (CXL) technologies. Utilizing QEMU for host emulation and Python for developing CXL-specific functionalities, OpenCXL tackles the urgent need for a platform that supports development and testing without direct access to hardware, especially given the rapid evolution of CXL specifications.

Overcoming Hardware Accessibility Challenges

A significant hurdle in CXL technology development is the limited accessibility of CXL Type 3 devices, compounded by the absence of CXL Type 1 and 2 devices in real hardware. Furthermore, the latest Type 3 features remain unavailable in existing hardware, and key processors from Intel or AMD do not support these early CXL types. This gap between the capabilities of available hardware and the latest CXL specifications necessitates an alternative approach. OpenCXL, leveraging QEMU for emulation, provides a strategic solution, enabling access to a wider range of CXL functionalities and facilitating the exploration of CXL capabilities beyond the constraints of current hardware technology.

Enhancing Development Efficiency

The traditional route to simulating the CXL components, using FPGA-based systems, poses significant challenges in terms of cost, complexity, and the steep learning curve associated with FPGA development. In contrast, OpenCXL's reliance on QEMU and Python significantly lowers these barriers. Specifically, the use of Python for the development of most CXL components simplifies the process, eliminating the need for developers to navigate the complexities of QEMU. This approach not only makes OpenCXL more accessible to a broader range of developers but also streamlines the development process. By focusing on Python for non-host components, developers can engage with OpenCXL more efficiently, focusing their efforts on innovation and experimentation without the overhead of mastering complex emulation tools.

Facilitating Scalable and Realistic Simulations

OpenCXL's design for simulating CXL Transaction Layer packets closely mirrors actual hardware operation, significantly enhancing the realism and scalability of simulations. This capability ensures that the simulated environment is not only comprehensive but also provides a robust foundation for bridging the gap between OpenCXL and real hardware. By supporting CXL Transaction Layer packets, OpenCXL facilitates seamless integration with actual hardware, making the transition from simulation to real-world application smoother and more efficient. This level of simulation fidelity is crucial for developers seeking to test and validate their CXL solutions under conditions that closely replicate physical hardware environments.

Democratizing CXL Development

Adopting an open-source model, OpenCXL aims to democratize the development of CXL technology, making it accessible to a wide range of developers. This inclusivity fosters a diverse and innovative community, contributing to the rapid advancement of CXL technology and ensuring a rich pool of contributions from various domains.

Conclusion

OpenCXL addresses the challenges of hardware accessibility and the complexity of development processes by offering a scalable, inclusive, and efficient platform. By simplifying the development of CXL components with Python and providing a strategic workaround for hardware limitations with QEMU emulation, OpenCXL empowers developers to explore and extend the capabilities of CXL technology. This collaborative effort is vital for advancing computer architecture and fully realizing the potential of CXL across different applications.