KVM 게스트에서 fstrim

4643 단어 KVM리눅스
아래 환경에서 시도하고 있습니다.
  • centos-release-7-2.1511.el7.centos.2.10.x86_64
  • kernel-3.10.0-327.10.1.el7.x86_64
  • qemu-kvm-1.5.3-105.el7_2.3.x86_64
  • libvirt-1.2.17-13.el7_2.3.x86_64

  • 아래의 기사 등을 참고로 해 보았습니다.
  • htp : // bg. 우드 dh. nl / 2015 / 12 / ushin g tm m s 또는 rd u th-she phrbd an d-b bb rt /
  • h tp : // 스티 맘. 코 m/2013/06/11/레코ゔぇrs파세-f로mvmぢsk 펑크 s-by-우신 g-s 또는 rdfst m/
  • htp://세에 자위키. jp/w/타카1오카다/d/ぃb비RT


  • 게스트 설정 편집을 시작합니다.
    virsh edit GUEST
    

    scsi controller를 추가합니다 (이미 있다면 필요 없음).
    <controller type='scsi' model='virtio-scsi' index='0'/>
    

    디스크 설정을 변경합니다.
    <disk type='block' device='disk'>
      <driver name='qemu' type='raw' discard='unmap'/>
      <source dev='/dev/vg1/guest.img'/>
      <target dev='sda' bus='scsi'/>
    </disk>
    
  • <target/>dev='sda' bus='scsi'로 변경
  • <driver/>discard='unmap' 추가
  • <address/> 삭제

  • 변경사항을 저장하고 게스트를 시작합니다.
    virsh start GUEST
    virsh console GUEST
    

    fstrim 해 보겠습니다.
    fstrim -a -v
    

    TRIM되었습니다.
    /: 3.2 GiB (3422597120 bytes) trimmed
    

    또한 원래 게스트 디스크가 virtio로 연결되어 있으면 디스크 장치의 이름이 /dev/vda에서 /dev/sda로 바뀝니다.

    호스트에서 SystemTap에서 TRIM 확인



    아래의 기사와 같은 방법으로, 호스트측에서 SystemTap 를 사용해, 게스트로 fstrim 했을 때에 실제로 TRIM 되고 있는 것을 확인해 보았습니다.
  • SSD에 대한 Block Discard/TRIM을 SystemTap으로 시각화 - SH2의 일기

  • 호스트 측에서 다음과 같이 준비합니다.
    yum install systemtap \
      kernel-devel-$(uname -r) \
      kernel-headers-$(uname -r)
    
    debuginfo-install kernel-$(uname -r)
    
    cat <<'EOS'> /tmp/discard.stp
    probe kernel.function("blkdev_issue_discard").return {
      printf("%s, sector=%d, nr_sects=%d, return=%d (%d - %d KiB)\n",
        execname(), $sector, $nr_sects, $return,
        $sector / 2, ($sector + $nr_sects) / 2 - 1);
    }
    EOS
    
    stap -v /tmp/discard.stp
    

    위가 게스트이고 아래가 호스트입니다.

    좋은 웹페이지 즐겨찾기