Mengapa sistem file XFS saya tiba-tiba menghabiskan lebih banyak ruang dan penuh dengan file jarang?


62

Saya telah menjalankan sistem file XFS sebagai partisi data / pertumbuhan selama hampir 10 tahun di berbagai server Linux.

Saya telah melihat fenomena aneh dengan server CentOS / RHEL baru-baru ini menjalankan versi 6.2+.

Penggunaan sistem file yang stabil menjadi sangat bervariasi setelah pindah ke revisi OS yang lebih baru dari EL6.0 dan EL6.1. Sistem yang awalnya diinstal dengan EL6.2 + menunjukkan perilaku yang sama; menunjukkan ayunan liar dalam pemanfaatan disk pada partisi XFS (Lihat garis biru pada grafik di bawah).

Sebelum dan sesudah. Pembaruan dari 6.1 ke 6.2 terjadi pada hari Sabtu. grafik xfs

Grafik penggunaan disk kuartal terakhir dari sistem yang sama, menunjukkan fluktuasi selama seminggu terakhir. masukkan deskripsi gambar di sini

Saya mulai memeriksa filesystem untuk file besar dan proses pelarian (file log, mungkin?). Saya menemukan bahwa file terbesar saya melaporkan nilai yang berbeda dari dudan ls. Berjalan dudengan dan tanpa --apparent-sizesakelar menggambarkan perbedaannya.

# du -skh SOD0005.TXT
29G     SOD0005.TXT

# du -skh --apparent-size SOD0005.TXT
21G     SOD0005.TXT

Pemeriksaan cepat menggunakan utilitas ncdu di seluruh sistem file yang dihasilkan:

Total disk usage: 436.8GiB  Apparent size: 365.2GiB  Items: 863258

Sistem file penuh dengan file jarang , dengan hampir 70GB ruang hilang dibandingkan dengan versi OS / kernel sebelumnya!

Saya meneliti melalui Red Hat Bugzilla dan mengubah log untuk melihat apakah ada laporan tentang perilaku yang sama atau pengumuman baru tentang XFS.

Nada.

Saya beralih dari kernel versi 2.6.32-131.17.1.el6 ke 2.6.32-220.23.1.el6 selama upgrade; tidak ada perubahan dalam nomor versi minor.

Saya memeriksa fragmentasi file dengan filefragalat ini. Beberapa file terbesar pada partisi XFS memiliki ribuan ekstensi. Menjalankan defrag online dengan xfs_fsr -vselama periode aktivitas yang lambat membantu mengurangi penggunaan disk untuk sementara waktu (Lihat Rabu dalam grafik pertama di atas). Namun, penggunaan meningkat segera setelah aktivitas sistem berat dilanjutkan.

Apa yang terjadi disini?


2
Mmm ... Piazza ....
Tom O'Connor

Jawaban:


76

Saya melacak masalah ini kembali ke diskusi tentang komit ke pohon sumber XFS dari Desember 2010. Patch diperkenalkan di Kernel 2.6.38 (dan jelas, kemudian di-backport ke beberapa kernel distribusi Linux yang populer).

Fluktuasi yang diamati dalam penggunaan disk adalah hasil dari fitur baru; Preallokasi EOF Spekulatif Dinamis XFS .

Ini adalah langkah untuk mengurangi fragmentasi file selama streaming menulis dengan mengalokasikan ruang secara spekulatif ketika ukuran file meningkat. Jumlah ruang yang dialokasikan sebelumnya per file bersifat dinamis dan terutama merupakan fungsi dari ruang kosong yang tersedia pada sistem file (untuk mencegah kehabisan ruang seluruhnya).

Ini mengikuti jadwal ini:

freespace       max prealloc size
  >5%             full extent (8GB)
  4-5%             2GB (8GB >> 2)
  3-4%             1GB (8GB >> 3)
  2-3%           512MB (8GB >> 4)
  1-2%           256MB (8GB >> 5)
  <1%            128MB (8GB >> 6)

Ini adalah tambahan yang menarik untuk sistem file karena dapat membantu dengan beberapa file yang terfragmentasi secara besar-besaran yang saya tangani.

Ruang tambahan dapat direklamasi sementara dengan membebaskan pagecache, gigi palsu dan inode dengan:

sync; echo 3 > /proc/sys/vm/drop_caches

Fitur ini dapat dinonaktifkan sepenuhnya dengan mendefinisikan allocsizenilai selama mount sistem file. Default untuk XFS adalah allocsize=64k.

Dampak dari perubahan ini mungkin akan dirasakan oleh sistem pemantauan / thresholding (seperti yang saya ketahui), tetapi juga memengaruhi sistem basis data dan dapat menyebabkan hasil yang tidak terduga atau tidak diinginkan untuk mesin virtual dan array penyimpanan yang disediakan secara tipis (mereka akan menggunakan lebih banyak ruang daripada yang Anda harapkan).

Secara keseluruhan, itu membuat saya lengah karena tidak ada pengumuman yang jelas tentang perubahan sistem file pada tingkat distribusi atau bahkan dalam memantau milis XFS .


Sunting :
Kinerja pada volume XFS dengan fitur ini ditingkatkan secara drastis. Saya melihat fragmentasi konsisten <1% pada volume yang sebelumnya ditampilkan hingga 50% fragmentasi. Kinerja menulis meningkat secara global!

Statistik dari dataset yang sama, membandingkan legacy XFS dengan versi di EL6.3.

Tua:

# xfs_db -r -c frag /dev/cciss/c0d0p9
actual 1874760, ideal 1256876, fragmentation factor 32.96%

Baru:

# xfs_db -r -c frag /dev/sdb1
actual 1201423, ideal 1190967, fragmentation factor 0.87%

4
Satu juta suara positif dan kerajaan saya untuk Anda
Joel E Salas

1
Terima kasih! Kami baru saja memutakhirkan dari Debian Squeeze ke Ubuntu dan bertanya-tanya mengapa du dan ls menunjukkan nilai yang sangat berbeda untuk file-file besar (mis. 50Mb vs 64Mb)
Giles Thomas

1
@ewwhite Apakah Anda mematikan fitur ini untuk mendapatkan kembali ruang? Atau apakah artikel ini hanya mengatakan, hei, fitur ini yang menyebabkan perbedaan ukuran yang dilaporkan? Kedengarannya seperti "pada sistem basis data, atau VM yang disediakan terbatas, pertimbangkan untuk mematikan ini", tapi saya tidak yakin apa yang Anda putuskan untuk dilakukan, pada akhirnya.
JDS

2
@ jds saya meninggalkannya. Ini menghilangkan fragmentasi dan telah meningkatkan kinerja aplikasi saya.
ewwhite

3
Oh, penemuan yang luar biasa. Ini menggunakan 750GB pada 35GB file. Setelah xfs_fsritu kembali turun menjadi sekitar 35GB. Saya harus mengawasi itu
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.