fi_info(1)

πŸ’… fi_info β€” the Libfabric v2.7.0 era

okay so first things first, bestie: this is fi_info(1), straight out of the Libfabric v2.7.0 manual, and it's genuinely one of the most useful little tools in the whole stack. Think of it as the vibe check for your fabric πŸ¦‹

✨ NAME ✨

fi_info β€” the simple utility to query for fabric interfaces. that's it, that's the whole job, and it slays at it πŸ’…

✨ SYNOPSIS ✨

fi_info [OPTIONS]

✨ DESCRIPTION ✨

so the fi_info utility is what you use to query for available fabric interfaces. no cap, that's the entire point of it.

It supports filtering based on a bunch of options β€” endpoint type, provider name, supported modes, all of that. And as a little bonus, fi_info can also be used to discover the environment variables that tune provider-specific parameters. iykyk 🌸

And here's the part that's kind of iconic: if you specify no filters at all, then all available fabric interfaces for all providers and all endpoint types will be returned. yes, everything. the whole buffet πŸ“


✨ OPTIONS ✨

πŸŽ€ Filtering

  • -n, --node=<NAME> β€” Node name or address used to filter interfaces. Only interfaces which can actually reach the given node or address will respond. like, if you can't get there, don't @ me πŸ’€
  • -P, --port=<PORT> β€” Port number used to filter interfaces.
  • -c, --caps=<CAP1|CAP2>.. β€” Pipe-separated list of capabilities used to filter interfaces. Only interfaces supporting all of the given capabilities will respond. Want more tea on capabilities? see fi_getinfo(3) ✨
  • -m, --mode=<MOD1|MOD2>.. β€” Pipe-separated list of modes used to filter interfaces. Only interfaces supporting all of the given modes will respond. (For more information on modes, see fi_getinfo(3).)
  • -t, --ep_type=<EPTYPE> β€” Specifies the type of fabric interface communication you want. For example, specifying FI_EP_DGRAM would return only interfaces which support unreliable datagram. more on endpoint types in fi_endpoint(3) πŸ’–
  • -a, --addr_format=<FMT> β€” Filter fabric interfaces by their address format. For example, specifying FI_SOCKADDR_IN would return only interfaces which use sockaddr_in structures for addressing. deets in fi_getinfo(3).
  • -p, --provider=<PROV> β€” Filter fabric interfaces by the provider implementation. For a list of providers, see the --list option πŸ‘‘
  • -d, --domain=<DOMAIN> β€” Filter interfaces to only those with the given domain name.
  • -f, --fabric=<FABRIC> β€” Filter interfaces to only those with the given fabric name.

πŸ¦‹ Discovery

  • -e, --env β€” List libfabric-related environment variables which can be used to enable extra configuration or tuning. this is the one that makes you go "oh THAT's how you set that" 😭
  • -g [filter] β€” Same as the -e option, but with output limited to environment variables containing filter as a substring. so -g tcp = only the tcp-flavored ones 🧚
  • -l, --list β€” List available libfabric providers.
  • -v, --verbose β€” By default, fi_info will display a summary of each of the interfaces discovered. If the verbose option is enabled, then all of the contents of the fi_info structure are displayed. For more info on the data contained in the fi_info structure, see fi_getinfo(3). buckle up, it's a lot πŸ’…
  • --version β€” Display versioning information.

🌈 USAGE EXAMPLES 🌈

$ fi_info -p verbs -t FI_EP_DGRAM

This will respond with all fabric interfaces that use endpoint type FI_EP_DGRAM with the verbs provider.

fi_info -c 'FI_MSG|FI_READ|FI_RMA'

This will respond with all fabric interfaces that can support FI_MSG|FI_READ|FI_RMA capabilities.


πŸ’œ OUTPUT πŸ’œ

By default fi_info will output a summary of the fabric interfaces discovered:

$ ./fi_info -p verbs -t FI_EP_DGRAM
provider: verbs
    fabric: IB-0xfe80000000000000
    domain: mlx5_0-dgram
    version: 116.0
    type: FI_EP_DGRAM
    protocol: FI_PROTO_IB_UD

$ ./fi_info -p tcp
provider: tcp
    fabric: 192.168.7.0/24
    domain: eth0
    version: 116.0
    type: FI_EP_MSG
    protocol: FI_PROTO_SOCK_TCP

To see the full fi_info structure, specify the -v option.

