全部产品
Search
文档中心

Alibaba Cloud Linux:Apa yang harus saya lakukan jika kinerja penulisan I/O buffer sistem file Ext4 pada instance ECS Alibaba Cloud Linux 2 tidak sesuai harapan?

更新时间:Jul 02, 2025

Topik ini menjelaskan penyebab dan solusi untuk masalah kinerja penulisan I/O buffer sistem file Ext4 pada instance Elastic Compute Service (ECS) yang menjalankan Alibaba Cloud Linux 2.

Deskripsi masalah

Operasi penulisan I/O buffer mungkin tidak berjalan sesuai harapan dalam sistem file Ext4 pada instance ECS dengan konfigurasi berikut:

  • Versi gambar: dari aliyun-2.1903-x64-20G-alibase-20190327.vhd (inklusif) hingga aliyun_2_1903_x64_20G_alibase_20220525.vhd (eksklusif).

  • Versi kernel: dari kernel-4.19.24-9.al7 (inklusif) hingga kernel-4.19.91-26.al7.x86_64 (eksklusif). Anda dapat menjalankan perintah uname -r untuk memeriksa versi kernel.

  • Sistem file Ext4 dipasang dengan opsi dioread_nolock dan nodelalloc.

    Catatan
    • Pelajari tentang kinerja penyimpanan blok.

    • Lakukan langkah-langkah berikut:

      Periksa Tipe Sistem File dan Opsi Pemasangan

      1. Identifikasi partisi disk tempat direktori target untuk operasi penulisan berada.

        Ganti <$DIR> dengan direktori target untuk operasi penulisan.

        df <$DIR> | grep -v Filesystem | awk '{ print $1 }'
      2. Lihat tipe sistem file dan opsi pemasangan partisi disk tersebut.

        Ganti <$Partition> dengan nama partisi disk yang diperoleh pada langkah sebelumnya.

        mount | grep -w <$Partition> | grep ext4 | grep -w dioread_nolock | grep -w nodelalloc

Instance ECS dengan konfigurasi di atas mungkin mengalami masalah kinerja penulisan yang tidak sesuai harapan dalam skenario berikut:

Skenario 1: Jalankan Perintah cp untuk Menyalin File Besar

Jalankan perintah berikut untuk menyalin file besar ke sistem file Ext4 dengan konfigurasi di atas.

Ganti <$LargeFiles> dengan nama file besar lokal yang ingin Anda salin. Untuk mensimulasikan masalah kinerja penulisan yang tidak sesuai harapan, gunakan file lebih besar dari 2 GiB.

cp <$LargeFiles> /mnt/badfile

Skenario 2: Jalankan Perintah dd Tanpa Flag Sinkronisasi untuk Menulis File

Jalankan perintah berikut tanpa flag sinkronisasi untuk menulis file ke sistem file Ext4 dengan konfigurasi di atas:

dd if=/dev/zero of=/mnt/badfile bs=10M count=1000

Ketika Anda menjalankan perintah iostat -xm 1 pada instance ECS dalam skenario di atas untuk memeriksa kecepatan penulisan, keluaran perintah berikut akan ditampilkan. Nilai pada kolom wMB/s adalah sekitar 30 MB/s, yang lebih rendah dari kinerja penyimpanan blok yang diharapkan dari instance ECS.

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.00    0.00   12.77    0.00    0.00   87.23

Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
vda               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
vdb               0.00  7194.00    0.00   57.00     0.00    28.05  1008.00     0.02   17.81    0.00   17.81   0.39   2.20

Penyebab

Ketika sistem file Ext4 dipasang dengan opsi dioread_nolock dan nodelalloc, sejumlah besar halaman kotor 4-KB yang disebut unwritten extents dihasilkan di kernel. Karena adanya cacat dalam logika pemrosesan sistem file Ext4, halaman-halaman ini tidak digabungkan menjadi halaman besar sebelum ditulis kembali dan diproses sebagai halaman kecil. Ketika Anda menggunakan alat Perf untuk memantau proses penulisan kembali cache halaman kernel, Anda akan menemukan bahwa proses ini dilakukan oleh fungsi ext4_writepages dari sistem file Ext4. Sebagian besar waktu dihabiskan untuk mencari dan memetakan halaman kotor 4-KB, sehingga mengakibatkan kinerja penulisan file yang sangat rendah.

Solusi

Solusi 1: Pasang ulang sistem file Ext4 tanpa opsi dioread_nolock dan nodelalloc

  1. Pasang ulang sistem file Ext4 tanpa opsi dioread_nolock dan nodelalloc.

    • Ganti <$Device> dengan nama perangkat sistem file Ext4. Anda dapat menjalankan perintah lsblk untuk melihat nama perangkat sistem file di kolom NAME pada keluaran perintah.

    • Ganti <$MountPoint> dengan titik pemasangan yang Anda inginkan untuk sistem file Ext4. Anda dapat memilih direktori kosong yang ada sebagai titik pemasangan atau membuat satu dengan menjalankan perintah sudo mkdir -p <new directory>.

    sudo mount -o remount,delalloc <$Device> <$MountPoint>
  2. Hapus opsi nodelalloc untuk sistem file Ext dari file /etc/fstab untuk memastikan bahwa sistem file dipasang secara otomatis saat startup sistem. Secara default, opsi delalloc digunakan untuk sistem file Ext4.

Solusi 2: Tingkatkan versi kernel

Peringatan
  • Peningkatan kernel dapat menyebabkan masalah kompatibilitas dan stabilitas. Tinjau fitur kernel dalam catatan rilis untuk Alibaba Cloud Linux 2 dan berhati-hatilah ketika Anda meningkatkan versi kernel.

  • Operasi restart sementara menghentikan instance, yang dapat mengganggu layanan yang sedang berjalan dan menyebabkan kehilangan data. Oleh karena itu, cadangkan data penting instance dan kemudian restart instance selama jam-jam sepi.

  1. Tingkatkan ke versi kernel terbaru.

    sudo yum update kernel
  2. Mulai ulang instance agar versi kernel baru berlaku.

    sudo reboot