天天看點

在 SSD 上使用 btrfs 檔案系統的相關優化

在 SSD 上使用 btrfs 檔案系統的相關優化

<a target="_blank"></a>

在 linux 中挂載 ssd 上的 btrfs,可以采用各種參數進行優化:

<code># &lt;file system&gt; &lt;mount point&gt; &lt;type&gt; &lt;options&gt; &lt;dump&gt; &lt;pass&gt;</code>

<code>uuid=&lt;略&gt; / btrfs defaults,ssd,discard,noatime,compress=lzo,subvol=@ 0 1</code>

這些參數各有優缺點,酌情添加。

btrfs 檔案系統有對 ssd 進行優化,在挂載參數中加入 <code>ssd</code> 即可。該參數不會自動啟用 trim/discard。

可以通過以下指令确認 ssd 是否支援 trim:

<code>sudo hdparm -i /dev/sdx | grep trim</code>

<code>* data set management trim supported (limit 8 blocks)</code>

<code>/* devices that don't properly handle queued trim commands */</code>

<code>{ "micron_m500_*", null, ata_horkage_no_ncq_trim |</code>

<code>ata_horkage_zero_after_trim, },</code>

<code>{ "crucial_ct*m500*", null, ata_horkage_no_ncq_trim |</code>

<code>{ "micron_m5[15]0_*"," mu01", ata_horkage_no_ncq_trim |</code>

<code>{ "crucial_ct*m550*", "mu01", ata_horkage_no_ncq_trim |</code>

<code>{ "crucial_ct*mx100*", "mu01", ata_horkage_no_ncq_trim |</code>

<code>{ "samsung ssd 8*", null, ata_horkage_no_ncq_trim |</code>

<code>{ "fcct*m500*", null, ata_horkage_no_ncq_trim |</code>

<code></code>

<code>/* devices that don't properly handle trim commands */</code>

<code>{ "supersspeed s238*", null, ata_horkage_notrim, },</code>

該參數不是必需的,也可以自定義周期性運作 <code>fstrim</code> 指令來取代該參數,使用該指令前要确認 ssd 支援 trim,否則可能造成資料丢失。當 ssd 有足夠的空餘空間或(未配置設定的)可用空間時不需要該參數。

挂載參數可以加入 <code>noatime</code>,通過禁止更新通路記錄來減少不必要的寫操作以提高性能。該選項對 hdd 同樣有性能提升。btrfs 的預設配置為 <code>relatime</code>。

打開壓縮功能在通常情況下有利于提高傳輸性能(并非絕對),也可以節省存儲空間。加入以下挂載參數:

<code>compress=lzo</code>

<code>或</code>

<code>compress=zlib</code>

lzo 速度更快,zlib 壓縮率更高。注意确認 ssd 主要是否是非壓縮主要,若為壓縮主要不建議加入該參數。

若 ssd 帶有緩存,啟用 write cache 可以提高性能:disks -&gt; drive setting -&gt; enable write cache,但在突然斷電的情況下可能造成資料丢失。

ssd 結構不同于傳統硬碟,尋址時間短,i/o 排程算法可選擇 <code>noop</code> 以降低延遲。以下指令可檢視與修改排程器:

<code>cat /sys/block/sdx/queue/scheduler # sdx 指你的裝置</code>

<code>sudo tee /sys/block/sdx/queue/scheduler &lt;&lt;&lt; noop</code>

注意以上方法并不持久,重新開機後會重置。如果 ssd 是系統唯一的儲存設備,可考慮通過 <code>elevator=noop</code> 核心參數設定 i/o 排程器。也可使用 udev 規則來修改排程器,對多儲存設備同樣有效:

<code>/etc/udev/rules.d/60-ssd-scheduler.rules # 建立該檔案</code>

檔案内容如下:

<a href="http://www.akarin.cn/archives-73.html" target="_blank">關于在ssd上使用btrfs檔案系統需要做的優化 - akarin.cn</a>

<a href="https://wiki.archlinux.org/index.php/solid_state_drives_(%e7%ae%80%e4%bd%93%e4%b8%ad%e6%96%87)" target="_blank">solid state drives - arch wiki</a>

<a href="https://wiki.debian.org/ssdoptimization" target="_blank">ssd optimization - debian wiki</a>

<a href="https://btrfs.wiki.kernel.org/index.php/faq" target="_blank">btrfs wiki</a>

本文來自雲栖社群合作夥伴“linux中國”,原文釋出日期:2015-10-16   

繼續閱讀