4 poin oleh GN⁺ 2024-03-31 | 1 komentar | Bagikan ke WhatsApp

Pengenalan RCU

  • Sistem operasi adalah salah satu program yang paling sensitif terhadap performa dalam penggunaan sehari-hari.
  • Sistem operasi selalu bisa dibuat lebih cepat, dan para pengembang kernel serta driver terus berupaya mengoptimalkan kode.
  • Sistem operasi memerlukan konkurensi skala besar, menjadwalkan proses dan thread di ruang pengguna, serta memiliki thread internal dan interrupt handler yang berinteraksi dengan perangkat keras.

Cara Kerja RCU

  • Ketika data yang sering dibaca tetapi jarang ditulis (misalnya perangkat USB yang saat ini terhubung) perlu diubah secara atomik, digunakan strategi RCU (Read, Copy, Update).
  • Data dibaca, disalin lalu diubah, kemudian pointer diperbarui secara atomik ke versi baru.
  • Metode ini mudah digunakan dan tidak memiliki latensi tunggu, tetapi dapat menyebabkan kebocoran memori.

Mengatasi Masalah Kebocoran Memori

  • Untuk mencegah kebocoran memori, alih-alih menghapus data lama di dalam fungsi pembaruan, penghapusan dapat ditunda hingga tidak ada lagi reader yang sedang membacanya.
  • Memori dikelola dengan aman dengan membuat writer menunggu penghapusan data sampai tidak ada reader yang sedang membaca data tersebut.

Penggunaan Nyata RCU

  • RCU digunakan puluhan ribu kali di Linux, dan juga dipakai di library C++ Folly milik Facebook serta crossbeam-epoch di Rust.
  • RCU diselaraskan oleh tuntutan performa dan latensi, serta menyediakan pendekatan manajemen memori yang mirip dengan garbage collection.

Kesalahpahaman tentang Garbage Collection

  • Anggapan umum bahwa garbage collection lebih lambat daripada manajemen memori manual cepat runtuh ketika detailnya diperiksa.
  • Fungsi free() tidaklah gratis, dan allocator memori harus mempertahankan banyak state secara internal.
  • Garbage collector modern menyediakan optimisasi moving dan generational untuk menghadirkan throughput tinggi serta performa cache yang baik.

Ilusi Kendali

  • Pengembang kadang ingin membangun sistem real-time, tetapi pada praktiknya mereka tidak memiliki kendali penuh atas manajemen memori.
  • Sistem operasi hanya menebak maksud pengembang terkait alokasi memori, dan kadang akses pointer yang sederhana pun bisa berubah menjadi disk I/O.

Kesimpulan

  • Tidak semua perangkat lunak mendapat manfaat dari garbage collection, tetapi garbage collection adalah alat yang berguna dan tidak lagi perlu ditakuti bahkan di kalangan programmer sistem.

Opini GN⁺

  • RCU adalah teknik yang efektif untuk meningkatkan konkurensi sambil menjaga konsistensi data di lingkungan multithreading. Ini adalah elemen yang sangat penting dalam komputasi berkinerja tinggi maupun sistem real-time.
  • Contoh RCU yang mematahkan anggapan umum tentang garbage collection memberi pengembang sudut pandang baru terhadap manajemen memori. Hal ini особенно berlaku dalam bidang pemrograman sistem, tempat manajemen memori sangat penting.
  • Proyek lain yang menyediakan fungsi serupa dengan RCU antara lain Java ConcurrentLinkedQueue dan .NET ConcurrentBag, yang juga menyediakan struktur data lock-free.
  • Saat mengadopsi teknologi RCU, kebutuhan sistem dan target performa harus dipertimbangkan, serta penting untuk memahami manfaat yang diperoleh dan potensi biaya penggunaannya.
  • Artikel ini dapat membantu pengembang memahami manajemen memori dan konkurensi secara lebih mendalam, meninjau kembali asumsi yang ada, dan mengeksplorasi solusi baru.

1 komentar

 
GN⁺ 2024-03-31
Komentar Hacker News
  • Saran untuk melihat teknik garbage collection (GC) paralel yang inovatif untuk MPL dan MaPLe

    • Memenangkan Distinguished Paper Award di POPL 2024 dan ACM SIGPLAN 2023 Paper Award
    • Usulan utamanya adalah sebagai berikut:
      • 'disentanglement' berbasis garbage collection paralel yang terbukti efisien
      • kontrol granularitas otomatis yang terbukti efisien
  • Menggunakan RCU sebagai motivasi untuk garbage collection itu menarik

    • Masuk akal untuk memindahkan tanggung jawab pembebasan memori dari penulis ke pembaca terakhir
    • Untuk peningkatan kinerja, mungkin perlu dipertimbangkan memindahkan pembebasan memori ke proses batch khusus alih-alih ke pembaca
  • Kesalahpahaman umum tentang manajemen memori

    • Percaya bahwa programmer mengetahui waktu jeda optimal untuk manajemen memori
    • Dalam game dan program perdagangan kripto, programmer memang mungkin mengetahui waktu jeda optimal
  • Kasus penggunaan RCU meyakinkan, tetapi pengalaman dengan garbage collection dalam situasi lain kurang baik

    • Terdengar seperti argumen bahwa solusi manajemen memori khusus dapat memberikan kinerja terbaik
    • Pembahasan tentang kesalahpahaman bahwa pemanggilan free() mengembalikan memori ke OS
  • Saat menggunakan garbage collection, alokasi baru dilakukan dari RAM, bukan cache

    • Ini dapat sangat memengaruhi kinerja
    • Diberikan contoh benchmark di bahasa Julia
  • Garbage collection pelacakan yang baik sudah lama melampaui manajemen memori manual dalam hal throughput

    • Belakangan ini, latensinya dapat diterima untuk sebagian besar aplikasi
    • Penggunaan memori adalah pertimbangan utama
  • Salah satu hal yang cocok dengan garbage collection adalah async/await

    • Di Rust, penggunaan async/await menimbulkan masalah ketika digabungkan dengan manajemen memori
  • Agak mengejutkan beralih dari motivasi tentang RCU ke pembahasan tentang garbage collection umum

  • Saat mengembangkan perangkat lunak, ada dua kasus yang dipertimbangkan

    • Untuk hot path gunakan allocator khusus, dan untuk selain itu garbage collection itu nyaman
  • Peralihan dari RCU ke garbage collection pelacakan umum tampak seperti strategi yang licik

    • Manajemen memori manual mencakup lebih dari sekadar pemanggilan malloc/free
  • Sulit bagi programmer sistem untuk mengidentifikasi kapan sesuatu bisa digarbage-collect

  • Alat manajemen lifetime di Rust dan C++ membantu mengotomatiskan pembebasan memori, tetapi tidak menyederhanakan kompleksitasnya