fi_info:
    caps: [ FI_MSG, FI_RMA, FI_TAGGED, FI_ATOMIC, FI_READ, FI_WRITE, FI_RECV, FI_SEND, FI_REMOTE_READ, FI_REMOTE_WRITE, FI_MULTI_RECV, FI_RMA_EVENT, FI_SOURCE, FI_DIRECTED_RECV ]
    mode: [  ]
    addr_format: FI_ADDR_IB_UD
    src_addrlen: 32
    dest_addrlen: 0
    src_addr: fi_addr_ib_ud://:::0/0/0/0
    dest_addr: (null)
    handle: (nil)
    fi_tx_attr:
        caps: [ FI_MSG, FI_RMA, FI_TAGGED, FI_ATOMIC, FI_READ, FI_WRITE, FI_SEND ]
        mode: [  ]
        op_flags: [  ]
        msg_order: [ FI_ORDER_RAR, FI_ORDER_RAW, FI_ORDER_RAS, FI_ORDER_WAW, FI_ORDER_WAS, FI_ORDER_SAW, FI_ORDER_SAS, FI_ORDER_RMA_RAR, FI_ORDER_RMA_RAW, FI_ORDER_RMA_WAW, FI_ORDER_ATOMIC_RAR, FI_ORDER_ATOMIC_RAW, FI_ORDER_ATOMIC_WAR, FI_ORDER_ATOMIC_WAW ]
        inject_size: 3840
        size: 1024
        iov_limit: 4
        rma_iov_limit: 4
        tclass: 0x0
    fi_rx_attr:
        caps: [ FI_MSG, FI_RMA, FI_TAGGED, FI_ATOMIC, FI_RECV, FI_REMOTE_READ, FI_REMOTE_WRITE, FI_MULTI_RECV, FI_RMA_EVENT, FI_SOURCE, FI_DIRECTED_RECV ]
        mode: [  ]
        op_flags: [  ]
        msg_order: [ FI_ORDER_RAR, FI_ORDER_RAW, FI_ORDER_RAS, FI_ORDER_WAW, FI_ORDER_WAS, FI_ORDER_SAW, FI_ORDER_SAS, FI_ORDER_RMA_RAR, FI_ORDER_RMA_RAW, FI_ORDER_RMA_WAW, FI_ORDER_ATOMIC_RAR, FI_ORDER_ATOMIC_RAW, FI_ORDER_ATOMIC_WAR, FI_ORDER_ATOMIC_WAW ]
        size: 1024
        iov_limit: 4
    fi_ep_attr:
        type: FI_EP_RDM
        protocol: FI_PROTO_RXD
        protocol_version: 1
        max_msg_size: 18446744073709551615
        msg_prefix_size: 0
        max_order_raw_size: 18446744073709551615
        max_order_war_size: 0
        max_order_waw_size: 18446744073709551615
        mem_tag_format: 0xaaaaaaaaaaaaaaaa
        tx_ctx_cnt: 1
        rx_ctx_cnt: 1
        auth_key_size: 0
    fi_domain_attr:
        domain: 0x0
        name: mlx5_0-dgram
        threading: FI_THREAD_SAFE
        progress: FI_PROGRESS_MANUAL
        resource_mgmt: FI_RM_ENABLED
        av_type: FI_AV_UNSPEC
        mr_mode: [  ]
        mr_key_size: 8
        cq_data_size: 8
        cq_cnt: 128
        ep_cnt: 128
        tx_ctx_cnt: 1
        rx_ctx_cnt: 1
        max_ep_tx_ctx: 1
        max_ep_rx_ctx: 1
        max_ep_stx_ctx: 0
        max_ep_srx_ctx: 0
        cntr_cnt: 0
        mr_iov_limit: 1
        caps: [  ]
        mode: [  ]
        auth_key_size: 0
        max_err_data: 0
        mr_cnt: 0
        tclass: 0x0
        max_ep_auth_key: 0
        max_group_id: 0
        max_cntr_value: 18446744073709551615
        max_err_cntr_value: 18446744073709551615
    fi_fabric_attr:
        name: IB-0xfe80000000000000
        prov_name: verbs;ofi_rxd
        prov_version: 116.0
        api_version: 1.16
    nic:
        fi_device_attr:
            name: mlx5_0
            device_id: 0x101b
            device_version: 0
            vendor_id: 0x02c9
            driver: (null)
            firmware: 20.33.1048
        fi_bus_attr:
            bus_type: FI_BUS_UNKNOWN
        fi_link_attr:
            address: (null)
            mtu: 4096
            speed: 0
            state: FI_LINK_UP
            network_type: InfiniBand

To see libfabric-related environment variables, the -e option is your girl πŸ’…

$ ./fi_info -e
# FI_LOG_INTERVAL: Integer
# Delay in ms between rate limited log messages (default 2000)

# FI_LOG_LEVEL: String
# Specify logging level: warn, trace, info, debug (default: warn)

# FI_LOG_PROV: String
# Specify specific provider to log (default: all)

# FI_PROVIDER: String
# Only use specified provider (default: all available)

To see libfabric-related environment variables with a substring, use the -g option πŸŽ€

$ ./fi_info -g tcp
# FI_OFI_RXM_DEF_TCP_WAIT_OBJ: String
# ofi_rxm: See def_wait_obj for description.  If set, this overrides the def_wait_obj when running over the tcp provider.  See def_wait_obj for valid values. (default: UNSPEC, tcp provider will select).

# FI_TCP_IFACE: String
# tcp: Specify interface name

# FI_TCP_PORT_LOW_RANGE: Integer
# tcp: define port low range

# FI_TCP_PORT_HIGH_RANGE: Integer
# tcp: define port high range

# FI_TCP_TX_SIZE: size_t
# tcp: define default tx context size (default: 256)

# FI_TCP_RX_SIZE: size_t
# tcp: define default rx context size (default: 256)

# FI_TCP_NODELAY: Boolean (0/1, on/off, true/false, yes/no)
# tcp: overrides default TCP_NODELAY socket setting

# FI_TCP_STAGING_SBUF_SIZE: Integer
# tcp: size of buffer used to coalesce iovec's or send requests before posting to the kernel, set to 0 to disable

# FI_TCP_PREFETCH_RBUF_SIZE: Integer
# tcp: size of buffer used to prefetch received data from the kernel, set to 0 to disable

# FI_TCP_ZEROCOPY_SIZE: size_t
# tcp: lower threshold where zero copy transfers will be used, if supported by the platform, set to -1 to disable (default: 18446744073709551615)

πŸ”₯ SEE ALSO πŸ”₯

fi_getinfo(3), fi_endpoint(3)

πŸ‘‘ AUTHORS πŸ‘‘

OpenFabrics.


and that's the whole page, bestie 🫢 shoutout to the Libfabric Programmer's Manual and its 2026-02-11 date stamp β€” this one's a certified classic, go query some fabrics, periodt πŸ’–βœ¨

πŸ“¦ where this page comes from