Question about NVMe MCTP in dbus-sensors

Andrew Jeffery andrew at aj.id.au
Fri Aug 6 15:42:39 AEST 2021


Hello Heyi!

On Fri, 6 Aug 2021, at 14:47, Heyi Guo wrote:
> Hi,
> 
> We can see that NVMe sensors in dbus-sensors relies on MCTP to get 
> hardware information. It is using libmctp interfaces to initialize MCTP 
> and SMBus. 

To be clear, it's using a fork of libmctp that implements an SMBus 
binding via a fork of the kernel that exposes a I2C API that isn't 
upstream.

For the SMBus binding to be merged in upstream libmctp I'd like to see 
the necessary kernel interfaces merged into the upstream kernel tree, 
but I don't expect that's going to happen any time soon. More on why 
below.

As an aside you may be interested in this patch which allows nvmesensor 
to use the basic management command to fetch temperature data:

https://gerrit.openbmc-project.xyz/c/openbmc/dbus-sensors/+/43665

> However I don't find the code or component who is responsible 
> as a bus owner, to discover endpoints, manager EID and update routing 
> table. Isn't necessary for a central component to do such things?

It's not strictly necessary in that it's valid for systems to be 
completely defined in terms of static endpoints. Doing so isn't covered 
by the MCTP spec, and it's also pretty limiting, but it is enough in 
some circumstances.

> Will 
> there be access conflict if non-NVMe devices (MCTP capable) are also 
> connected to the same SMBus?

No.

> 
> We also found another implementation from Intel: 
> https://github.com/Intel-BMC/pmci. It implements mctpd to provide MCTP 
> message transfer interfaces on D-Bus, while PLDM, NVME-MI and others can 
> rely on the D-Bus interfaces instead of libmctp.

This is a direction Intel chose to go however it's not the direction 
that upstream OpenBMC will be using. The use of a pure userspace 
solution such as libmctp went far enough to expose the need for a 
kernel-based solution. We will shortly have that, thanks to the efforts 
of Jeremy and Matt at Code Construct:

https://lore.kernel.org/netdev/20210729022053.134453-1-jk@codeconstruct.com.au/

This series is now in net-next, and Matt and Jeremy have also been 
developing the in-kernel hardware binding support and necessary 
userspace components[1].

[1] https://github.com/CodeConstruct/mctp

You can read more about the application of the socket syscalls here:

https://lore.kernel.org/netdev/20210729022053.134453-16-jk@codeconstruct.com.au/

and here:

https://github.com/openbmc/docs/blob/master/designs/mctp/mctp-kernel.md

Once we have AF_MCTP in the OpenBMC kernel tree with some binding 
implementations we'll be switching the userspace applications over to 
use it.

Hope that helps!

Andrew


More information about the openbmc mailing list