Linux + SSD'deki takas bölümlerinde arka plan atma


11

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:

  1. 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
    
  2. 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()
    
  3. 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.


4
Amaç ne? RAM ucuzdur, çünkü sunucunuzda 32 büyük alan olduğunu kanıtlarsınız. Takas'ı kapatın, yararlı bir şey için SSD'nizi kullanın ve bitfricking'i durdurun.
Tom O'Connor

3
Bu sunucularda takas devre dışı bırakılamaz ve benzersiz bir SSD diskleri vardır, takas bölümünü geleneksel bir HDD'de barındırmak için bir seçenek yoktur. SSD disk üzerine takas koymanın en iyi seçenek olmadığının farkındayım, ancak disk performansını mümkün olduğunca artırmak için takas bölümlerinde aynı "sil" ext4 davranışını elde edip edemeyeceğimi merak ediyordum.
santisaez

2
Bu gerçekten erken bir optimizasyon vakası gibi geliyor.
MikeyB

"Yorumlar sadece 5 dakika için düzenlenebilir" - bana işteyken SF üzerinde olmak bana hizmet .... dediğim gibi; @MikeyB Aslında bunu okuyorum. Vikipedi makalesinde farkında olmadığım bir şeyden bahsedildi. "Flash belleğin çalışmasının doğası nedeniyle, sabit disk sürücüsünde olduğu gibi verilerin üzerine doğrudan yazılamaz." Bu yüzden takasta daha önce kullanılan blokların boş olacağı mantıklı olurdu .... ama santisaez takas içeriğini kontrol ettiğinde bunlar "0000" gibi görünür müydü?
Signal15

Tüm bunlar işletim sisteminin altındaki bir katmanda gerçekleşir. İşletim sistemi söz konusu olduğunda, bir bloktaki veriler yeniden yazılana kadar oradadır. Okuma-silme-yazma döngüsünü işlemek sürücünün sorumluluğundadır.
MikeyB

Yanıtlar:


1

Görünüşe göre discard_swap_cluster sadece scan_swap_map den çağrılır ve buna get_swap_page veya get_swap_page_of_type denir . Bu nedenle, doğruysam, atma işlemi, bir sayfa serbest bırakıldığında değil, yalnızca yeni bir takas sayfası tahsis edilecekse gerçekleşir.


Kulağa bir böcek gibi geliyor.
kasperd

2
Bu bir hata olmayabilir. Bu şekilde linux, tek tek yapmak yerine birçok sayfayı aynı anda atabilir.
lav

1

Sisteminizin --discard=oncevarsayılan değeri olabilir. Belirli bir atma seçeneğiyle montajı denediniz mi?

# nano /etc/fstab
________________________________________________________________
...
/dev/sda2    none    swap    ..., --discard=pages,...    ...
...

ve bu şekilde zorlamak:

# swapon --discard=pages /dev/sda2

Ayrıca bir fstrimhizmet hazırlamayı veya zaten mevcutsa yapılandırmayı deneyebilirsiniz .


-1

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”.

Takas içeriği, swapon -s"takas kullanılmaz" ifadesi döndürüldüğünde etkin bir şekilde "atılır" Sistem, SSD ve aşırı yazma işlemleri, SSD. (En azından belgelerden aldığım şey bu)


5
Eğer discardmontaj seçeneğiyle kullanılır TRIM komutları önlemek için yatan katı hal sürücüsüne gönderilmesi gerekmektedir yazma amplifikasyon SSD disklerde sorunu. En azından, ext4 gibi diğer dosya sistemlerinin işleyiş şekli budur.
santisaez

Açıkçası, bu gerçekten bu hdparm komutuyla sadece sıfır okuma ile sonuçlanır, ancak SSD'nin çöp toplayıcısının çalışma şansı olduktan sonra ..
Halfgaar
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.