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 penggunaan disk kuartal terakhir dari sistem yang sama, menunjukkan fluktuasi selama seminggu terakhir.
Saya mulai memeriksa filesystem untuk file besar dan proses pelarian (file log, mungkin?). Saya menemukan bahwa file terbesar saya melaporkan nilai yang berbeda dari du
dan ls
. Berjalan du
dengan dan tanpa --apparent-size
sakelar 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 filefrag
alat ini. Beberapa file terbesar pada partisi XFS memiliki ribuan ekstensi. Menjalankan defrag online dengan xfs_fsr -v
selama 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?
Jawaban:
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:
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:
Fitur ini dapat dinonaktifkan sepenuhnya dengan mendefinisikan
allocsize
nilai selama mount sistem file. Default untuk XFS adalahallocsize=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:
Baru:
sumber
xfs_fsr
itu kembali turun menjadi sekitar 35GB. Saya harus mengawasi itu