VirtIO 스토리지는 폐기(fstrim)를 지원합니까?

VirtIO 스토리지는 폐기(fstrim)를 지원합니까?
$ uname -r
5.0.9-301.fc30.x86_64
$ findmnt /
TARGET SOURCE    FSTYPE OPTIONS
/      /dev/vda3 ext4   rw,relatime,seclabel
$ sudo fstrim -v /
fstrim: /: the discard operation is not supported

동일한 가상 머신이지만 디스크를 VirtIO에서 SATA로 전환한 후:

$ findmnt /
TARGET SOURCE    FSTYPE OPTIONS
/      /dev/sda3 ext4   rw,relatime,seclabel
$ sudo fstrim -v /
/: 5.3 GiB (5699264512 bytes) trimmed

가상 디스크는 QCOW2 파일로 지원됩니다. virt-manager/libvirt를 사용하고 있습니다. libvirt-daemon 버전은 4.7.0-2.fc29.x86_64입니다. 내 호스트는 현재 바닐라 커널 버전 5.1(ish)을 실행하고 있으므로 지금은 약간 "맞춤형"이지만 기존 Fedora 커널 구성에서 시작하여 구축했습니다.

VirtIO에서 드롭 지원을 활성화할 수 있는 방법이 있나요? 아니면 코드가 아직 지원하지 않습니까? 활성화하는 방법에 대한 정확한 지침이 반드시 필요한 것은 아니지만 놀랍고 궁금하며 확실한 답변을 원합니다 :-).

답변1

분명히 이 설정은 삭제를 지원하지 않습니다. 그러나 디스크를 "VirtIO"에서 "SCSI"로 변경하고 SCSI 컨트롤러를 "VirtIO"로 변경하면 작동합니다. 내가 하나 찾았어송곳. 몇 가지 연습이 있습니다. 이는 첫 번째 검색 결과일 뿐입니다. 이 새로운 옵션을 이라고 합니다 virtio-scsi.virtio-blockvirtio-blk

저도 좋은 테마 발견했어요우분투 버그 추적기. virtio-blk삭제 요청에 대한 지원은 Linux 5.0부터 시작된다고 명시되어 있습니다 . 이는 또한 2019년 2월 22일에 제출된 QEMU의 지원이 필요하다고 말합니다. 따라서 향후 릴리스에서는 VirtIO를 얻고 자동으로 지원을 중단할 것이라고 생각합니다.


현재는 Fedora 29를 설치한다는 것을 알면서도 기본적으로 디스크를 virt-manager생성하지 않습니다 . 기본 "VirtIO" 디스크만 생성합니다. virtio-scsi무엇으로 전환해야 할지 모르겠습니다 virtio-scsi.

SATA 에뮬레이션에 비해 virtio-scsiSATA와 동일한 성능 이점을 제공한다고 생각합니다. ( VirtIO 유무에 관계없이 virtio-blk:-P 어디에서나 NVME 프로토콜을 사용하는 옵션이 표시되지 않습니다 .)virt-manager

oVirt 웹사이트에 일부가 있습니다.좋은 홍보, 언급한

  1. 일부 제한 사항virtio-blk
  2. virtio-scsiSCSI LUN의 패스스루 모드에서 사용할 수 있으며 SCSI 패스스루를 사용하지 않고도 다양한 새로운 SCSI 명령 기능을 사용할 수 있습니다 virtio-scsi. 특별히 SCSI 패스스루를 사용하지 않는 경우 새 명령에는 QEMU의 새로운 지원이 필요합니다. , 그러나 virtio-scsi코드 지원은 필요하지 않습니다.
  3. virtio-scsi여러 대기열에 대한 지원을 포함합니다. (이것이 단일 대기열 하드웨어의 효율성을 향상시키는 데에도 도움이 될지는 확실하지 않습니다.)

답변2

이 작업을 수행하려면 libvirt 도메인 XML 파일에서 폐기를 명시적으로 활성화해야 했습니다.

   <devices>
     <disk type='file' device='disk'>
-      <driver name='qemu' type='raw'/>
+      <driver name='qemu' type='raw' discard='unmap'/>
       <source file='...'/>
       <target dev='vda' bus='virtio'/>
       <address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x0'/>
     </disk>

답변3

sourcejedi의 답변에 작은 추가 사항

virtio-blk에서 삭제를 지원하려면 가상 머신 구성에서 "머신"도 업데이트해야 합니다.

  • pc-q35-3.1에서 virtio-blk는 폐기를 지원하지 않습니다.
  • pc-q35-4.2에서는 실제로 그렇습니다

그럼에도 불구하고 가상 머신 구성을 최신 머신으로 업데이트하는 것이 좋습니다. 아니면 정확한 버전을 지정하지 않고 "q35" 별칭을 사용하세요.

바라보다

qemu-system-x86_64 -machine help | grep q35

예를 들어,

<type arch='x86_64' machine='pc-q35-7.2'>hvm</type>

관련 정보