ossfs 2.0.9 dan versi lebih baru mendukung write acak berbasis direktori temporary lokal. Dengan mengonfigurasi opsi mount --temp_dir, ossfs 2.0 menyimpan sementara data yang ditulis di disk lokal sehingga titik mount memiliki semantik write acak POSIX penuh, seperti write pada offset arbitrer, pemotongan ke ukuran apa pun, dan pembacaan saat sedang menulis (read-while-write). Topik ini menjelaskan prinsip kerja, metode konfigurasi, batasan penggunaan, serta rekomendasi untuk fitur write acak.
Informasi latar belakang
Saat sebuah objek dibuat di OSS, objek tersebut tidak dapat dimodifikasi sebagian. Setiap perubahan konten memerlukan penimpaan seluruh objek. Dalam mode default ossfs 2.0, jalur write menggunakan unggah streaming: data diunggah ke OSS secara berurutan sesuai penulisannya, yang memiliki keterbatasan berikut:
Hanya write berurut yang didukung. Panggilan
pwritepada posisi di luar akhir file tidak didukung.truncatehanya mendukung pemotongan ke ukuran 0. Pemotongan ke ukuran non-nol lainnya mengembalikanENOTSUP.File tidak dapat dibaca selama proses penulisan (sebelum ditutup). Melakukannya akan mengembalikan
EBUSY.
Skenario seperti eksekusi kode Agen AI, penyuntingan skrip in-place, dan hasil antara komputasi ilmiah umumnya bergantung pada semantik write acak. Fitur write acak ossfs 2.0 menyimpan sementara data yang ditulis di direktori temporary lokal dan, dikombinasikan dengan manajemen chunk serta unggah inkremental, menerapkan write acak di atas penyimpanan objek.
Mode write acak ossfs 2.0 memiliki karakteristik berikut:
Semantik write acak POSIX penuh: Mendukung
pwritepada offset arbitrer,O_APPEND, dantruncateke ukuran apa pun (memperbesar atau memperkecil).Read-while-write: File dapat dibaca selama proses penulisan. Bagian yang telah dimodifikasi dibaca dari area staging lokal, sedangkan bagian yang belum dimodifikasi dibaca langsung dari OSS.
Unggah inkremental: Saat flush atau close, hanya blok data yang dimodifikasi yang diunggah dari disk lokal. Bagian yang tidak dimodifikasi ditangani melalui copy sisi server di OSS, tanpa I/O lokal maupun konsumsi bandwidth unggah.
Proteksi ruang disk: Anggaran disk global bawaan mengembalikan
ENOSPCuntuk operasi write ketika ruang disk staging hampir habis. Anda dapat mencadangkan ambang batas ruang bebas saat mount untuk mencegah disk sistem terisi penuh.
Direktori temporary lokal hanya melayani jalur write. Direktori ini independen dari cache data lokal (--disk_data_cache_dir, yaitu cache baca). Anda dapat mengaktifkan keduanya secara bersamaan (menggunakan direktori berbeda) tanpa gangguan antarkeduanya.
Secara default, ossfs 1.0 menggunakan direktori /tmp sebagai direktori temporary lokal. Untuk menjaga konsistensi path dengan path default ossfs 1.0, konfigurasikan --temp_dir=/tmp.
Setelah write acak diaktifkan, performa write dibatasi oleh performa baca/tulis disk tempat direktori temporary lokal berada. Pada skenario yang melibatkan write berurut dalam jumlah besar, seperti menyalin file besar, performa jauh lebih rendah dibandingkan mode default. Aktifkan fitur ini hanya jika workload Anda benar-benar memerlukan semantik write acak.
Prinsip kerja
Staging lokal dan unggah gabungan
Setelah write acak diaktifkan, ossfs 2.0 membuat file staging di direktori temporary lokal untuk setiap file yang ditulis secara acak, menyimpan modifikasi terbaru secara lokal dengan granularitas tetap berdasarkan blok data (chunk):
Data yang ditulis langsung disimpan di file staging lokal. Jika suatu write hanya tumpang tindih sebagian dengan blok data yang sudah ada di cloud, ossfs terlebih dahulu mengambil blok tersebut dari OSS untuk memastikan data yang distaging secara lokal lengkap.
Saat
fsyncatauclose, modifikasi yang distaging secara lokal secara otomatis digabungkan dan diunggah bersama data di cloud: bagian yang dimodifikasi diunggah dari disk lokal, sedangkan bagian yang tidak dimodifikasi ditangani melalui copy sisi server di OSS, tanpa mengirim ulang seluruh file atau mengonsumsi bandwidth baca disk lokal.Setelah unggah berhasil, ruang disk staging secara otomatis dilepas.
Read-while-write
File juga dapat dibaca selama proses penulisan: bagian yang dimodifikasi dibaca dari area staging lokal, sedangkan bagian yang belum dimodifikasi dibaca langsung dari OSS.
Proteksi ruang disk
Saat mount, ossfs memeriksa apakah ruang bebas di disk tempat direktori temporary berada memenuhi persyaratan cadangan, dan menolak mount jika tidak memenuhi. Jika ruang disk cadangan tidak mencukupi, operasi write mengembalikan ENOSPC alih-alih proses crash akibat disk penuh.
Metode konfigurasi
Item konfigurasi | Wajib | Deskripsi | Nilai default |
temp_dir | Tidak | Jalur direktori temporary lokal. Harus berupa jalur mutlak. Menetapkan nilai non-kosong mengaktifkan write acak. Biarkan kosong untuk menonaktifkan fitur ini. | Kosong |
temp_dir_free_bytes | Tidak | Ruang disk bebas minimum yang dicadangkan di disk tempat direktori temporary berada, dalam satuan byte (mendukung unit seperti K, M, dan G). ossfs2 tidak akan menggunakan ruang cadangan ini untuk staging data: ketika ruang disk bebas turun di bawah ambang batas ini, write baru mengembalikan ENOSPC, memberikan margin aman bagi workload lain di disk yang sama. Jika ruang disk bebas sudah berada di bawah nilai ini saat mount, proses mount gagal. Nilai minimum: 64 MiB. | 1 GiB |
random_write_max_file_size | Tidak | Ukuran logis maksimum satu file dalam mode write acak, dalam satuan byte (mendukung unit seperti K, M, dan G). Write atau pemotongan yang melebihi batas ini mengembalikan EFBIG. Batas fisik atas adalah kapasitas unggah multi-bagian OSS (10.000 bagian × 5 GiB, sekitar 48,8 TiB). | 100 GiB |
Batasan:
Jika direktori yang ditunjuk oleh
--temp_dirtidak ada, direktori tersebut akan dibuat secara otomatis. Kami merekomendasikan penggunaan partisi atau disk independen untuk menghindari persaingan ruang dengan disk sistem atau workload lain.Data untuk file yang sedang ditulis disimpan di direktori temporary lokal. Jika disk kekurangan kapasitas, write mengembalikan ENOSPC. Ruang disk bebas tersisa dikurangi ruang yang dicadangkan oleh
temp_dir_free_bytesdisebut sebagai ruang disk yang dapat ditulis. ossfs2 hanya menggunakan bagian ruang ini untuk menyimpan data yang sedang ditulis. Ruang disk yang dapat ditulis harus lebih besar daripada total ukuran semua file yang ditulis secara konkuren (dalam kasus terburuk, seluruh file mungkin ditulis secara lokal).Ketika beberapa instans ossfs2 dimount pada mesin yang sama, mereka diperbolehkan berbagi direktori temporary yang sama karena nama file staging tidak bentrok. Namun, beberapa instans akan bersaing untuk ruang dan I/O disk, sehingga kami merekomendasikan penggunaan direktori independen.
--temp_dirdan--enable_appendable_objectsaling eksklusif dan tidak dapat diaktifkan secara bersamaan.
Contoh perintah mount:
ossfs2 mount /mnt/oss/ \
--oss_bucket <your-bucket> \
--oss_endpoint <your-endpoint> \
--oss_access_key_id <ak> \
--oss_access_key_secret <sk> \
--temp_dir /mnt/disk/ossfs2/temp \
--temp_dir_free_bytes 1GPersyaratan lingkungan
Parameter | Persyaratan |
Jenis disk direktori temporary | Disk ephemeral elastis, NVMe lokal, atau ESSD direkomendasikan. Throughput write disk secara langsung memengaruhi latensi write acak dan kecepatan unggah. |
Ruang disk tersedia | Tidak kurang dari |
Dampak fitur
Perbandingan kemampuan write sebelum dan setelah mengaktifkan --temp_dir:
Operasi | Default mode | Random Write Mode |
Write append berurut | Didukung | Didukung |
pwrite pada offset arbitrer (di luar akhir file) | Tidak didukung | Didukung |
truncate ke 0 | Didukung | Didukung |
Pangkas ke ukuran apa pun (perbesar atau perkecil) | Tidak didukung (ENOTSUP) | Didukung |
Write O_APPEND ke file yang sudah ada | Didukung | Didukung |
Membaca file saat sedang ditulis | Tidak didukung (EBUSY) | Didukung |
Beberapa handle menulis ke file yang sama secara konkuren | Tidak didukung | Didukung |
Semantik durabilitas:
Secara default, mode write acak mengikuti semantik
fsync:fsyncmemicu unggah gabungan modifikasi lokal dengan data di cloud. Pengembalian sukses berarti data telah dipersisten ke OSS. Data yang tersisa juga diunggah saat file ditutup.Kegagalan unggah dikembalikan ke aplikasi sebagai error, dan aplikasi dapat mencoba ulang melalui
fsync. Jika unggah akhirnya gagal dan file ditutup, data yang belum dipersisten akan hilang, dan konten file kembali ke versi terakhir yang berhasil diunggah di sisi remote.Jika proses keluar secara abnormal, data staged yang belum diunggah akan hilang, tetapi objek di OSS tetap dalam kondisi unggah terakhir yang berhasil. Tidak ada objek korup yang dihasilkan.
Rekomendasi penggunaan
Write acak berbasis direktori temporary lokal cocok untuk skenario yang memerlukan semantik write mirip filesystem lokal pada titik mount OSS.
Skenario yang cocok untuk mengaktifkan write acak:
Skenario | Rekomendasi penggunaan |
Eksekusi kode Agen AI / lingkungan sandbox (agen dan interpreter kode melakukan baca/tulis arbitrer serta penyuntingan in-place pada file) | Aktifkan write acak. Kami merekomendasikan penggunaan disk independen berkinerja tinggi untuk direktori temporary, dan mencadangkan ruang disk yang dapat ditulis berdasarkan total ukuran file yang ditulis secara konkuren. |
File hasil antara aplikasi komputasi ilmiah atau simulasi | Aktifkan write acak. Rencanakan ruang disk yang dapat ditulis berdasarkan total ukuran file yang ditulis secara konkuren. |
Skenario yang tidak direkomendasikan untuk mengaktifkan write acak:
Skenario | Rekomendasi penggunaan |
Menyalin file besar (write massal ke titik mount menggunakan cp, rsync, dan alat serupa) | Dalam skenario ini, performa write dibatasi oleh disk lokal dan jauh lebih rendah dibandingkan mode default. Gunakan mode unggah streaming default sebagai gantinya. |
Write append berurut murni (write log streaming) | Jalur unggah streaming default memiliki overhead lebih rendah, sehingga mengaktifkan write acak tidak diperlukan. Jika read-while-write diperlukan, pertimbangkan |
Rekomendasi anggaran disk:
Pisahkan direktori temporary dari disk sistem untuk mencegah data staged mengisi penuh disk sistem dan memengaruhi stabilitas host. Jika mesin hanya memiliki satu disk, kami merekomendasikan menetapkan
temp_dir_free_byteske nilai yang lebih besar (misalnya, 10G) untuk mencadangkan ruang bebas yang cukup bagi sistem.Ruang disk yang dapat ditulis (lihat batasan di atas) harus lebih besar daripada total ukuran file yang ditulis secara konkuren.
Untuk file tunggal yang lebih besar dari 100 GiB, selain secara eksplisit menambah
--random_write_max_file_size(misalnya,--random_write_max_file_size=500G), Anda juga perlu memastikan bahwa ruang disk yang dapat ditulis melebihi ukuran file tersebut.