
Apa Itu Firedancer? Pembahasan Mendalam tentang Solana 2.0
Daftar Isi
- Apa yang Dibahas dalam Artikel Ini?
- Apa Itu Validator dan Keberagaman Klien Validator?
- Mengapa Jump Membangun Klien Validator Baru?
- Mengapa Kecepatan Cahaya Terlalu Lambat?
- Apa Itu Firedancer?
- Bagaimana Cara Kerja Firedancer?
- Arsitektur Modular
- Pemrosesan Jaringan
- Sistem Build
- Bagaimana Firedancer Bisa Begitu Cepat?
- Paralelisme Data Tingkat Lanjut
- Memanfaatkan FPGA untuk Komunikasi Jaringan Berkecepatan Tinggi
- Mengoptimalkan Reed-Solomon Coding untuk Komunikasi Jaringan
- Bagaimana Firedancer Diamankan?
- Peluang
- Tantangan
- Menerapkan Desain Defense in Depth
- Menerapkan Program Keamanan Terintegrasi
- Bagaimana Status Firedancer Saat Ini dan Apa Itu Frankendancer?
- Apa yang Sebenarnya Berjalan?
- Seberapa Baik Performanya?
- Frankendancer Sudah Aktif di Testnet
- Kesimpulan
- Sumber Daya Tambahan / Bacaan Lebih Lanjut
- Lampiran
- Pengantar Perangkat Keras Komputer dan Jaringan
- Unit Pemrosesan Pusat (CPU)
- Unit Pemrosesan Grafis (GPU)
- Memori Akses Acak (RAM)
- Penyimpanan Disk
- Papan Induk
- Ingress dan Egress
- Pipeline dan Paralelisme Data
- Field-Programmable Gate Array (FPGA)
Terima kasih sebesar-besarnya kepada tim Firedancer yang telah meninjau artikel ini.
Apa yang Dibahas dalam Artikel Ini?
Solana adalah blockchain tercepat. Namun, Solana masih bisa lebih cepat. Klien validator Solana Labs saat ini sudah baik, tetapi dioptimalkan untuk kecepatan peluncuran ke pasar. Dengan memanfaatkan pengalaman masa lalu, memulai dari awal, dan berbekal pengalaman puluhan tahun dalam komputasi berkinerja tinggi, Jump bertekad membuat Solana lebih cepat dan andal. Dengan menerapkan pengalaman dalam perdagangan frekuensi tinggi, Jump mengembangkan Firedancer. Ini adalah klien validator dengan performa tertinggi di antara semua blockchain. Firedancer menawarkan penulisan ulang menyeluruh terhadap klien validator Solana saat ini dalam bahasa pemrograman C.
Artikel ini membahas validator dan pentingnya keberagaman klien validator. Setelah itu, kita akan membahas alasan Jump membangun klien validator baru serta bagaimana pengalaman mereka dalam perdagangan frekuensi tinggi menjadikan mereka tim yang ideal untuk mengembangkan Firedancer. Kemudian, kami akan menjelaskan apa itu Firedancer, cara kerjanya, alasan kecepatannya, cara pengamanannya, dan statusnya saat ini.
Setelah membaca artikel ini, Anda akan memahami secara menyeluruh klien validator baru Jump. Anda akan mengenal berbagai optimasi terobosan yang menjadikannya klien validator dengan performa tertinggi di semua blockchain. Anda juga akan memahami mengapa Firedancer sangat penting bagi performa dan keandalan jaringan Solana. Inilah satu-satunya artikel yang Anda perlukan untuk mempelajari Firedancer.
Bagian Lampiran berisi pengantar opsional mengenai perangkat keras komputer dan jaringan. Bagian ini ditambahkan untuk memberikan konteks yang diperlukan pembaca umum agar dapat memahami konsep perangkat keras dan jaringan lebih lanjut yang dibahas dalam artikel ini. Meski demikian, konteks tetap diberikan jika diperlukan. Artikel ini dirancang agar mudah dipahami sehingga siapa pun yang menggunakan Solana dapat memahami Firedancer dan signifikansinya.
Apa Itu Validator dan Keberagaman Klien Validator?
Validator adalah komputer yang berpartisipasi dalam blockchain Proof of Stake. Validator merupakan tulang punggung jaringan Solana. Validator bertanggung jawab memproses transaksi dan berpartisipasi dalam konsensus. Validator membantu mengamankan jaringan dengan mengunci sejumlah token native Solana sebagai stake. Anggap saja sebagai uang jaminan yang membuat validator memiliki eksposur finansial terhadap jaringan. Eksposur ini mendorong validator untuk menjalankan tugas secara akurat dan efisien karena mereka menerima imbalan atas kontribusinya. Validator juga dikenai penalti atas aktivitas berbahaya atau kesalahan. Stake validator dikurangi akibat perilaku yang tidak semestinya melalui proses yang disebut slashing. Karena itu, validator berkepentingan menjalankan tugasnya dengan benar untuk meningkatkan stake.
Klien validator adalah aplikasi yang digunakan validator untuk menjalankan tugasnya. Klien menjadi fondasi bagi validator untuk menggunakan identitas unik secara kriptografis dan berpartisipasi dalam konsensus.
Memiliki beberapa klien yang berbeda satu sama lain meningkatkan toleransi kegagalan jika salah satu implementasi gagal. Misalnya, jika tidak ada klien yang menguasai lebih dari 33% stake, crash atau bug yang memengaruhi liveness tidak akan melumpuhkan jaringan. Demikian pula, jika bug pada suatu klien menyebabkan transisi status yang tidak valid, jaringan dapat menghindari kegagalan keamanan apabila kurang dari 33% stake menggunakan klien tersebut. Hal ini karena sebagian besar jaringan akan tetap berada dalam status yang valid sehingga mencegah pemisahan atau fork pada blockchain. Dengan demikian, keberagaman klien validator meningkatkan ketahanan jaringan karena bug atau kerentanan dalam satu klien tidak akan melumpuhkan seluruh jaringan.
Keberagaman klien diukur berdasarkan persentase stake yang dijalankan melalui setiap klien dan jumlah total klien yang tersedia. Saat artikel ini ditulis, terdapat 1979 validator di jaringan Solana. Dua klien yang digunakan validator tersebut di mainnet disediakan oleh Solana Labs dan Jito Labs. Solana diluncurkan dengan satu klien validator pada Maret 2020, yang dikembangkan oleh Solana Labs. Pada Agustus 2022, Jito Labs merilis klien validator kedua. Klien ini merupakan fork dari kode Solana Labs yang dipelihara dan diterapkan oleh Jito. Klien tersebut mengoptimalkan ekstraksi MEV (maximal extractable value) dalam blok. Klien Jito membuat pseudo-mempool karena Solana melakukan streaming blok tanpa mempool. Sebagai informasi, mempool atau memory pool adalah antrean transaksi tertunda dan belum dikonfirmasi. Pseudo-mempool memungkinkan validator menelusuri transaksi ini, menggabungkannya secara optimal, dan mengirimkannya ke Block Engine milik Jito.
Per Oktober 2023, klien Solana Labs menguasai 68,55% stake aktif, sedangkan Jito menguasai 31,45%. Jumlah validator yang menggunakan klien Jito meningkat 16% dibandingkan Laporan Kesehatan Solana Foundation sebelumnya. Meningkatnya penggunaan klien Jito menunjukkan tren positif menuju keberagaman klien.
Meskipun pertumbuhan ini menggembirakan, situasinya belum sempurna. Penting untuk menegaskan bahwa klien Jito adalah fork dari klien Solana Labs. Artinya, Jito menggunakan banyak komponen yang sama dengan basis kode validator asli dan berpotensi rentan terhadap bug atau eksploitasi yang juga memengaruhi klien Labs. Dalam kondisi ideal pada masa mendatang, Solana akan memiliki setidaknya empat klien validator independen. Tim yang berbeda akan membangun klien tersebut menggunakan bahasa pemrograman yang berbeda. Tidak ada satu implementasi pun yang menguasai lebih dari 33% stake karena setiap klien akan memiliki ~25%. Konfigurasi ideal ini tidak akan memiliki satu titik kegagalan dalam keseluruhan stack validator.
Mengembangkan klien validator independen kedua sangat penting untuk mewujudkan masa depan ini, dan Jump bertekad merealisasikannya.
Mengapa Jump Membangun Klien Validator Baru?
Mainnet Solana pernah mengalami empat kali penghentian produksi blok. Setiap kejadian memerlukan perbaikan manual oleh ratusan validator. Gangguan ini menyoroti kekhawatiran terkait keandalan jaringan Solana. Jump berpendapat bahwa protokolnya sudah baik. Sebaliknya, mereka mengaitkan downtime dengan masalah modul perangkat lunak yang memengaruhi konsensus. Karena itu, Jump mengembangkan klien validator baru untuk mengatasi masalah tersebut. Tujuan umum klien ini adalah meningkatkan stabilitas dan efisiensi jaringan Solana.
Pengembangan klien validator independen merupakan tugas yang sulit. Namun, ini bukan pertama kalinya Jump membangun jaringan global yang andal. Dahulu, transaksi sekuritas (yaitu membeli dan menjual saham) dilakukan secara manual oleh spesialis pasar. Seiring hadirnya platform perdagangan elektronik, bursa sekuritas menjadi lebih terbuka. Keterbukaan ini meningkatkan persaingan dan otomatisasi serta mengurangi waktu dan biaya perdagangan bagi investor. Perlombaan teknologi pun terjadi di antara para spesialis pasar.
Trader hidup untuk melakukan perdagangan. Pengalaman perdagangan yang optimal tidak boleh mengorbankan solusi perangkat lunak, perangkat keras, maupun jaringan. Sistem ini harus memiliki kecerdasan mesin tinggi, latensi real-time rendah, throughput tinggi, kemampuan adaptasi tinggi, skalabilitas tinggi, keandalan tinggi, dan akuntabilitas tinggi.
Solusi komoditas (yaitu perangkat lunak yang dapat langsung dibeli perusahaan) bukanlah keunggulan kompetitif. Mengirimkan order yang tepat ke bursa sepuluh kali dalam posisi kedua merupakan cara mahal untuk merugi. Persaingan ketat dalam perdagangan frekuensi tinggi menghasilkan siklus pengembangan tanpa akhir untuk membangun infrastruktur perdagangan global kelas atas.
Skenario ini mungkin terdengar familier. Kebutuhan sistem perdagangan yang sukses menyerupai kebutuhan blockchain yang sukses. Blockchain harus memiliki performa tinggi, toleran terhadap kegagalan, dan berlatensi rendah. Blockchain yang lambat adalah teknologi gagal yang tidak dapat memenuhi kebutuhan aplikasi perusahaan modern—teknologi semacam itu hanya menghambat inovasi, skalabilitas, dan kegunaan di dunia nyata. Dengan pengalaman lebih dari dua dekade dalam menskalakan jaringan global dan mengembangkan sistem berkinerja tinggi, Jump adalah tim yang ideal untuk membuat klien validator independen. Kevin Bowers, Chief Science Officer Jump Trading, mengawasi proses ini.
Mengapa Kecepatan Cahaya Terlalu Lambat?
Kevin Bowers telah banyak membahas bahwa kecepatan cahaya terlalu lambat. Kecepatan cahaya adalah konstanta terbatas yang secara alami membatasi jumlah komputasi yang dapat diproses oleh satu transistor. Saat ini, bit dimodelkan sebagai elektron yang bergerak melalui transistor. Teorema Kapasitas Shannon (yaitu jumlah maksimum data bebas kesalahan yang dapat dikirim melalui suatu saluran) membatasi jumlah bit yang ditransmisikan melalui transistor. Karena hukum dasar fisika dan teori informasi, kecepatan komputasi dibatasi oleh seberapa cepat elektron dapat bergerak melalui materi dan seberapa banyak data yang dapat dikirim. Batasan ini terlihat jelas ketika superkomputer didorong hingga mencapai batasnya. Akibatnya, terdapat “ketimpangan besar antara kemampuan komputer untuk mengolah angka dan kemampuannya untuk memindahkan angka.”
Ambil CPU Intel Core i9 13900K sebagai contoh. CPU ini memiliki 24 core x86 dengan base clock 2,2 GHz dan peak turbo clock 5,8 GHz. Dalam skenario terburuk, cahaya harus menempuh jarak total ~52,0 mm melintasi CPU ini. Manhattan Distance CPU (yaitu jarak antara dua titik yang diukur sepanjang sumbu bersudut tegak lurus) adalah ~73,6 mm. Pada peak turbo clock CPU sebesar 5,8 GHz, cahaya dapat menempuh ~51,7 mm di udara. Artinya, sinyal hampir dapat menempuh satu perjalanan pulang-pergi antara dua titik mana pun pada CPU selama satu clock cycle.
Kenyataannya jauh lebih buruk. Pengukuran ini menggunakan kecepatan cahaya yang bergerak melalui udara, sementara sinyal tersebut bergerak melalui silikon dioksida (SiO2). Cahaya dapat menempuh ~26,2 mm dalam silikon dioksida selama clock cycle 5,8 GHz. Cahaya dalam silikon (Si) hanya dapat menempuh ~15,0 mm selama clock cycle 5,8 GHz—sedikit lebih dari setengah sisi panjang CPU.
Tim Firedancer berpendapat bahwa kemajuan teknologi komputasi terkini lebih berfokus pada penambahan jumlah core dalam CPU daripada membuatnya lebih cepat. Ketika membutuhkan performa lebih tinggi, orang disarankan membeli lebih banyak perangkat keras. Pendekatan ini masih berfungsi selama throughput menjadi bottleneck. Bottleneck sebenarnya adalah kecepatan cahaya. Batasan alami ini menyebabkan kebuntuan dalam pengambilan keputusan. Tidak ada hasil langsung dari satu optimasi karena suatu sistem memiliki banyak komponen dan tidak ada yang dioptimalkan dengan baik. Bagian yang tidak dioptimalkan akan memburuk seiring waktu karena memiliki lebih sedikit kapasitas komputasi. Jadi, apa selanjutnya?
Dalam dunia komputasi berkinerja tinggi, pada akhirnya semuanya harus dioptimalkan. Hasilnya adalah pembangunan sistem untuk perdagangan produksi dan riset kuantitatif yang berjalan pada batas fisika dan teori informasi dalam skala global. Ini mencakup pembuatan teknologi switching jaringan khusus hingga algoritma bebas lock yang dirancang dengan mempertimbangkan batas fisik tersebut. Jump adalah perusahaan teknologi sekaligus perusahaan perdagangan. Di garis terdepan antara fiksi ilmiah dan kenyataan, serta dengan kemiripan mencolok antara masalah yang kini dihadapi Jump dan Solana, Jump mengembangkan Firedancer.
Apa Itu Firedancer?
Firedancer adalah klien validator baru dan sepenuhnya independen yang dikembangkan oleh tim Firedancer dalam bahasa pemrograman C. Firedancer dibangun dengan mengutamakan keandalan melalui arsitektur modular, dependensi minimal, dan proses pengujian ekstensif. Firedancer menawarkan penulisan ulang besar terhadap tiga komponen fungsional klien Solana Labs: Jaringan, Runtime, dan Konsensus. Setiap lapisan dioptimalkan untuk performa maksimum agar klien beroperasi dengan kapasitas yang hanya dibatasi oleh perangkat keras validator. Hal ini berbeda dari batas performa yang saat ini dihadapi validator akibat inefisiensi perangkat lunak. Dengan Firedancer, Solana akan diskalakan seiring peningkatan bandwidth dan perangkat keras.
Tujuan Firedancer adalah:
- Mendokumentasikan dan menstandarkan protokol Solana (pada akhirnya, seseorang harus dapat membuat validator Solana hanya dengan melihat dokumentasi, tanpa melihat kode validator Rust)
- Meningkatkan keberagaman klien validator
- Meningkatkan performa ekosistem
Bagaimana Cara Kerja Firedancer?
Arsitektur Modular
Firedancer membedakan dirinya dari klien validator Solana saat ini melalui arsitektur modularnya yang khas. Tidak seperti klien validator Rust Solana Labs yang beroperasi sebagai satu proses, Firedancer terdiri dari banyak proses Linux C individual yang disebut tile. Tile adalah sebuah proses dan sejumlah memori. Arsitektur tile ini menjadi dasar filosofi operasional Firedancer serta pendekatannya terhadap ketahanan dan efisiensi.
Proses adalah instans dari program yang sedang berjalan. Proses merupakan komponen mendasar sistem operasi modern dan merepresentasikan eksekusi serangkaian instruksi. Setiap proses memiliki ruang memori dan sumber dayanya sendiri yang dialokasikan oleh sistem operasi serta berjalan secara independen dari proses lain. Proses dapat diibaratkan sebagai pekerja mandiri di sebuah pabrik besar yang menangani tugas tertentu dengan alat dan ruang kerjanya sendiri.
Dalam Firedancer, setiap tile adalah proses individual dengan peran yang telah ditentukan. Misalnya, tile QUIC bertanggung jawab memproses traffic QUIC yang masuk dan meneruskan transaksi yang dienkapsulasi ke tile verify. Tile verify bertanggung jawab atas verifikasi tanda tangan, dan demikian pula untuk setiap tile lainnya. Tile ini beroperasi secara independen dan bersamaan, serta berkontribusi pada fungsionalitas sistem secara keseluruhan. Proses Linux individual memungkinkan domain kegagalan yang kecil dan independen. Artinya, masalah pada satu tile hanya berdampak minimal—atau memiliki “blast radius” kecil—terhadap keseluruhan sistem. Pendekatan ini berbeda dari klien Rust Solana Labs karena satu titik kegagalan tidak dapat langsung membahayakan seluruh validator.
Keunggulan utama arsitektur Firedancer adalah kemampuannya mengganti dan meningkatkan setiap tile dalam hitungan detik tanpa downtime. Kemampuan ini sangat berbeda dari klien Rust Solana Labs yang harus dimatikan sepenuhnya sebelum upgrade. Perbedaan tersebut berasal dari tidak adanya stabilitas ABI (Application Binary Interface) pada Rust. Hal ini mencegah upgrade secara langsung dalam lingkungan Rust murni. Penggunaan proses C, yang memperoleh manfaat dari stabilitas biner dalam model runtime C, secara signifikan mengurangi downtime terkait upgrade. Hal ini dimungkinkan karena tile mengelola status validator di workspace yang berbeda. Objek memori bersama ini tetap tersedia selama validator menyala. Setiap tile dapat melanjutkan pemrosesan dengan lancar dari posisi terakhirnya setelah restart atau upgrade.
Secara keseluruhan, Firedancer dibangun dengan arsitektur berbasis tile yang mendukung NUMA. Kita akan membahas artinya di bagian berikutnya. Untuk saat ini, ini berarti Firedancer menyediakan sumber daya perangkat keras khusus untuk setiap thread. Dalam arsitektur ini, 1 core CPU digunakan per tile. Arsitektur ini menawarkan pengiriman pesan berperforma tinggi antartile, yang dioptimalkan untuk lokalitas memori, tata letak sumber daya, dan latensi komponen.
Pemrosesan Jaringan
Pemrosesan jaringan Firedancer dirancang untuk menangani kebutuhan intensif jaringan Solana saat diskalakan hingga kecepatan gigabit per detik. Proses ini dibagi menjadi aktivitas masuk dan keluar.
Aktivitas masuk terutama berfokus pada penerimaan transaksi dari pengguna. Performa Firedancer sangat penting karena pesan konsensus dapat hilang jika validator tertinggal dalam pemrosesan paket. Bandwidth operasional saat ini untuk node Solana adalah ~0,2 Gbps, sedangkan lonjakan terbesar yang tercatat pada node Jump adalah ~40 GBps. Lonjakan bandwidth ini menunjukkan perlunya solusi pemrosesan ingress yang tangguh dan dapat diskalakan.
Aktivitas keluar mencakup pengemasan blok, pembuatan blok, dan pengiriman shred. Setiap tahap ini sangat penting bagi pengoperasian jaringan Solana yang aman dan efisien. Performa tugas-tugas ini tidak hanya memengaruhi throughput, tetapi juga keandalan jaringan secara keseluruhan.
Firedancer bertujuan mengatasi kelemahan historis pada antarmuka peer-to-peer Solana untuk memproses transaksi. Kekurangan utama antarmuka peer-to-peer Solana sebelumnya adalah tidak adanya kontrol kemacetan untuk transaksi masuk. Kekurangan ini menyebabkan gangguan jaringan besar pada 14 September 2021 (17 jam) dan 30 April 2022 (7 jam).
Sebagai tanggapan, Solana telah melakukan beberapa upgrade jaringan agar dapat menangani beban transaksi tinggi dengan baik. Firedancer mengikuti langkah tersebut dengan mengadopsi QUIC untuk kontrol alirannya. QUIC adalah protokol jaringan transportasi multiplexed yang menjadi dasar HTTP/3. QUIC berperan penting dalam perlindungan DDoS dan pengelolaan traffic jaringan. Namun, penting untuk dicatat bahwa dalam beberapa kasus, biayanya lebih besar daripada manfaatnya. QUIC, bersama perangkat keras khusus milik pusat data untuk memitigasi serangan DDoS, menghilangkan insentif di balik pembanjiran transaksi.
Spesifikasi QUIC setebal 151 halaman menambah kompleksitas besar dalam pengembangan. Karena tidak dapat menemukan library C yang memenuhi kebutuhan lisensi, performa, dan keandalan mereka, tim Firedancer membangun implementasinya sendiri. Implementasi QUIC Firedancer, yang dijuluki fd_quic, memperkenalkan struktur data dan algoritma yang dioptimalkan untuk meminimalkan alokasi memori dan mencegah kehabisan memori.
Stack jaringan khusus Firedancer menjadi inti kemampuan pemrosesannya. Stack ini dirancang dari awal untuk memanfaatkan receive-side scaling (RSS). RSS adalah bentuk load balancing jaringan dengan akselerasi perangkat keras yang mendistribusikan traffic jaringan ke berbagai core CPU untuk meningkatkan paralelisme pemrosesan jaringan. Setiap core CPU menangani sebagian traffic masuk dengan overhead minimal. Pendekatan ini mengungguli load balancing tradisional berbasis perangkat lunak karena tidak memerlukan scheduler, lock, dan operasi atomik yang kompleks.
Firedancer memperkenalkan framework pengiriman pesan baru untuk menyusun aplikasi dari tile berperforma tinggi. Tile ini dapat melewati jaringan kernel, yang terbatas karena berbasis socket, dengan memanfaatkan AF_XDP. AF_XDP adalah address family yang dioptimalkan untuk pemrosesan paket berkinerja tinggi. Penggunaan AF_XDP memungkinkan Firedancer membaca langsung dari buffer antarmuka jaringan.
Sistem tile ini memfasilitasi berbagai konsep komputasi berkinerja tinggi dalam stack Firedancer. Konsep tersebut mencakup:
- Dukungan NUMA - NUMA (Non-Uniform Memory Access) adalah desain memori komputer yang memungkinkan prosesor mengakses memorinya sendiri lebih cepat daripada memori yang terkait dengan prosesor lain. Bagi Firedancer, dukungan NUMA berarti klien dapat menangani memori secara efisien dalam konfigurasi multiprosesor. Hal ini penting untuk pemrosesan transaksi dalam volume tinggi karena mengoptimalkan penggunaan sumber daya perangkat keras yang tersedia.
- Lokalitas Cache - Lokalitas cache merujuk pada penggunaan data yang sudah berada dalam cache di dekat prosesor. Ini biasanya merupakan bentuk rumit dari lokalitas temporal (yaitu data yang baru saja diakses). Dalam Firedancer, fokus pada lokalitas cache berarti sistem dirancang untuk memproses data jaringan sambil meminimalkan latensi dan memaksimalkan kecepatan.
- Konkurensi Tanpa Lock - Konkurensi tanpa lock merujuk pada perancangan algoritma yang tidak memerlukan mekanisme penguncian (seperti mutex) untuk mengelola operasi simultan. Bagi Firedancer, konkurensi tanpa lock memungkinkan beberapa operasi jaringan berlangsung secara paralel tanpa menyebabkan penundaan akibat lock. Konkurensi tanpa lock meningkatkan kemampuan Firedancer untuk memproses banyak transaksi secara bersamaan.
- Ukuran Page Besar - Penggunaan ukuran page besar dalam pengelolaan memori membantu menangani dataset dengan mengurangi pencarian page table dan potensi fragmentasi memori. Bagi Firedancer, hal ini berarti peningkatan efisiensi pengelolaan memori. Ini bermanfaat untuk memproses data jaringan dalam volume besar.
Sistem Build
Sistem build Firedancer dirancang berdasarkan serangkaian prinsip panduan untuk menjamin keandalan dan konsistensi. Sistem ini menekankan minimalisasi dependensi eksternal dan memperlakukan semua alat yang terlibat dalam proses build sebagai dependensi. Hal ini mencakup penguncian setiap dependensi, termasuk compiler, ke versi yang tepat. Aspek penting sistem ini adalah isolasi lingkungan selama tahap build. Isolasi lingkungan meningkatkan portabilitas karena proses build tidak terpengaruh oleh lingkungan sistem.
Bagaimana Firedancer Bisa Begitu Cepat?
Paralelisme Data Tingkat Lanjut
Pendekatan Firedancer untuk tugas kriptografi seperti verifikasi tanda tangan ED25519 menggunakan paralelisme data tingkat lanjut yang tersedia di dalam prosesor modern. CPU modern memiliki instruksi Single Instruction, Multiple Data (SIMD) untuk memproses beberapa elemen data secara bersamaan dan optimalisasi untuk menjalankan beberapa instruksi per siklus CPU. Secara umum, penggunaan satu instruksi untuk mengoperasikan larik atau vektor elemen data secara paralel lebih efisien dari segi ruang, waktu, dan daya. Dalam hal ini, peningkatan pemrosesan data paralel dapat memberikan dampak lebih besar pada throughput dibandingkan peningkatan kecepatan pemrosesan semata.
Salah satu area tempat Firedancer menggunakan paralelisme data adalah optimalisasi komputasi verifikasi tanda tangan. Pendekatan ini memungkinkan larik atau vektor elemen data ditangani secara bersamaan untuk memaksimalkan throughput dan meminimalkan latensi. Inti implementasi ED25519 ini adalah aritmetika Galois Fields. Bentuk aritmetika ini sangat cocok untuk algoritma kriptografi dan komputasi biner. Dalam Galois Fields, operasi seperti penjumlahan, pengurangan, perkalian, dan pembagian didefinisikan agar selaras dengan sifat biner sistem komputer. Berikut adalah contoh Galois Field yang didefinisikan oleh 23:
Satu-satunya masalah adalah ED25519 menggunakan Galois Field yang didefinisikan oleh 2255-19. Anggap elemen field sebagai angka dari 0 hingga 2255-19. Berikut bentuk operasi dasarnya:
- x + y → penjumlahan dasar mod 2255-19
- x - y → pengurangan dasar mod 2255-19
- x * y → perkalian dasar mod 2255-19
- 1/x → x pangkat 2255-21 mod 2255-19
Penjumlahan, pengurangan, dan perkalian hampir merupakan matematika uint256_t (yaitu matematika dengan bilangan bulat tanpa tanda, dengan nilai terbesar 2256-1). Pembagian sulit dihitung. CPU dan GPU komoditas tidak melakukan matematika uint256_t, apalagi “matematika yang hampir uint256_t”, terlebih lagi pembagian tidak biasa yang sangat sulit. Menerapkan jenis matematika ini dengan performa sangat tinggi bergantung pada seberapa baik kita dapat mengemulasikannya.
Implementasi Firedancer menguraikan aritmetika dengan memperlakukan angka secara lebih fleksibel. Jika kita menerapkan prinsip pembagian dan perkalian panjang yang diajarkan di sekolah, yaitu membawa angka dari satu kolom ke kolom berikutnya, kita dapat memproses kolom-kolom tersebut secara paralel. Cara tercepat untuk mengemulasikan jenis matematika ini adalah merepresentasikan uint256_t sebagai enam digit 43-bit dengan “carry” 9-bit. Hal ini memungkinkan penggunaan operasi 64-bit yang sudah tersedia pada CPU sekaligus menyediakan ruang yang cukup untuk bit carry. Susunan angka ini mengurangi kebutuhan akan propagasi carry yang sering dan memungkinkan Firedancer menangani angka besar dengan lebih efektif.
Implementasi ini memanfaatkan paralelisme data dengan menyusun ulang komputasi aritmetika menjadi penjumlahan kolom yang diparalelkan. Memproses kolom secara paralel mempercepat komputasi secara keseluruhan karena mengubah hambatan yang sebelumnya bersifat sekuensial menjadi tugas yang dapat diparalelkan. Firedancer juga menggunakan set instruksi tervektorisasi seperti AVX512 dan ekstensi IFMA (AVX512-IFMA). Set ini memungkinkan pemrosesan aritmetika Galois Fields yang dijelaskan di atas sehingga meningkatkan kecepatan dan efisiensi.
Implementasi Firedancer yang dipercepat AVX512 sangat cepat. Pada satu core server Icelake 2,3 GHz, performa per clock core-nya lebih dari dua kali lipat dibandingkan demo Breakpoint mereka pada 2022. Implementasi ini menawarkan pemanfaatan vector lane 100% dan paralelisasi data berskala besar. Ini adalah demonstrasi luar biasa lainnya dari tim Firedancer bahwa, karena penundaan akibat kecepatan cahaya, jauh lebih mudah melakukan berbagai hal independen secara paralel daripada melakukan satu hal pada satu waktu, bahkan dengan bantuan perangkat keras khusus.
Memanfaatkan FPGA untuk Komunikasi Jaringan Berkecepatan Tinggi
CPU dapat menangani ~30.000 verifikasi tanda tangan per detik per core. Meskipun merupakan opsi yang hemat energi, CPU tidak memadai untuk operasi berskala besar. Keterbatasan ini berasal dari pendekatan pemrosesan sekuensialnya. GPU meningkatkan kemampuan pemrosesan ini menjadi ~1 juta verifikasi per detik per core. Namun, GPU terhambat oleh konsumsi daya yang besar, sekitar ~300 W per unit, dan latensi bawaan akibat pemrosesan batch.
FPGA hadir sebagai alternatif yang lebih unggul. FPGA menyamai throughput GPU, tetapi dengan konsumsi daya yang jauh lebih rendah, sekitar 50 W per FPGA. Latensinya juga lebih rendah daripada latensi sepuluh milidetik pada GPU. FPGA menawarkan solusi yang jauh lebih responsif untuk pemrosesan real-time dengan latensi ~200 mikrodetik. Tidak seperti pemrosesan batch pada GPU, FPGA di Firedancer memproses setiap transaksi secara terpisah dengan metode streaming. Penggunaan FPGA oleh Firedancer menghasilkan throughput mengesankan sebesar 8 juta tanda tangan per detik dengan anggaran daya kurang dari 400 W untuk 8 FPGA.
Tim tersebut mendemonstrasikan proses verifikasi tanda tangan ED25519 milik Firedancer di Breakpoint 2022. Proses ini melibatkan beberapa tahap, termasuk komputasi SHA-512 dalam pipeline RTL murni dengan berbagai pemeriksaan dan komputasi dalam pipeline prosesor ECC-CPU khusus. Pada dasarnya, tim Firedancer menulis compiler dan assembler untuk prosesor khusus mereka, mengambil kode Python dari RFC (Request for Comments), menjalankannya dengan objek yang operatornya di-overload untuk menghasilkan machine code, lalu menempatkan machine code tersebut di atas ECC-CPU.
Penting untuk diperhatikan bahwa Firedancer menggunakan gaya faktor bentuk akselerator AWS untuk menyeimbangkan ketahanan dengan konektivitas jaringan. Pilihan ini mengatasi tantangan yang terkait dengan konektivitas jaringan langsung, sebuah fitur yang sering dibatasi oleh penyedia cloud. Dengan pilihan ini, Firedancer memastikan integrasi yang lancar atas kemampuan canggihnya dalam batasan infrastruktur berbasis cloud.
Penting untuk memahami bahwa operasi yang berbeda membutuhkan ruang fisik nyata, bukan hanya ruang data konseptual. Firedancer menerapkan pemahaman ini dengan menyusun komponen fisik secara strategis agar saling berdekatan dan dapat digunakan kembali. Konfigurasi ini memungkinkan Firedancer memaksimalkan efisiensi FPGA-nya, mencapai 8 juta TPS dengan FPGA berusia 7 tahun pada mesin berusia 8 tahun.
Mengoptimalkan Reed-Solomon Coding untuk Komunikasi Jaringan
Tantangan mendasar dalam komunikasi jaringan adalah menyiarkan transaksi baru ke seluruh dunia. Sifat Internet yang point-to-point, jumlah bandwidth yang terbatas, dan masalah latensi membatasi penerapan gagasan tradisional seperti menggunakan jaringan untuk penyiaran langsung. Mendistribusikan data dalam struktur cincin atau pohon mengatasi sebagian masalah ini, tetapi masih belum memadai karena paket data dapat hilang selama transmisi.
Reed-Solomon coding adalah solusi elegan untuk masalah ini. Metode ini memperkenalkan redundansi transmisi data (yaitu informasi paritas) untuk memulihkan paket yang hilang. Konsepnya didasarkan pada prinsip bahwa dua titik menentukan sebuah garis, dan dua titik mana pun pada garis tersebut dapat menghasilkan kembali titik data asli. Dengan membangun polinomial berdasarkan titik data dan mendistribusikan titik-titik berbeda dari fungsi ini dalam paket terpisah, data asli dapat direkonstruksi selama penerima mendapatkan setidaknya dua paket.
Kita membangun polinomial karena penggunaan rumus tradisional untuk titik pada garis (y = mx + b) lambat secara komputasi. Firedancer menggunakan Polinomial Lagrange, metode khusus untuk konstruksi polinomial, guna mempercepat proses. Metode ini menyederhanakan proses pembuatan polinomial yang diperlukan untuk Reed-Solomon coding. Metode ini juga mengubah proses menjadi perkalian matriks-vektor yang lebih efisien dan dapat digunakan untuk polinomial berorde lebih tinggi. Matriks ini sangat terstruktur, dengan pola yang berulang secara rekursif sehingga baris pertama pola tersebut sepenuhnya menentukan matriksnya. Struktur ini berarti ada cara yang lebih cepat untuk mengalikan semuanya. Firedancer menggunakan pendekatan O(n log n) yang dipaparkan dalam artikel tahun 2016 untuk melakukan perkalian dengan matriks ini, pendekatan teoretis tercepat yang diketahui untuk Reed-Solomon coding. Hasilnya adalah komputasi informasi paritas yang efisien dibandingkan metode tradisional:
- Encoding RS lebih dari ~120 Gbps/core
- Decoding RS hingga ~50 Gbps/core
- Semua metrik ini dibandingkan dengan encoding RS saat ini yang mencapai ~8 Gbps/core (rust-rse)
Firedancer dapat menghitung paritas 14 kali lebih cepat daripada metode tradisional dengan pendekatan Reed-Solomon coding yang dioptimalkan ini. Hasilnya adalah proses encoding dan decoding data yang cepat dan andal, yang penting untuk mempertahankan throughput tinggi dan latensi rendah dalam skala global.
Bagaimana Firedancer Diamankan?
Peluang
Saat ini, semua validator menggunakan perangkat lunak yang didasarkan pada klien validator asli. Firedancer dapat meningkatkan keberagaman klien dan rantai pasok Solana jika berbeda dari klien Solana Labs. Ini mencakup penggunaan dependensi serupa dan penggunaan Rust untuk mengembangkan klien mereka.
Klien validator Solana Labs dan Jito berjalan sebagai satu proses. Menambahkan keamanan ke aplikasi monolitik sulit dilakukan setelah aplikasi berjalan dalam produksi. Validator yang menjalankan klien tersebut harus dimatikan untuk melakukan peningkatan keamanan langsung dalam Rust murni. Tim Firedancer dapat membangun arsitektur yang aman sejak awal dengan klien baru mereka.
Firedancer juga memperoleh keuntungan dari pengalaman yang sudah ada. Solana Labs mengembangkan klien validator dalam lingkungan startup. Lingkungan serba cepat ini membuat Labs harus bergerak cepat agar segera masuk ke pasar. Kondisi ini tidak mendukung pengembangan di masa mendatang. Tim Firedancer dapat mengamati apa yang dilakukan Labs dan tim di chain lain, lalu mempertimbangkan apa yang akan mereka lakukan secara berbeda jika dapat mengembangkan klien validator dari nol.
Tantangan
Meskipun berbeda dari klien Solana Labs, Firedancer harus mereplikasi perilakunya secara akurat. Kegagalan melakukannya menimbulkan masalah keamanan karena dapat memicu bug konsensus akibat inkompatibilitas. Risiko ini dapat dikurangi dengan memberikan insentif agar sebagian persentase stake berjalan pada kedua klien, sekaligus menjaga Firedancer tetap di bawah 33% dari total stake untuk jangka waktu yang panjang. Bagaimanapun, tim Firedancer harus menerapkan rangkaian fitur lengkap protokol, terlepas dari seberapa sulit fitur tersebut diterapkan dengan benar atau aman. Semuanya harus selaras dengan Firedancer. Karena itu, tim tidak dapat mengembangkan kode secara terisolasi dan harus meninjaunya dengan membandingkan fungsionalitas klien Labs. Kondisi ini diperburuk oleh kurangnya spesifikasi dan dokumentasi, sehingga Firedancer harus memperkenalkan konstruksi yang tidak efisien dari protokol.
Tim Firedaner juga harus menyadari bahwa mereka mengembangkan klien baru dalam C. C tidak memiliki jaminan keamanan memori yang secara native disediakan oleh bahasa seperti Rust. Salah satu tujuan utama codebase Firedancer adalah mengurangi frekuensi dan dampak kerentanan keamanan memori. Tujuan ini memerlukan perhatian khusus karena Firedancer merupakan proyek yang bergerak cepat. Firedancer harus menemukan cara untuk mempertahankan kecepatan pengembangan tanpa menimbulkan bug semacam itu. OS sandboxing adalah praktik mengisolasi tile dari OS. Tile hanya diizinkan mengakses sumber daya dan melakukan system call yang diperlukan untuk tugasnya. Karena tile memiliki tujuan yang didefinisikan dengan jelas dan tim Firedancer mengembangkan sebagian besar kode klien, izin tile diminimalkan sesuai Principle of Least Privilege.
Menerapkan Desain Defense in Depth
Semua perangkat lunak pada suatu saat akan memiliki kerentanan keamanan. Dengan berpijak pada asumsi bahwa perangkat lunak akan memiliki bug, Firedancer memilih untuk membatasi potensi dampak dari setiap kerentanan. Pendekatan ini disebut defense in depth. Defense in Depth adalah strategi yang menggunakan berbagai langkah keamanan untuk melindungi aset. Jika penyerang membobol satu bagian sistem, tersedia langkah tambahan untuk menghentikan ancaman agar tidak memengaruhi seluruh stack. Firedancer dirancang untuk memitigasi tahapan antara kerentanan dan eksploitasi. Misalnya, penyerang akan kesulitan mengeksploitasi kerentanan keamanan memori.
Hal ini karena pencegahan jenis serangan tersebut merupakan masalah yang telah dipelajari secara mendalam. Banyaknya riset tentang keamanan memori dalam C telah menghasilkan beragam teknik hardening dan fitur compiler yang digunakan tim untuk Firedancer. Bahkan jika penyerang dapat melewati praktik terbaik industri, eksploitasi tersebut akan sulit membobol sistem. Hal ini berkat isolasi tile dan OS sandboxing.
Isolasi tile adalah hasil dari arsitektur paralel Firedancer. Setiap tile memiliki satu tujuan yang jelas karena menjalankan proses Linux-nya sendiri. Misalnya, tile QUIC bertanggung jawab memproses traffic QUIC yang masuk dan meneruskan transaksi yang dienkapsulasi ke tile verifikasi. Selanjutnya, tile verifikasi bertanggung jawab atas verifikasi tanda tangan. Komunikasi antara tile QUIC dan tile verifikasi dilakukan melalui antarmuka memori bersama (yaitu proses Linux dapat saling meneruskan data). Antarmuka memori bersama antara dua tile ini bertindak sebagai batas isolasi. Jika tile QUIC memiliki bug yang memungkinkan penyerang mengeksekusi kode arbitrer saat memproses paket QUIC berbahaya, bug tersebut tidak akan memengaruhi tile lain. Dalam proses monolitik, hal ini akan langsung membobol sistem. Penyerang dapat merusak seluruh jaringan jika mengeksploitasi kerentanan ini pada beberapa validator. Penyerang mungkin dapat menurunkan performa tile QUIC, tetapi desain Firedancer membatasi dampaknya hanya pada tile QUIC.
OS sandboxing adalah praktik mengisolasi tile dari OS. Tile hanya diizinkan mengakses sumber daya dan melakukan system call yang diperlukan untuk tugasnya. Karena tile memiliki tujuan yang didefinisikan dengan jelas dan hampir seluruh kode dikembangkan oleh tim Firedancer, izin tile diminimalkan sesuai Principle of Least Privilege. Tile ditempatkan dalam namespace Linux masing-masing sehingga hanya memiliki visibilitas terbatas terhadap sistem. Visibilitas sempit ini mencegah tile mengakses sebagian besar sistem file, jaringan, dan proses lain yang berjalan pada sistem yang sama. Namespace menyediakan batas yang mengutamakan keamanan. Namun, batas ini masih dapat dilewati jika penyerang memiliki eksploitasi kernel untuk eskalasi hak akses. Antarmuka system call adalah vektor serangan terakhir di kernel yang dapat dijangkau dari tile. Untuk melindunginya, Firedancer menggunakan seccomp-BPF guna memfilter system call sebelum diproses kernel. Klien dapat membatasi tile hanya pada kelompok system call tertentu. Dalam beberapa kasus, parameter syscall dapat difilter. Ini penting karena Firedancer dapat memastikan syscall baca dan tulis hanya beroperasi pada file descriptor tertentu.
Menerapkan Program Keamanan Terintegrasi
Firedancer dirancang dengan program keamanan menyeluruh yang tertanam pada setiap tahap pengembangannya. Program keamanan klien merupakan kolaborasi berkelanjutan antara tim pengembangan dan keamanan, yang menetapkan standar baru bagi teknologi blockchain yang aman.
Proses dimulai dengan infrastruktur fuzzing mandiri. Sebagai penjelasan, fuzzing adalah teknik yang secara otomatis mendeteksi crash atau kondisi error yang mengindikasikan kerentanan. Hal ini dilakukan dengan menguji setiap komponen yang menerima input pengguna yang tidak tepercaya di bawah tekanan, termasuk antarmuka P2P (parser) dan virtual machine SBPF. OSS-Fuzz mempertahankan cakupan fuzz secara berkelanjutan selama perubahan kode. Tim keamanan juga telah menyiapkan instance ClusterFuzzer khusus untuk fuzzing berkelanjutan yang dipandu cakupan. Developer dan engineer keamanan juga berkontribusi pada harness fuzzing (yaitu versi khusus unit test untuk komponen penting bagi keamanan). Developer juga dapat menyumbangkan fuzz test baru, yang diambil dan diuji secara otomatis. Tujuannya adalah memastikan semua bagian menjalani fuzzing secara intensif sebelum beralih ke tahap berikutnya.
Peninjauan kode internal membantu mengidentifikasi bug yang terlewat oleh tooling. Pada tahap ini, fokus diarahkan pada komponen berisiko tinggi dan berdampak besar. Tahap ini menjadi mekanisme umpan balik untuk bagian lain dari program keamanan. Tim menerapkan semua pembelajaran mereka dan menggunakan peninjauan ini untuk meningkatkan cakupan fuzzing, memperkenalkan pemeriksaan analisis statis baru bagi kelas bug tertentu, dan bahkan melakukan refactoring kode berskala besar untuk menghindari vektor serangan yang kompleks melalui desain. Peninjauan keamanan eksternal oleh pakar industri terkemuka dan program bug bounty aktif akan melengkapi peninjauan internal ini, baik sebelum maupun sesudah peluncuran.
Firedancer juga menjalani stress test ekstensif di berbagai jaringan pengujian. Jaringan pengujian ini akan menghadapi serangan dan kegagalan seperti duplikasi node, kegagalan link jaringan, banjir paket, dan pelanggaran konsensus. Jaringan ini menghadapi beban yang jauh lebih tinggi daripada skenario realistis apa pun di mainnet.
Hal ini membawa kita pada pertanyaan: bagaimana status Firedancer saat ini?
Bagaimana Status Firedancer Saat Ini dan Apa Itu Frankendancer?
Tim Firedancer mengembangkan Firedancer secara bertahap untuk memodularisasi klien validator. Hal ini selaras dengan sasaran dokumentasi dan standardisasi mereka. Pendekatan ini memastikan Firedancer selalu mengikuti perkembangan terbaru Solana. Inilah yang menghasilkan Frankendancer. Frankendancer adalah model klien hibrida tempat tim Firedancer mengintegrasikan komponen yang telah mereka kembangkan ke dalam infrastruktur klien validator yang ada. Proses pengembangan ini memungkinkan peningkatan dan pengujian fitur baru secara bertahap.
Frankendancer ibarat menempatkan mobil sport di tengah kemacetan. Performa akan meningkat seiring bertambahnya komponen yang dikembangkan dan dihilangkannya hambatan. Proses pengembangan modular ini menciptakan lingkungan validator yang dapat disesuaikan dan fleksibel. Di sini, developer dapat memodifikasi atau mengganti komponen tertentu dalam klien validator agar sesuai dengan kebutuhan mereka.
Apa yang Sebenarnya Berjalan?
Frankendancer menerapkan semua fitur jaringan validator Solana:
- Masuk: QUIC, TPU, Sigverify, Dedup
- Keluar: Pengemasan blok, membuat/menandatangani/mengirim shred (Turbine)
Frankendancer menggunakan kode jaringan C berperforma tinggi milik Firedancer di atas runtime dan kode konsensus Rust milik Solana Labs.
Arsitektur Frankendancer dirancang dengan mempertimbangkan optimalisasi perangkat keras kelas atas. Meskipun mendukung host cloud standar kelas bawah yang menjalankan sistem operasi Linux standar, tim Firedancer mengoptimalkan Frankendancer untuk server dengan banyak core. Tujuan jangka panjangnya adalah memanfaatkan perangkat keras yang sudah tersedia di cloud untuk meningkatkan efisiensi dan performa. Klien ini mendukung beberapa koneksi secara bersamaan, akselerasi perangkat keras, pengalihan aliran acak untuk distribusi beban (yaitu memastikan traffic jaringan terdistribusi secara merata), dan banyak batas proses untuk memberikan keamanan tambahan antarkomponen.
Efisiensi teknis merupakan landasan Frankendancer. Sistem ini menghindari alokasi memori dan operasi atomik di jalur kritis, dengan semua alokasi dioptimalkan untuk NUMA saat inisialisasi. Desain ini memastikan efisiensi dan performa maksimal. Selain itu, kemampuan untuk memeriksa komponen sistem secara asinkron dan dari jarak jauh, ditambah fleksibilitas dalam mengelola tile (memulai, menghentikan, dan memulai ulang secara asinkron), memberikan ketahanan dan kemampuan adaptasi tambahan pada sistem.
Seberapa Baik Performanya?
Frankendancer dapat memproses 1.000.000 transaksi per detik (TPS) per tile pada sisi jaringan masuk. Performa ini meningkat secara linear sesuai jumlah core yang digunakan karena setiap tile menggunakan 1 core CPU. Frankendancer mencapai hasil ini hanya dengan menggunakan empat core, hingga memaksimalkan network interface card (NIC) 25 Gbps.
Frankendancer telah menghasilkan peningkatan besar pada operasi jaringan keluar melalui optimalisasi Turbine. Perangkat keras node standar saat ini mencapai kecepatan 6 Gbps per tile. Ini mencakup peningkatan kecepatan yang signifikan dalam shredding (yaitu cara data blok dipecah dan dikirim melalui jaringan ke validator). Dibandingkan node Solana standar saat ini, Frankendancer menunjukkan peningkatan kecepatan shredding sebesar ~22% tanpa Merkle tree dan hampir dua kali lipat dengan Merkle tree. Ini merupakan peningkatan besar atas performa propagasi blok dan pemasukan transaksi dari validator saat ini.
Performa jaringan Firedancer menunjukkan bahwa sistem ini telah mencapai batas perangkat keras. Firedancer telah mencapai performa maksimum yang dimungkinkan oleh perangkat keras validator standar saat ini. Hal ini menandai pencapaian teknis yang signifikan dan menunjukkan kemampuan klien untuk menangani beban kerja ekstrem secara efisien dan efektif.
Frankendancer Sudah Aktif di Testnet
Saat ini, Frankendancer melakukan staking, voting, dan memproduksi blok di testnet. Frankendancer beroperasi secara kompatibel bersama ~2.900 validator Solana Labs dan Jito lainnya. Deployment aktif ini menunjukkan performa Firedancer yang tangguh pada perangkat keras komoditas. Saat ini, sistem berjalan pada server Equinix Metal m3.large.x86 yang ditenagai CPU AMD EPYC 7513. Banyak validator lain menggunakan jenis server yang sama. Server ini menawarkan solusi hemat biaya dengan harga sesuai permintaan yang bervariasi berdasarkan lokasi. Tarifnya berkisar dari $3,10 hingga $4,65 per jam.
Kemajuan Firedancer menuju peluncuran mainnet membuka beberapa kemungkinan untuk perangkat keras node:
- Perangkat keras validator saat ini dapat menghasilkan kapasitas performa per node yang jauh lebih tinggi
- Efisiensi Firedancer memungkinkan validator menggunakan perangkat keras yang lebih terjangkau dan berspesifikasi lebih rendah sambil mempertahankan tingkat performa serupa
- Desain Firedancer memungkinkannya memanfaatkan kemajuan perangkat keras dan bandwidth
Perkembangan ini, bersama inisiatif lain seperti Wiredancer (yaitu eksperimen tim Firedancer dengan akselerasi perangkat keras) dan Runtime/SVM modular berbasis Rust, menempatkan Firedancer sebagai solusi yang berorientasi pada masa depan.
Kemajuan Firedancer juga membuka diskusi mengenai potensi validator untuk menjalankan klien Solana Labs bersama Firedancer dalam proses yang dikenal sebagai side-caring. Pendekatan ini dapat memaksimalkan keaktifan jaringan dengan memanfaatkan kekuatan kedua klien dan memitigasi potensi dampak masalah pada salah satu klien terhadap jaringan secara keseluruhan. Selain itu, hal ini juga memunculkan spekulasi tentang kemungkinan proyek seperti Jito mempertimbangkan untuk melakukan fork terhadap Firedancer. Langkah tersebut dapat menghasilkan optimalisasi lebih lanjut dalam ekstraksi MEV dan efisiensi pemrosesan transaksi. Hanya waktu yang akan menjawab.
Kesimpulan
Developer biasanya memahami operasi sebagai sesuatu yang menggunakan ruang data, bukan ruang fisik. Dengan kecepatan cahaya sebagai batasan alami, asumsi ini menghasilkan sistem lambat yang gagal mengoptimalkan perangkat keras dengan benar. Dalam lanskap yang sangat kompetitif dan penuh persaingan, kita tidak boleh sekadar menambahkan lebih banyak perangkat keras ke Solana dan berharap kinerjanya meningkat. Kita perlu melakukan optimalisasi. Firedancer merevolusi cara klien validator disusun dan diharapkan beroperasi. Dengan membangun klien validator yang andal, sangat modular, dan berkinerja tinggi, tim Firedancer mempersiapkan Solana untuk adopsi massal.
Baik Anda seorang developer pemula maupun pengguna Solana pada umumnya, memahami Firedancer dan signifikansinya sangatlah penting. Pencapaian teknologi ini membuat blockchain tercepat dan berkinerja tertinggi yang saat ini tersedia di pasar menjadi semakin baik. Solana dirancang sebagai mesin status global dengan throughput tinggi dan latensi rendah. Firedancer merupakan lompatan besar untuk menyempurnakan tujuan tersebut.
Jika Anda sudah membaca sejauh ini, terima kasih, anon! Pastikan Anda memasukkan alamat email di bawah agar tidak pernah melewatkan kabar terbaru tentang Solana. Siap mempelajari lebih dalam? Bergabunglah dengan Discord kami untuk mulai membangun masa depan di blockchain berkinerja tertinggi hari ini.
Sumber Daya Tambahan / Bacaan Lebih Lanjut
- Situs Web Jump
- Repositori GitHub Firedancer
- Breakpoint 2023: Pembaruan Firedancer
- Breakpoint 2023: Mengamankan Firedancer
- Breakpoint 2023: Pengodean Reed-Solomon Cepat untuk Komunikasi Jaringan
- Breakpoint 2023: FPGA yang Beroperasi pada 8 Juta TPS
- Pencapaian Teknis fd_quic Firedancer
- Peningkatan Jaringan Solana
Lampiran
Pengantar Perangkat Keras Komputer dan Jaringan
Komputer adalah mesin yang dapat diprogram untuk menjalankan rangkaian operasi aritmetika atau logika secara otomatis. Operasi ini berkisar dari otomatisasi perhitungan dasar hingga pemrosesan data yang kompleks. Pada dasarnya, komputer memadukan komponen perangkat keras dan perangkat lunak untuk menjalankan instruksi serta mengelola data. Perangkat keras terdiri atas komponen fisik, sedangkan perangkat lunak mencakup program dan sistem operasi yang memberi tahu perangkat keras cara beroperasi.
Komputasi yang bermanfaat umumnya melibatkan empat sumber daya: daya komputasi, memori, penyimpanan disk, dan jaringan. Aspek komputasi, yang terutama ditangani oleh CPU, GPU, dan mungkin FPGA, sangatlah cepat serta mampu menjalankan miliaran operasi per detik. Mengakses RAM umumnya lebih lambat daripada melakukan komputasi di CPU. Penyimpanan disk menyediakan solusi penyimpanan jangka panjang yang berguna untuk komputasi. Namun, mengakses data dari Solid State Drive (SSD) dan Hard Disk Drive (HDD) jauh lebih lambat daripada operasi CPU. SSD sering kali ribuan kali lebih lambat, sedangkan HDD puluhan ribu kali lebih lambat. Selain itu, jaringan, termasuk Internet dan jaringan lokal, adalah yang paling lambat. Kecepatannya bisa lebih dari satu juta kali lebih lambat daripada CPU.
Memahami perbedaan kecepatan ini sangat penting untuk memahami prinsip desain dan pertimbangan efisiensi dalam aplikasi komputasi berkinerja tinggi seperti Firedancer. Kecepatan perhitungan CPU menjadi tolok ukur, sementara akses memori, penyimpanan disk, dan jaringan masing-masing menambahkan lapisan penundaan dalam urutan kecepatan yang terus menurun.
Unit Pemrosesan Pusat (CPU)
CPU, atau Unit Pemrosesan Pusat, merupakan fondasi fungsionalitas komputer—CPU adalah otak mesin. CPU menjalankan instruksi perangkat lunak, melakukan perhitungan, dan mengambil keputusan berdasarkan input yang diterimanya. CPU bekerja dengan memproses sinyal biner, yaitu rangkaian nol dan satu. Setiap rangkaian kode biner yang unik berkaitan dengan instruksi tertentu yang ditafsirkan dan dijalankan oleh CPU. Instruksi ini ditangani secara berurutan, dengan CPU menyelesaikan satu operasi sebelum beralih ke operasi berikutnya. Pemrosesan instruksi secara berurutan ini merupakan dasar dari peran CPU serta menentukan caranya melakukan perhitungan kompleks dan mengambil keputusan berdasarkan input yang diterima.
CPU modern sering kali memiliki banyak inti. Artinya, CPU tersebut memuat beberapa unit pemrosesan dalam satu chip yang disebut inti. Setiap inti dapat menjalankan instruksi secara independen sehingga tugas dapat diproses secara paralel. Arsitektur multiinti meningkatkan kemampuan CPU untuk menangani beberapa operasi secara bersamaan, sehingga secara signifikan meningkatkan kinerja secara keseluruhan. Namun, penting untuk diperhatikan bahwa operasi tetap diproses secara berurutan di dalam setiap inti. Hal ini membuat CPU cocok untuk tugas kompleks dan berurutan, tetapi tidak efisien untuk tugas paralel yang lebih sederhana dalam volume besar.
CPU juga memiliki cache, yaitu unit memori kecil berkecepatan tinggi di dalam CPU. Cache ini menyimpan data dan instruksi yang sering diakses, sehingga dapat diambil lebih cepat daripada mengambil data dari RAM. Biasanya terdapat beberapa tingkat cache (L1, L2, L3, dan terkadang L4), masing-masing dengan ukuran dan kecepatan berbeda. Cache L1, yang paling kecil dan cepat, diakses terlebih dahulu. Jika data yang diperlukan tidak ditemukan di sana, CPU akan memeriksa cache L2 yang lebih besar dan sedikit lebih lambat, lalu berlanjut ke tingkat berikutnya. Sistem cache hierarkis ini mengurangi waktu tunggu CPU untuk memperoleh data dari RAM dan meningkatkan kecepatan pemrosesan secara keseluruhan. Penggunaan cache yang efisien berdampak besar bagi aplikasi seperti Firedancer, karena jarak dari CPU ke RAM dapat menghambat kinerja. Hal ini sangat relevan dengan pembahasan kita tentang kecepatan cahaya dan penggunaan FPGA.
Sebagai tambahan, istilah “x86” merujuk pada keluarga CPU yang mengikuti arsitektur tertentu yang awalnya dikembangkan oleh Intel. Arsitektur ini dikenal karena kompatibel dengan beragam perangkat lunak, sebab sebagian besar komputer desktop dan laptop yang dijual didasarkan pada keluarga arsitektur x86.
Unit Pemrosesan Grafis (GPU)
GPU adalah prosesor khusus yang awalnya dikembangkan untuk mempercepat rendering gambar dan video bagi grafis komputer. Fungsi utamanya adalah mengelola dan meningkatkan kinerja grafis, terutama dalam tugas yang memerlukan visual beresolusi tinggi dan perhitungan grafis kompleks, seperti gim video atau pemodelan 3D.
Seiring waktu, GPU telah berkembang melampaui tujuan awalnya. Berkat arsitekturnya, GPU menjadi sangat berharga untuk cakupan tugas pemrosesan data yang lebih luas. Kemampuan pemrosesan paralelnya yang efisien membuat GPU cocok untuk aplikasi yang perlu menangani kumpulan data besar secara bersamaan. Dalam teknologi blockchain, GPU banyak digunakan untuk menambang mata uang kripto. GPU unggul dalam peran ini karena mampu memproses beban kerja paralel dari perhitungan kriptografis secara lebih efisien daripada CPU.
Memori Akses Acak (RAM)
RAM adalah memori jangka pendek komputer yang menyimpan data yang sedang aktif digunakan atau diproses. Di sinilah CPU “mengingat” apa yang sedang dikerjakannya dan menyimpan informasi yang relevan agar dapat diakses dan diproses dengan cepat.
RAM Error-Correcting Code (ECC) mampu mendeteksi dan memperbaiki jenis kerusakan data internal yang umum. Fitur ini sangat penting dalam lingkungan yang mengutamakan keakuratan data, seperti komputasi ilmiah, transaksi keuangan, atau node blockchain. RAM ECC dapat secara otomatis mengidentifikasi dan memperbaiki kesalahan kecil dalam data yang disimpannya. Proses koreksi kesalahan ini dilakukan melalui perangkat keras tambahan dalam modul RAM yang memeriksa data tersimpan.
RAM Non-ECC adalah jenis memori yang lebih umum digunakan pada komputer standar dan perangkat konsumen. Meskipun tidak memiliki kemampuan koreksi kesalahan seperti RAM ECC, RAM ini umumnya lebih cepat dan lebih murah. RAM Non-ECC lebih disukai untuk penggunaan umum karena hemat biaya dan risiko kesalahan data pada komputasi desktop standar relatif rendah.
Penyimpanan Disk
Penyimpanan disk bertanggung jawab atas penyimpanan data jangka panjang, bahkan saat komputer dimatikan. Ada dua jenis utama penyimpanan disk: Hard Disk Drive (HDD) dan Solid State Drive (SSD).
HDD adalah drive disk lama yang menyimpan data pada disk magnetis yang disebut platter. Platter dipasangkan dengan kepala magnetis yang biasanya terpasang pada lengan aktuator bergerak. Kepala baca/tulis pada lengan ini mengakses data saat disk berputar. Sifat mekanis HDD—disk berputar dan kepala bergerak—membuatnya relatif lebih lambat daripada SSD. Namun, HDD menawarkan kapasitas penyimpanan lebih besar dengan harga lebih rendah. Hal ini menjadikannya hemat biaya untuk penyimpanan massal.
Di sisi lain, SSD menggunakan memori flash untuk menyimpan data. Memori flash adalah solusi penyimpanan elektronik nonvolatil yang dapat dihapus dan diprogram ulang. Penggunaan memori flash berarti bahwa, tidak seperti HDD, SSD tidak melibatkan komponen bergerak. Sebaliknya, data disimpan dalam chip memori flash yang saling terhubung. SSD lebih cepat daripada HDD karena dapat mengakses data secara instan tanpa menunggu disk berputar atau kepala baca/tulis menemukan data. Kecepatan ini menjadikan SSD pilihan tepat untuk aplikasi yang memerlukan pengambilan data secara cepat. Namun, kecepatan ini disertai biaya per gigabita yang lebih tinggi daripada HDD.
Ada juga SSD NVMe (Non-Volatile Memory Express). SSD ini dirancang untuk memanfaatkan potensi kecepatannya yang tinggi melalui bus Peripheral Component Interconnect Express (PCIe) komputer. Drive NVMe menawarkan kecepatan yang jauh lebih tinggi dan latensi lebih rendah daripada SSD tradisional. Drive ini ideal untuk beban kerja intensif, seperti perdagangan frekuensi tinggi dan aplikasi blockchain, yang sangat bergantung pada pemrosesan dan pengambilan data secara cepat. Walaupun NVMe dijual dengan harga premium, drive ini mulai menjadi standar untuk komputasi berkinerja tinggi.
Papan Induk
Sumber: Diagram Gigabyte X570 Elite dari postingan Reddit di r/buildapc
Papan induk komputer adalah papan sirkuit besar yang menghubungkan dan memfasilitasi komunikasi di antara berbagai komponen komputer. Komponen tersebut mencakup CPU, GPU, RAM, perangkat penyimpanan, dan perangkat periferal seperti papan ketik dan tetikus.
Papan induk merupakan pusat aktivitas. Komponen ini memastikan setiap komponen lain dapat berkomunikasi secara efektif. Papan induk juga berperan penting dalam distribusi daya dengan menyalurkan listrik dari catu daya ke setiap komponen utama. Papan induk memastikan setiap komponen menerima energi yang sesuai untuk beroperasi.
Papan induk bertanggung jawab mengelola aliran data dalam sistem. Komponen ini mengawasi perutean data dari CPU ke RAM untuk diproses, dari RAM ke perangkat penyimpanan untuk disimpan, dan dari GPU ke output layar untuk rendering visual. Selain itu, papan induk juga menampung BIOS (Basic Input/Output System) sistem. BIOS merupakan bagian penting dalam kontrol dan pemantauan sistem. BIOS menginisialisasi dan menguji perangkat keras komputer saat proses penyalaan. BIOS juga memantau kondisi sistem, termasuk faktor seperti suhu, tegangan, dan kecepatan kipas.
Dalam konteks desain Firedancer, arsitektur papan induk memegang peran penting. Kedekatan CPU dengan RAM sangat memengaruhi kinerja karena jarak yang lebih pendek di antara keduanya meningkatkan kecepatan transfer data. Jarak ini penting bagi aplikasi seperti Firedancer yang memerlukan throughput tinggi dan latensi rendah. Karena itu, arsitektur yang mempertimbangkan NUMA dan potensi penggunaan FPGA selaras dengan kebutuhan Firedancer akan alokasi memori serta efisiensi pemrosesan yang optimal. Kita akan membahas arti dari arsitektur yang mempertimbangkan NUMA dan apa itu FPGA nanti dalam artikel ini.
Sistem Operasi, Mesin Virtual, dan Optimalisasi Tingkat Kernel
Sistem operasi (OS) adalah perangkat lunak inti yang mengelola perangkat keras dan perangkat lunak dalam komputer. Sistem operasi bertindak sebagai perantara yang memfasilitasi interaksi antara pengguna dan perangkat keras komputer. Sistem ini menyediakan antarmuka bagi pengguna untuk berinteraksi dengan sistem serta mengalokasikan dan mengelola sumber daya untuk berbagai aplikasi. Contoh yang populer mencakup Windows, macOS, dan Linux.
Kernel merupakan inti setiap sistem operasi. Kernel adalah komponen penting yang berinteraksi secara langsung dengan perangkat keras sistem. Kernel memiliki kendali penuh atas segala sesuatu di dalam sistem. Kernel mengelola alokasi memori, penjadwalan proses, serta permintaan input/output. Dengan beroperasi pada tingkat rendah ini, kernel memegang peran penting dalam kinerja dan stabilitas sistem.
System Call (Syscall) menjadi antarmuka antara aplikasi pengguna dan kernel. Ketika aplikasi perlu melakukan operasi yang memerlukan akses ke sumber daya sistem (misalnya, membaca berkas atau mengirim data jaringan), aplikasi tersebut membuat syscall. Kernel kemudian menjalankan operasi yang diminta atas nama aplikasi. Mekanisme ini memastikan akses terkontrol ke sumber daya sistem untuk menjaga keamanan dan stabilitas sistem.
Mesin Virtual (VM) adalah emulasi perangkat lunak dari komputer fisik. VM mereplikasi seluruh fungsionalitas komputer fisik dalam lingkungan terisolasi sambil beroperasi di atas hypervisor (yaitu jenis perangkat lunak yang membuat dan mengelola lingkungan virtual pada mesin host). VM menawarkan keunggulan berupa keamanan melalui isolasi, efisiensi sumber daya, serta fleksibilitas untuk pengujian dan pengembangan.
Memahami konsep-konsep ini sangat penting dalam konteks Firedancer. Firedancer menerapkan beberapa optimalisasi tingkat kernel untuk meningkatkan kinerja:
- Alokasi Statis Besar: Firedancer meminimalkan alokasi memori dinamis dengan menggunakan alokasi statis besar (yaitu alokasi memori bersama yang dapat digunakan bersama oleh proses lain). Di sini, memori dialokasikan satu kali dan digunakan kembali, sehingga mengurangi overhead yang terkait dengan alokasi dan dealokasi yang sering dilakukan.
- Melewati Pustaka Standar: Fungsi pustaka standar sering kali menambahkan lapisan abstraksi ekstra dan mungkin kurang efisien untuk operasi tertentu. Firedancer melewati pustaka standar tersebut dan membuat syscall secara langsung. Kita akan membahasnya secara lebih mendalam saat membicarakan arsitektur tile Firedancer dan caranya mengoptimalkan kinerja jaringan.
Firedancer berupaya sebisa mungkin menghindari syscall dan interaksi dengan OS karena operasi ini memperlambat tugas secara signifikan.
Ingress dan Egress
Ingress dan egress adalah istilah yang digunakan untuk menjelaskan aliran data yang masuk dan keluar dari sistem atau jaringan komputer.
Ingress merujuk pada masuknya data ke dalam sistem. Ini adalah istilah umum yang dapat mencakup berbagai aktivitas, seperti menerima data dari Internet, menerima input pengguna, atau mengumpulkan informasi dari sensor pada perangkat IoT (Internet of Things). Untuk sistem jaringan seperti server atau blockchain, ingress melibatkan tugas penting seperti menerima permintaan transaksi, kueri pengguna, atau stream data masuk yang perlu diproses atau disimpan. Penanganan data ingress secara efisien sangat penting bagi responsivitas dan fungsionalitas sistem.
Egress merujuk pada data yang keluar dari sistem. Ini mencakup pengiriman informasi secara online, pembuatan respons terhadap permintaan pengguna, atau pengiriman data yang telah diproses ke sistem lain. Untuk sistem berjaringan, egress mencakup pengiriman transaksi yang telah divalidasi, penyiaran pembaruan blockchain, atau pengiriman data ke lokasi penyimpanan eksternal. Pengelolaan data egress yang tepat sangat penting untuk menyebarkan informasi dengan benar dan memastikan sistem berkomunikasi secara efektif dengan bagian jaringan lainnya.
Pipeline dan Paralelisme Data
Bayangkan pipeline sebagai lini perakitan di pabrik. Pipeline memecah proses kompleks menjadi tahapan berurutan yang lebih kecil. Setiap tahap dalam pipeline menjalankan operasi tertentu. Pendekatan ini sangat efisien untuk tugas pemrosesan berulang atau berkelanjutan, serupa dengan cara blockchain memproses transaksi secara terus-menerus.
Paralelisme data menggunakan pendekatan berbeda dengan memproses beberapa elemen secara bersamaan tetapi independen. Ini ibarat pabrik yang memiliki lebih dari satu lini perakitan untuk memproses data. Pendekatan ini efektif untuk tugas yang dipecah menjadi subtugas yang lebih kecil. Untuk blockchain, khususnya dalam sistem seperti Firedancer, paralelisme data sangat penting untuk menangani transaksi atau tugas pemrosesan data secara bersamaan. Kemampuan pemrosesan paralel Firedancer memaksimalkan throughput komputasi dan mengurangi waktu pemrosesan.
Bayangkan setiap tahap pipeline sebagai stasiun kerja tersendiri di sebuah pabrik. Setiap stasiun kerja mampu beroperasi secara independen dan bersamaan. Artinya, ketika satu tahap memproses sebagian data, tahap berikutnya dapat mengerjakan bagian lainnya secara bersamaan. Pendekatan ini memungkinkan beberapa tahap pipeline aktif pada waktu yang sama, sehingga meningkatkan throughput secara signifikan. Firedancer memadukan efisiensi berurutan dari pipeline dengan kekuatan pemrosesan simultan dari paralelisme untuk memproses transaksi dalam volume besar.
Field-Programmable Gate Array (FPGA)
Field-Programmable Gate Array (FPGA) adalah sirkuit terpadu serbaguna yang dapat diprogram atau dikonfigurasi ulang setelah diproduksi. Sirkuit ini menawarkan tingkat adaptabilitas yang tidak ditemukan dalam komponen perangkat keras tradisional. FPGA terdiri atas kisi besar berisi blok logika terprogram yang saling terhubung, dan setiap blok mampu menjalankan berbagai fungsi digital. Desain ini memungkinkan FPGA menjadi sangat fleksibel dan efisien dalam aplikasi yang sangat mengutamakan kecepatan, pemrosesan paralel, dan adaptabilitas.
FPGA pada umumnya terdiri atas elemen-elemen kecil yang dapat diprogram dan semuanya dihubungkan oleh kabel yang juga dapat diprogram. Jaringan komponen dan koneksi yang rumit ini memungkinkan pengguna memprogram berbagai bagian chip untuk menjalankan tugas tertentu. Hal ini menciptakan lingkungan pemrosesan yang sepenuhnya disesuaikan.
FPGA unggul dalam pemrosesan paralel dengan memanfaatkan elemen-elemen kecil yang dapat diprogram tersebut secara bersamaan. Strukturnya memfasilitasi pipeline yang efisien, tempat data terus dialirkan melalui berbagai tahap pemrosesan. Pipeline yang dirancang dengan baik memisahkan throughput sistem dari latensi. Meskipun pipeline ini mungkin memerlukan waktu lebih lama untuk menghasilkan output dibandingkan CPU konvensional, sistem dapat menangani beberapa stream data input secara bersamaan. Latensi setiap operasi hanya sedikit memengaruhi keseluruhan aliran data, seperti air yang mengalir melalui selang.
Dalam konteks Firedancer, FPGA menawarkan keunggulan signifikan. FPGA dapat menghubungkan pipeline data langsung ke jaringan. FPGA lebih efisien untuk menangani lalu lintas jaringan dibandingkan konfigurasi tradisional yang mengandalkan CPU untuk memindahkan data bagi GPU. Konektivitas langsung dan kemampuan membuat solusi pemrosesan khusus, seperti membangun prosesor lunak pada fabric FPGA, menjadikannya sangat berharga dalam pengembangan klien validator berkinerja tinggi.
Artikel Terkait
Berlangganan Helius
Ikuti perkembangan terbaru dalam pengembangan Solana dan dapatkan pembaruan saat kami memublikasikan postingan


