Optimizing ODF PersistentVolumes for Windows VMs

Updated

Note: This optimization is only supported for Windows VM on Red Hat OpenShift Virtualization with Red Hat OpenShift Data Foundation providing the backend storage.

Red Hat OpenShift Virtualization can run virtual machines with Microsoft Windows. Red Hat OpenShift Data Foundation can provide PersistentVolumes which can be used as disks by virtual machines. A combination of the two products and the use of Windows inside the VMs may benefit from tuning storage options for improving performance.

There are certain Microsoft Windows versions that use a peculiar I/O pattern. This particular usage of a system-wide and shared dummy page may cause CRC errors when data is written and read across different processes or threads.

rxbounce - Use a bounce buffer when receiving data (since 5.17). The default behavior is to read directly into the destination buffer. A bounce buffer is needed if the destination buffer isn't guaranteed to be stable (i.e. remain unchanged while it is being read to). In particular, this is the case for Windows where a system-wide "dummy" (throwaway) page may be mapped into the destination buffer in order to generate a single large I/O. Otherwise, "libceph: ... bad crc/signature" or "libceph: ... integrity error, bad crc" errors and associated performance degradation are expected.

Red Hat Ceph Storage and the Red Hat Enterprise Linux kernel have support for the rxbounce option since RHSA-2022:1174.

In a Red Hat OpenShift Data Foundation deployment, it is recommended to create a dedicated StorageClass for the disks of virtual machines with Windows.

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: windows-vms
parameters:
  clusterID: openshift-storage
  csi.storage.k8s.io/controller-expand-secret-name: rook-csi-rbd-provisioner
  csi.storage.k8s.io/controller-expand-secret-namespace: openshift-storage
  csi.storage.k8s.io/fstype: ext4
  csi.storage.k8s.io/node-stage-secret-name: rook-csi-rbd-node
  csi.storage.k8s.io/node-stage-secret-namespace: openshift-storage
  csi.storage.k8s.io/provisioner-secret-name: rook-csi-rbd-provisioner
  csi.storage.k8s.io/provisioner-secret-namespace: openshift-storage
  imageFeatures: layering
  imageFormat: "2"
  pool: ocs-storagecluster-cephblockpool
  mounter: rbd
  mapOptions: "krbd:rxbounce"
provisioner: openshift-storage.rbd.csi.ceph.com
reclaimPolicy: Delete
volumeBindingMode: Immediate
allowVolumeExpansion: true
Category
Article Type