固態磁盤部署指南

固態磁盤(SSD)是使用NAND閃存芯片持久存儲數據的存儲設備。這使它們有別於前幾代磁盤,前幾代磁盤將數據存儲在旋轉的磁盤上。在SSD中,跨整個邏輯塊地址(LBA)範圍的數據訪問時間是恆定的;而對於使用旋轉介質的較舊磁盤,跨越大地址範圍的訪問模式會招致尋道成本。因此,SSD設備具有更好的延遲和吞吐量。

隨着使用的塊數接近磁盤容量,性能會下降。 對性能的影響程度因供應商而異。 但是,所有設備都會出現一些性能下降。

爲了解決性能下降問題,主機系統(例如,Linux內核)可以使用discard請求來通知存儲,不再使用給定範圍的塊。 SSD可以使用這些信息來釋放內部空間,並使用空閒塊進行損耗平衡。 僅當存儲聲明其存儲協議(ATA或SCSI)支持時,纔會發出discard。 使用特定於存儲協議的協商的discard命令(ATA使用TRIM命令,SCSI使用帶有UNMAPWRITE SAMEUNMAP命令)向存儲發出discard請求。

當滿足以下幾點時,啓用discard支持最有用:

  • 文件系統上仍然有可用空間。
  • 底層存儲設備上的大多數邏輯塊已寫入。

有關TRIM的更多信息,請參閱數據集管理T13規範

有關UNMAP的更多信息,請參見SCSI塊命令3 T10規範的4.7.3.4節。

並非市場上所有的固態設備都支持discard。 要確定您的固態設備是否支持,請檢查**/sys/block/sda/queue/ discard_granularity**,它是設備內部分配單元的大小。

部署注意事項

由於SSD的內部佈局和操作,最好在內部 erase block boundary上分區設備。 如果SSD導出拓撲信息,則Red Hat Enterprise Linux 7中的分區實用程序選擇合理的默認值。 但是,如果設備不導出拓撲信息,則Red Hat建議在1MB邊界上創建第一個分區。

根據供應商的選擇,固態硬盤有各種類型的TRIM機制。早期版本的磁盤通過降低讀命令後可能發生的數據泄漏來提高性能。

以下是TRIM機制的類型:

  • 非確定性TRIM
  • 確定性TRIM(DRAT)
  • TRIM(RZAT)之後確定性讀零

前兩種TRIM機制可能會導致數據泄漏,因爲在TRIM返回不同或相同的數據之後,read命令會被髮送到LBA。RZAT在read命令之後返回零,Red Hat建議使用這種TRIM機制來避免數據泄漏。它只在SSD中受影響。選擇支持RZAT機制的磁盤。

使用的TRIM機制的類型取決於硬件實現。 要在ATA上找到TRIM機制的類型,請使用hdparm命令。 請參見以下示例以查找TRIM機制的類型:

# hdparm -I /dev/sda |grep TRIM
        *    Data Set Management TRIM supported (limit 4 blocks)
        *    Deterministic read ZEROs after TRIM

有關更多信息,請參見man hdparm

LVM使用的邏輯卷管理器(LVM),設備映射器(DM)目標和MD(軟件突襲)目標均支持discards。 唯一不支持discards的DM目標是dm-snapshot,dm-crypt和dm-raid45。 在Red Hat Enterprise Linux 6.1中添加了對dm-mirror的discards支持,從7.0開始,MD支持discards。

如果SSD無法正確處理discard,則在SSD上使用RAID5將導致性能降低。 您可以在raid456.conf文件或GRUB2配置中設置discard。 有關說明,請參閱以下過程。

過程 在raid456.conf中設置discard

devices_handle_discard_safely模塊參數在raid456模塊中設置。 要在raid456.conf**文件中啓用discard:

  1. 驗證硬件是否支持discard:

    # cat /sys/block/disk-name/queue/discard_zeroes_data
    

    如果返回值爲1,則支持discard。 如果命令返回0,則RAID代碼必須將磁盤輸出清零,這需要更多時間。

  2. 創建**/etc/modprobe.d/raid456.conf**文件,幷包含以下行:

    options raid456 devices_handle_discard_safely=Y
    
  3. 使用dracut -f命令重建初始ramdisk(initrd)。

  4. 重新啓動系統以使更改生效。

過程 在GRUB2配置中設置discard

**devices_handle_discard_safely模塊參數在raid456模塊中設置。要在GRUB2配置中啓用discard,請執行以下操作:

  1. 驗證硬件是否支持discard:

    # cat /sys/block/disk-name/queue/discard_zeroes_data
    

    如果返回值爲1,則支持discard。 如果命令返回0,則RAID代碼必須將磁盤輸出清零,這需要更多時間。

  2. 將以下行添加到**/etc/default/grub**文件中:

    raid456.devices_handle_discard_safely=Y
    
  3. 在使用BIOS固件的系統和使用UEFI的系統上,GRUB2配置文件的位置不同。使用以下命令之一重新創建GRUB2配置文件。

    • 在使用了BIOS固件的系統上,使用:
    # grub2-mkconfig -o /boot/grub2/grub.cfg
    
    • 在使用了UEFI固件的系統上,使用:

      # grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
      
  4. 重新啓動系統以使更改生效。

在Red Hat Enterprise Linux 7中,僅ext4和XFS文件系統完全支持discard。

在Red Hat Enterprise Linux 6.3和更早版本中,僅ext4文件系統完全支持discard。 從Red Hat Enterprise Linux 6.4開始,ext4和XFS文件系統都完全支持discard。 要在設備上啓用discard命令,請使用mount命令的discard選項。 例如,要在啓用discard的情況下將**/dev/sda2掛載到/mnt**,請使用:

# mount -t ext4 -o discard /dev/sda2 /mnt

缺省情況下,ext4不會發出discard命令,主要是爲了避免在可能未正確實現discard的設備上出現問題。 Linux swap代碼向以啓用discard的設備發出discard命令,並且沒有控制該行爲的選項。

性能調優注意事項

有關固態磁盤性能調整注意事項的信息,請參閱《 Red Hat Enterprise Linux 7性能調整指南》中的“固態磁盤”部分。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章