Configuring shared memory communications direct

Use this procedure to configure the SMC-D on Linux® on Z nodes.

  1. Verify that the internal shared memory (ISM) device is available. You can list ISM devices by issuing the following command:
    lspci | grep ISM
    A sample output is as follows:
    1014:00:00.0 Non-VGA unclassified device: IBM Internal Shared Memory (ISM) virtual PCI device

    For more information about ISM devices, see Internal shared memory device driver.

  2. Make sure that the operating system packages for smc-tools and qclib are installed.
    rpm -qa | grep -E 'smc-tools|qclib'

    If necessary, set up the operating system packages for smc-tools and qclib.

    SLES
    zypper install smc-tools qclib
    RHEL
    dnf install smc-tools qclib
  3. Configure SELinux for SMC-D on RHEL.

    SMC sockets are not included in the standard SELinux policies. Therefore, SMC-D does not support the enforcing mode of SELinux with the standard policies. To enable SMC-D support, you must either disable SELinux or install the custom SELinux policy to be able to use the SELinux enforcing mode.

    To disable SELinux, complete the following steps.
    1. Verify the SELinux settings in the /etc/selinux/config file.
    2. Set the SELinux=permissive or SELinux=disabled mode.
    3. Restart the node to apply the changes.
    To install the custom SELinux policy to be able to use SELinux enforcing mode, complete the following steps.
    1. Install selinux-policy-devel package by issuing the next command:
      dnf install selinux-policy-devel
    2. Create a text file named "storage-scale-smc.te" and add the following content in it:
      policy_module(storage-scale-smc, 1.0.0)
      require {
              type unconfined_service_t;
              }
      kernel_rw_unlabeled_smc_socket(unconfined_service_t)
    3. Run the following commands to create and instal the policy for SMC sockets:
      make -f /usr/share/selinux/devel/Makefile storage-scale-smc.pp
      semodule -i storage-scale-smc.pp
  4. Set maximum socket read/write buffer sizes to 1048576 bytes.
    sysctl -w net.core.rmem_max=1048576 >> /etc/sysctl.conf
    sysctl -w net.core.wmem_max=1048576 >> /etc/sysctl.conf