Kinerja NTFS buruk

21

Mengapa kinerja NTFS sangat buruk dibandingkan dengan, misalnya, Linux / ext3? Paling sering saya melihat ini ketika memeriksa pohon sumber (besar) dari Subversion. Checkout memakan waktu sekitar 10-15 menit pada NTFS, sementara checkout yang sesuai di Linux (pada perangkat keras yang hampir identik) membutuhkan urutan besarnya lebih cepat (1 - 1,5 menit).

Mungkin ini khusus untuk menangani banyak file kecil dan NTFS lebih baik dalam hal file besar, tetapi mengapa harus begitu? Bukankah meningkatkan kinerja NTFS untuk file kecil akan sangat bermanfaat untuk kinerja Windows secara umum?

EDIT: Ini tidak dimaksudkan sebagai pertanyaan inflamasi "NTFS menyebalkan dibandingkan dengan ext3"; Saya benar-benar tertarik pada mengapa NTFS berkinerja buruk dalam kasus-kasus tertentu. Apakah itu hanya desain yang buruk (yang saya ragu), atau ada masalah lain yang ikut bermain?

JesperE
sumber
4
Mungkin ini dapat disusun ulang sehingga Anda bertanya bagaimana meningkatkan kinerja NTFS ketika berurusan dengan banyak file kecil, daripada bertanya mengapa NTFS menyebalkan dibandingkan dengan ext3?
ChrisInEdmonton
Setuju dengan @ Chris, pertanyaan ini tidak ada gunanya.
Sasha Chedygov
4
Yah, saya benar-benar tertarik mengapa NTFS berkinerja buruk. Jika jawabannya adalah "lakukan X untuk membuatnya lebih cepat", maka bagus, tapi saya akan puas untuk memahami masalahnya.
JesperE
Ah, oke, maaf sudah salah paham denganmu.
Sasha Chedygov
2
BTW ketika Anda menggunakan SVN pada mesin Windows, apakah mesin itu memiliki pemindai virus dengan perlindungan waktu nyata diaktifkan? Itu bisa buruk.
dlamblin

Jawaban:

35

NTFS memiliki hal ini disebut Tabel File Master . Kedengarannya sangat keren ketika Anda membacanya.

Anda dapat melihat bahwa ext3 berkinerja baik hingga sekitar 95% penggunaan disk, sementara keberadaan MFT berarti bahwa NTFS tidak benar-benar ingin Anda menggunakan lebih dari 90% dari disk Anda. Tetapi saya akan berasumsi bahwa itu bukan masalah Anda, dan bahwa masalah Anda adalah banyaknya operasi pada banyak file kecil.

Salah satu perbedaan di sini adalah apa yang terjadi ketika Anda membuat file kecil. Jika file lebih kecil dari ukuran blok, itu tidak ditulis ke blok itu sendiri tetapi disimpan dalam MFT. Ini bagus jika file tetap persis seperti saat dibuat. Dalam prakteknya, itu berarti bahwa ketika svn menyentuh file untuk membuatnya, kemudian menambahkan ke file itu, menghapusnya, atau hanya memodifikasinya dengan tidak cukup untuk memindahkannya ke bloknya sendiri, operasinya cukup lambat. Juga hanya membaca banyak file kecil memberi tekanan pada MFT di mana mereka semua berada, dengan kelipatan per blok. Mengapa harus melakukan ini? Terlebih dahulu menghindari fragmentasi dan menggunakan lebih banyak blok lebih efektif, dan secara umum itu adalah hal yang baik.

Sebaliknya, dalam ext2 dan 3, blok file untuk setiap file disimpan di sebelah tempat direktori metadata berada di direktori tersebut (bila memungkinkan, jika disk Anda tidak difragmentasi dan Anda memiliki ruang kosong sekitar 20%). Ini berarti bahwa ketika svn membuka direktori, sejumlah blok pada dasarnya di-cache dalam cache 16MB pada drive Anda, dan kemudian lagi di cache kernel. File-file itu mungkin termasuk file .svn dan file revisi untuk pembaruan terakhir Anda. Ini berguna karena kemungkinan beberapa file svn sedang melihat selanjutnya. NTFS tidak bisa melakukan ini, meskipun sebagian besar MFT harus di-cache dalam sistem, mereka mungkin bukan bagian yang Anda inginkan selanjutnya.

dlamblin
sumber
2
Anda benar bahwa ini adalah tempat file kecil hidup, tetapi saya tidak yakin mengapa ini harus memberi tekanan pada MFT. Bukankah lebih mudah untuk membaca file-file ini, karena Anda semua dijamin untuk menarik banyak file ini ke cache ketika Anda menarik salah satu dari mereka?
ChrisInEdmonton
1
@ChrisInEdmonton Pembaruan MFT yang menekankan, karena Anda tidak menyentuh blok di mana ruang tetangga tersedia, Anda akhirnya memindahkan barang-barang dan juga membatalkan bagian-bagian MFT yang di-cache. Saya akan memberi Anda bahwa di atas kertas, MFT harus menjadi cara yang sangat cepat untuk menangani file kecil. Itu tidak berlaku dalam praktek.
dlamblin
6

Nah, masalah khusus Anda adalah karena

  1. Subversion sendiri berasal dari dunia UNIX, oleh karena itu versi Windows mengasumsikan karakteristik kinerja yang serupa.
  2. Kinerja NTFS benar-benar tidak hebat dengan gazillions file kecil.

Apa yang Anda lihat hanyalah artefak dari sesuatu yang dirancang untuk sistem operasi tertentu dengan asumsi kinerja pada sistem operasi itu. Ini biasanya rusak parah, ketika dibawa ke sistem lain. Contoh lainnya adalah forking vs. threading. Pada UNIX-suka cara tradisional melumpuhkan sesuatu hanya untuk menelurkan proses lain. Di Windows, di mana proses membutuhkan setidaknya lima kali lebih lama untuk memulai, ini adalah ide yang sangat buruk.

Secara umum, Anda tidak dapat hanya mengambil artefak dari OS tertentu untuk diberikan pada yang lain dengan arsitektur yang sangat berbeda. Juga jangan lupa bahwa NTFS memiliki banyak fitur sistem file yang tidak ada dalam sistem file UNIX yang banyak digunakan pada saat itu, seperti penjurnalan dan ACL. Hal-hal itu harus dibayar.


Suatu hari, ketika saya punya banyak waktu luang, saya berencana untuk menulis modul sistem file SVN yang memanfaatkan fitur yang Anda miliki di NTFS, seperti dukungan transaksi (harus menghilangkan "menyentuh jutaan masalah file kecil") dan data alternatif stream (harus menghilangkan kebutuhan .svndirektori terpisah ). Ini akan menjadi hal yang baik untuk dimiliki tetapi saya ragu para SVN devs akan melakukan hal-hal seperti itu di masa mendatang.

Catatan: Satu pembaruan pada repositori SVN besar yang saya gunakan membutuhkan sekitar 250.000 operasi file. Beberapa suara kecil mengatakan kepada saya bahwa ini sangat banyak untuk 24 file yang berubah ...

Joey
sumber
1
Tetapi mengapa kinerja NTFS buruk ketika berhadapan dengan trilyun file kecil? Apakah itu harus dikorbankan untuk mendapatkan sesuatu yang lain?
JesperE
3

Inilah info Microsoft tentang cara kerja NTFS. Ini mungkin berlebihan untuk apa yang Anda cari tetapi mempelajarinya dapat menjelaskan skenario apa yang bermasalah dengan NTFS.

Kenneth Cochran
sumber