Sorun
Linux'ta bir SSD disk içindeki takas bölümünde arka plan TRIM işlemlerini etkinleştirmek istiyorum . Örneğin, bu makaleye göre , çekirdek bu yapılandırmayı algılar ve otomatik olarak silme işlemleri gerçekleştirir, ancak testlerimde, bu davranışı zorlamak için “at” montaj seçeneği kullanılmasına rağmen, çalışmadığı görülüyor.
senaryo
- Debian Wheezy Linux 3.2.0 çalıştıran
- SSD disk: 1 x 120GB OCZ Vertex 3 MI
- 2GB takas “düz” bölme, diğer katmanlar olmadan (LVM, RAID vb.)
Arka fon
Arka plan TRIM'in takas bölümünde çalışıp çalışmadığını kontrol etmek için izlediğim adımlar şunlardır:
TRIM desteği : SSD diskinin TRIM komutlarını destekleyip desteklemediğini ve çekirdeğin cihazı dönmeyen olarak işaretleyip işaretlemediğini kontrol edin:
# hdparm -I /dev/sda | grep TRIM * Data Set Management TRIM supported (limit 1 block) * Deterministic read data after TRIM # cat /sys/block/sda/queue/rotational 0
Takas dolgu-up : Sonra takas agresif 100'e vm.swappiness ayara tüm VM önbelleğe ve yapılandırmak Linux temizleyin bölüm bağlama ayırır mevcut tüm bellek ve kuvvetler çekirdek takas başlamak için bir komut dosyasını çalıştırın:
# swapon [--discard] /dev/sda2 # echo 3 > /proc/sys/vm/drop_caches # echo 100 > /proc/sys/vm/swappiness # ./fill-up-memory.up
Komut dosyası, 32GB fiziksel bellek + 2GB takas bölümü olan bir sunucuda çalışır ve bellekte ~ 33.8GB bir nesne oluşturur; bu, tüm belleği doldurmak ve değiştirmeye başlamak için yeterlidir. Bu, bu davranışı gerçekleştiren bir komut dosyası örneğidir:
#!/usr/bin/python mem = 33.8 testing = 'A' * int(1024 * 1024 * 1024 * mem) raw_input()
Takas içeriğini kontrol edin : “ takas -s” takas belleğinin% 100'ünün kullanıldığını gösterir. “Hdparm --read sektörü” kullanarak Takas bölümü sektörlerinin ham içeriğini kontrol ediyorum ve tüm baytlar “A” karakteri için karşılık gelen onaltılı gösterim olan “4141” e ayarlı, her şey beklendiği gibi çalışıyor. Bu, takas bölümünün içeriğini sektörlere göre okumak için örnek bir komut dosyasıdır:
#!/bin/bash for sector in `seq 194560 4100095` ; do hdparm --read-sector $sector /dev/sda done
NOT: takas bölümünün başlangıç / bitiş sektörünü ayrıştırılmış, cfdisk vb.
Komut dosyasını durdurduğumda, takas ayırmaları da dahil olmak üzere tüm belleği serbest bırakır, “swapon -s” sistemde takas kullanımı döndürmez. Bu noktada, Linux'un takas bölümünün içeriğini arka planda atmaya başlaması bekleniyor, ancak işe yaramıyor , birkaç saat sonra bile sektörlerin içeriği hala “4141”.
Birkaç test yaptım ve swapon()
/ / / / fstab üzerinde “at” montaj seçenekleri etkin olmasına rağmen Linux sadece bölüm sistem çağrısı kullanılarak etkinleştirildiğinde tam bir atma gerçekleştiriyor , ancak asla arka planda kalmıyor.
Ek araştırmalar: blkdev_issue_discard (), temel SSD cihazlarına TRIM komutları göndermekten sorumlu çekirdek işlevidir, bu işleve iki benzersiz referans vardır mm/swapfile.c
:
discard_swap()
swapon () işlemi sırasında çağrılır, “at” bağlama seçeneği etkinse tüm içeriği atar, bu beklendiği gibi çalışır.discard_swap_cluster()
bir küme takasının içeriğini atmalıdır, ancak hiçbir zaman TRIM komutu gerçekleştirmediği anlaşılmaktadır.
Soru: Takas + SSD aygıtlarında Linux'un beklenen davranışı nedir? Tüm serbest kesimleri / sayfaları atmalı mı yoksa yalnızca önyükleme işlemi sırasında bölüm etkinleştirildiğinde ilk tam atmayı mı yapmalıdır? Teşekkürler.