Bagikan melalui


API baru memungkinkan aplikasi untuk mengirim petunjuk "TRIM dan Unmap" ke media penyimpanan

Platform

Klien – Windows 8 Server – Windows Server 2012

Deskripsi

Petunjuk TRIM memberi tahu drive bahwa sektor tertentu yang sebelumnya dialokasikan tidak lagi diperlukan oleh aplikasi dan dapat dibersihkan. Ini biasanya digunakan ketika aplikasi membuat alokasi ruang besar melalui file dan kemudian mengelola sendiri alokasi ke file (misalnya, file Hard Disk Virtual).

Apa itu TRIM?

Solid state drive (SSD) biasanya merupakan perangkat yang dihapus blok berbasis memori flash; ini berarti bahwa ketika data ditulis ke SSD, data tidak dapat ditulis secara berlebihan dan harus ditulis di tempat lain sampai blok dapat dikumpulkan sampah. Karena SSD tidak memiliki mekanisme internal untuk menentukan bahwa blok tertentu dihapus dan yang lain diperlukan. Satu-satunya waktu SSD dapat menandai sektor 'kotor' adalah ketika ditulis secara berlebihan. Dalam kasus lain, seperti ketika file dihapus, SSD mempertahankan sektor-sektor ini karena penghapusan dilakukan sebagai perubahan tabel file master (MFT), dan bukan sebagai operasi ke semua sektor file. Di Windows 7, kami memperkenalkan cara standar untuk berkomunikasi dengan SSD tentang sektor yang tidak diperlukan lagi. Perintah ini didefinisikan dalam spesifikasi T13 sebagai perintah TRIM; NTFS mengirimkan perintah TRIM untuk beberapa operasi sebaris normal seperti "deletefile."

Kegunaan TRIM lainnya di dunia penyimpanan

Seperti SSD, jaringan area penyimpanan (SAN) dan fitur Windows 8 baru implementasi Ruang Perangkat Lunak menggunakan petunjuk perintah TRIM untuk mengelola ruang mereka di lingkungan yang disediakan secara tipis. SAN dan Ruang Perangkat Lunak mengalokasikan wilayah penyimpanan dalam ukuran yang lebih besar dari sektor atau kluster (di mana saja dari 1MB hingga 1GB). Ketika mereka menerima petunjuk TRIM untuk ukuran alokasinya (atau lebih besar dari ukuran alokasi), SAN/SSD dapat mende-alokasikan wilayah untuk mengosongkan ruang untuk file lain. Mereka biasanya melewati semua petunjuk TRIM ke media yang mendasar (SSD atau HDD) sehingga mereka dapat mengonsumsi ruang yang dibebaskan sebagaimana mewajarkannya. Mereka biasanya tidak memindahkan data ke wilayah yang tidak dialokasikan, juga tidak melacak area TRIM ke wilayah yang tidak dialokasikan (ketika wilayah kosong).

SAN yang disediakan secara tipis menggunakan petunjuk TRIM yang diteruskan kepada mereka untuk membantu mengurangi jejak penyimpanan fisik secara keseluruhan, sehingga mengurangi biaya. Spesifikasi SCSI T10 mendefinisikan perintah 'Unmap' (mirip dengan perintah TRIM); di sini perintah ini berlaku untuk semua jenis penyimpanan termasuk HDD, SSD, dan lainnya. Perintah UnMap membantu menghapus blok fisik dari alokasi SAN.

Cara menggunakan API baru

#define FSCTL_FILE_LEVEL_TRIM CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 130, METHOD_BUFFERED, FILE_WRITE_DATA)

Where 
typedef struct _EXTENT_PAIR {
    ULONGLONG Offset;
    ULONGLONG Length;
} EXTENT_PAIR, *PEXTENT_PAIR;

typedef struct _FILE_LEVEL_TRIM {
    //
    // A count of how many Offset:Length pairs are given
    //
    DWORD PairCount;
    //
    // All the pairs.
    //
    EXTENT_PAIR Pairs[1];
} FILE_LEVEL_TRIM, *PFILE_LEVEL_TRIM;

TRIM file diteruskan melalui buffer jika memungkinkan atau secara asinkron (tidak di-buffer) ke PERINTAH DSM IOCTL Perangkat TRIM. Ini dipetakan ke perintah TRIM untuk perangkat ATA dan perintah UnMap untuk perangkat SCSI. Kode TRIM file mengirimkan wilayah satu per satu seperti yang ditentukan oleh jangkauan di atas.

FILE TRIM tidak menunggu pengembalian dari perangkat, karena perintah TRIM dan Unmap didefinisikan sebagai petunjuk ke media penyimpanan yang mendasar dan kode pengembalian tidak diharapkan.

Alur kerja end-to-end:

  1. Pemangkasan File Panggilan

    1. FILE TRIM memeriksa input untuk kesalahan
    2. TRIM file memecah jangkauan ke wilayah LCN
    3. TRIM file membulatkan ke atas dan ke bawah untuk wilayah yang salah selaras yang diteruskan ke TRIM
    4. File TRIM menghapus entri dalam cache yang terkait dengan area TRIM
    5. FILE TRIM lolos IOCTL_DSM (Pangkas) per wilayah
  2. File TRIM kembali atau kesalahan

    1. Pemeriksaan kesalahan dilakukan pada validitas input
    2. Jika hanya beberapa dari jangkauan yang valid, satu kesalahan dikembalikan untuk panggilan API lengkap

Kasus penggunaan

Hard disk virtual konsumen (VHD) yang dipasang pada SSD:

VHD awalnya dipasang pada media yang tidak digunakan 'bersih'. Saat VHD digunakan, VHD mengonsumsi bagian media penyimpanan untuk file, dll. Ketika menghapus file di media penyimpanan, file-file ini tidak dihapus dari SSD karena VHD lengkap disimpan sebagai satu file pada SSD. Lingkungan Hyper-V memanggil TRIM File untuk semua wilayah yang dihapus saat delete-file terjadi di lingkungan VHD. File_TRIMs diterjemahkan ke SSD sehingga performa SSD dapat dioptimalkan.

VHD konsumen yang dipasang pada SAN yang disediakan secara tipis:

VHD awalnya dipasang pada satu lempengan minimum lingkungan yang disediakan secara tipis. Karena file disimpan di VHD, jejak penyimpanan VHD tumbuh dalam kelipatan lempung. Ketika file dihapus di VHD, Hyper-V memanggil File_TRIM ke SAN yang disediakan secara tipis. Jika TRIM lebih besar dari granularitas SLAB, SAN sekarang dapat menghapus SLAB dan karenanya mengurangi jejak VHD pada SAN tersebut.

Jika VHD berada di server berbasis Windows 8, Pengoptimal Penyimpanan juga akan mengirim TRIM untuk mengurangi jejak slab VHD dari dalam VHD yang dipasang.

Pengujian

Tidak ada API yang sebanding dalam rilis sistem operasi sebelumnya. Seharusnya tidak ada dampak performa dari API aktual itu sendiri, meskipun media penyimpanan (jika diimplementasikan dengan benar) dapat menunjukkan performa tulis yang lebih baik. API harus digunakan dengan sangat hati-hati; hanya jangkauan yang tidak lagi diperlukan harus diturunkan karena jangkauan tersebut akan dihapus secara permanen dari media penyimpanan.

Sumber