Ceph: Perjalanan Menuju 1 TiB/s
(ceph.io)- Clyso melakukan uji burn-in sebelum memigrasikan klaster Ceph berbasis HDD ke deployment NVMe 10PB, dan mencapai pembacaan 1.0 TiB/s pada satu klaster dengan 630 OSD
- Perangkat keras final terdiri dari 68 Dell PowerEdge R6615 dengan 10 NVMe per node, tetapi pengujian performa tertinggi dilakukan dengan 63 node yang tersedia dan 630 OSD
- Bottleneck awal diatasi dengan memperbaiki CPU c-state di BIOS, kontensi pemetaan IOMMU di kernel, dan masalah flag kompilasi RocksDB pada paket upstream Ceph Ubuntu Deb; waktu compaction berkurang sekitar 3x dan penulisan acak 4KB meningkat 2x
- Puncak konfigurasi replikasi 3X adalah 4MB read 1025GiB/s, 4MB write 270GiB/s, 4KB random read 25.5M IOPS, dan 4KB random write 4.9M IOPS, sementara erasure coding 6+2 mencatat 4MB read 547GiB/s dan write 387GiB/s
- Risiko yang masih tersisa adalah pada penulisan skala besar, saat sebagian PG masuk ke status active+clean+laggy dan throughput turun drastis; untuk mendapatkan throughput lebih tinggi dengan lebih dari 10 NVMe per node dibutuhkan jaringan 200GbE atau lebih
Desain klaster Ceph NVMe 10PB
- Pelanggan ingin memigrasikan klaster Ceph berbasis HDD yang ada ke deployment NVMe 10PB, tanpa kebutuhan khusus untuk RBD, RGW, atau CephFS
- Syarat desain mencakup distribusi ke 17 rak, ruang 4U per rak, daya, pendinginan, kepadatan, dan preferensi vendor
- Node baru harus diintegrasikan ke klaster yang ada tanpa gangguan layanan, dan jaringannya sudah berupa konfigurasi Ethernet cepat yang telah dibangun
- Usulan awal adalah menempatkan 34 node dual-socket 2U di 17 rak, tetapi pada akhirnya dipilih konfigurasi berbasis Dell yang dirancang Clyso
- Penawaran final sekitar 13% lebih murah daripada konfigurasi awal
- Memori per OSD lebih kecil, tetapi masih sekitar 12GiB per OSD, dan throughput memorinya lebih cepat
- Menggunakan konfigurasi single-socket, total sumber daya CPU lebih besar, total throughput jaringan lebih besar, serta prosesor AMD terbaru dan RAM DDR5
- Dengan node yang lebih kecil, dampak kegagalan node terhadap pemulihan klaster berkurang setengahnya
Perangkat keras dan konfigurasi dasar
- Spesifikasi sistemnya sebagai berikut
- Nodes: 68 × Dell PowerEdge R6615
- CPU: 1 × AMD EPYC 9454P 48C/96T
- Memory: 192GiB DDR5
- Network: 2 × 100GbE Mellanox ConnectX-6
- NVMe: 10 × Dell 15.36TB Enterprise NVMe Read Intensive AG
- OS: Ubuntu 20.04.6 Focal
- Ceph: Quincy v17.2.7 upstream Deb packages
- Pelanggan ingin membatasi konsumsi daya tambahan per rak sekitar 1000~1500W
- Total TDP untuk 4 node per rak diperkirakan minimal 1120W, ditambah daya dasar, puncak CPU, dan inefisiensi catu daya
- Jika perlu, cTDP prosesor dapat diturunkan untuk mengurangi sekitar 100W per rak
- Server Dell 1U memiliki konfigurasi yang mendekati generasi terbaru dari sistem laboratorium performa Ceph upstream
- Selama pengujian ditemukan masalah performa yang tidak ada pada perangkat keras generasi sebelumnya tetapi memengaruhi perangkat keras kali ini
Metode pengujian dan pemilihan benchmark
- Uji burn-in dilakukan dengan mendeploy klaster Ceph sementara menggunakan CBT dan menjalankan pengujian FIO
- Pada OSD disetel
osd_memory_targetsebesar 8GB- Untuk produksi, diperkirakan
osd_memory_targetyang lebih tinggi juga memungkinkan
- Untuk produksi, diperkirakan
- Pelanggan tidak membutuhkan pengujian workload block atau S3, tetapi engine
librbdmilik FIO digunakan alih-alihRADOS benchRADOS benchpada skala besar sulit menentukan jumlah instance yang diperlukan untuk memenuhi kapasitas klaster, dan sebelumnya pernah perlu beberapa pool bersamaan- Untuk dibandingkan dengan hasil lab upstream sebelumnya, digunakan pengujian FIO berbasis librbd yang sama
- FIO juga dipertimbangkan karena merupakan alat yang dikenal luas dan dipercaya
- Pengujian kernel RBD tidak dilakukan
- Engine
librbddapat menghindari masalah mount point lama yang membuat sistem perlu reboot - Klaster ini tidak memiliki akses IPMI, dan tenggat penyelesaian pengujian juga ketat
- Berdasarkan pengujian sebelumnya, bila klien mencukupi maka performa total diperkirakan kurang lebih serupa
- Engine
- Target pengujian mencakup replikasi 3X dan erasure coding 6+2
- msgr V2 diuji baik dalam mode tidak terenkripsi maupun mode secure
ms_client_mode = securems_cluster_mode = securems_service_mode = securems_mon_client_mode = securems_mon_cluster_mode = securems_mon_service_mode = secure
- FIO pertama-tama mengisi volume RBD dengan penulisan besar, lalu menjalankan pengujian IO 4MB dan 4KB masing-masing selama 300 detik
- Pada eksekusi debugging durasinya dipangkas menjadi 60 detik
- Proses latar belakang seperti scrub, deep scrub, autoscaling PG, dan balancing PG dinonaktifkan
Pengaruh jumlah PG terhadap performa
- Pada pengujian lab upstream sebelumnya, dipastikan bahwa jumlah PG dapat sangat memengaruhi performa
- Dengan jumlah PG rendah, clumpiness pada distribusi acak dapat memengaruhi performa, dan sebagian dapat diredakan dengan balancing tambahan
- Pada klaster cepat, kontensi PG lock di dalam OSD juga bisa berperan penting terhadap performa keseluruhan
- Masalah ini sulit diredakan selain dengan menambah jumlah PG
- Bahkan pada pengujian yang hanya memakai 60 OSD, performa random read untuk pool RBD replikasi 3X terus naik hingga 16384 PG
- Write mencapai puncaknya lebih awal, tetapi tetap ada manfaat hingga 2048 PG
- Jumlah PG tinggi tidak boleh diterapkan begitu saja ke produksi
- Default Ceph seperti panjang PG log dan PG stat update dapat berpengaruh
- Praktik lama 100 PG per OSD mungkin perlu ditinjau ulang apakah masih valid
Masalah performa awal dan perilaku aneh
- Login pertama ke perangkat keras baru baru bisa dilakukan pada pekan setelah Thanksgiving di AS, dan rencananya semula adalah validasi burn-in 1~2 minggu sebelum integrasi ke klaster lama
- Pengujian performa level rendah awalnya tampak bagus
- Pengujian jaringan iperf mendekati 200Gb/s per node
- Performa dasar beberapa drive NVMe pada sebagian node juga tampak wajar
- Sistem operasi pada seluruh 68 node ternyata salah dideploy ke 2 drive OSD, bukan ke drive boot internal Dell BOSS m.2
- Akibatnya, alih-alih pengujian 3 node 30 OSD seperti rencana, pengujian dilakukan hanya dengan 8 NVMe per node
- Hasil Ceph pertama jauh di bawah harapan, bahkan setelah mempertimbangkan berkurangnya jumlah OSD
- Hanya random read yang mendekati tingkat yang masih bisa diterima, tetapi tetap belum cukup
- Saat dipersempit ke pengujian satu node dan satu OSD, muncul pola tidak normal
- Sistem yang bekerja baik pada pengujian satu OSD menjadi lambat setelah pengujian 8 OSD
- Setelah itu, pengujian satu OSD pun tetap buruk selama beberapa jam sebelum pulih
- Jika tidak diberi pengujian multi-OSD, performa tetap tinggi
- Saat FIO dijalankan langsung pada drive, masalah yang sama tidak muncul kembali
- Selama pengujian 8 OSD, satu OSD tertentu menggunakan CPU jauh lebih banyak daripada OSD lain
- Profil wallclock OSD menunjukkan banyak waktu dihabiskan pada
io_submit, pola yang biasanya muncul saat antrean drive penuh dan kernel mengalami blocking
Tiga perbaikan
-
Mode performa BIOS dan c-state
- Perbaikan pertama adalah BIOS ternyata tidak berada pada mode maximum performance, sehingga CPU c-state aktif
- Ceph sangat sensitif terhadap latensi yang ditimbulkan perpindahan CPU c-state
- Setelah c-state dinonaktifkan melalui mode maximum performance, performa meningkat 10~20%, tetapi masih belum cukup untuk mencapai target
-
Kontensi IOMMU
- Masalah kedua terlihat dari perf profile di sisi kernel
- Pada eksekusi buruk, banyak waktu habis di
native_queued_spin_lock_slowpathdan jalur pemetaan DMA IOMMU alloc_iovaiommu_dma_alloc_iovaiommu_dma_map_sgnvme_map_datanvme_queue_rq- Setelah IOMMU dinonaktifkan di kernel, performa 4MB read/write pada pengujian 8 node meningkat signifikan
- Namun setelah perbaikan ini, masalah random write 4KB masih tersisa
-
Flag kompilasi RocksDB
- Masalah ketiga adalah performa random write 4KB dan compaction RocksDB yang lebih rendah dari perkiraan
- Pada Ceph sebelumnya, gejala serupa terkait dengan dua penyebab
- Kompilasi tanpa dukungan TCMalloc
- Kompilasi tanpa flag cmake yang tepat dan optimasi compiler yang sesuai
- Paket Ceph Ubuntu upstream memang menyertakan TCMalloc
- Dari build log paket Ubuntu 17.2.7 terkonfirmasi bahwa RocksDB tidak dibangun dengan flag kompilasi yang benar
- Canonical dan Gentoo sudah memperbaiki masalah ini di build mereka sendiri
- Pengguna cephadm Debian/Ubuntu yang memakai container upstream tampaknya tidak terdampak
- Setelah membangun paket custom 17.2.7 yang sudah diperbaiki, waktu compaction turun sekitar 3x dan performa random write 4KB naik 2x
Pengujian skala besar pada pekan pertama 2024
- Pada 2 Januari, pengujian performa tertunda karena harus menangani gangguan besar pada klaster lain yang terkait
- Mulai hari Jumat, CBT dan pengujian dikonfigurasi ulang, dan kali ini semua 10 drive per node bisa digunakan
- Jumlah klien FIO ditambah hingga rata-rata menjadi sekitar 1 klien FIO dengan
io_depth128 per OSD - Pengujian 3 node mencatat 63GiB/s untuk random read 4MB
- Pengujian 10 node mencatat 213.5GiB/s
- Ini hampir skala linear dibanding 3 node, sekitar 98.4%
- Saat itu hanya 63 dari 68 node yang bisa dipakai
- 32 node, 320 OSD diletakkan di satu sisi
- Pada 31 node klien dijalankan 10 proses FIO per node
- Pada skala 320 OSD, dicapai 635GiB/s read dan lebih dari 15 juta IOPS random read 4KB
- Rata-rata latensi dan tail latency konsisten selama pengujian skala besar
- Diperkirakan karena jumlah PG dan klien FIO ditingkatkan seiring bertambahnya OSD
- Pengujian berada pada kondisi IO yang sangat tinggi, dan diperkirakan sudah mencapai titik saat menambah IO lagi tidak menaikkan performa, hanya menaikkan latensi
Mencapai 1 TiB/s pada 630 OSD
- Karena tidak ada lagi node klien terpisah untuk pengujian kapasitas penuh, proses FIO ditempatkan bersama node OSD
- Ada kemungkinan 1/63 klien berkomunikasi dengan OSD lokal sehingga memberi sedikit keuntungan jaringan
- Sebaliknya, menempatkan klien FIO bersama node OSD juga bisa menurunkan performa
- Deployment CBT untuk 630 OSD pada 63 node memakan waktu sekitar 15 menit
- Percobaan pertama mencapai sekitar 950GiB/s, sangat dekat dengan 1 TiB/s
- Setelah itu jumlah OSD shard dan async messenger thread dikurangi, dan tuning Reef RocksDB diterapkan
- Performa read sedikit turun, tetapi performa write membaik
- Performa random write meningkat hampir 20%
- Dampak yang lebih besar tampaknya berasal dari perubahan shard/thread
- Juga dilakukan eksperimen dengan menggandakan jumlah PG dan kembali menaikkan jumlah klien
- Random read 4MB sedikit membaik seiring bertambahnya jumlah klien
- IOPS random read kecil justru memburuk
- Pada 8 FIO per node, total 504 proses, performa sequential write turun tajam
- Saat 504 proses FIO menjalankan write 4MB, sebagian PG masuk ke status active+clean+laggy
- Seiring waktu, jumlah PG laggy bertambah walau throughput hanya sebagian dari performa yang seharusnya mampu dicapai klaster
- Hingga workload selesai, klaster tidak pulih dari kondisi tersebut
- Menurut dokumentasi Ceph, dalam status laggy, replica gagal mengakui lease baru dari primary tepat waktu sehingga IO berhenti sementara
- Pada akhirnya, konfigurasi default Ceph yaitu 8 shard, 2 thread per shard, dan 3 msgr thread paling cocok untuk read 4MB
- Dengan 256K PG, 630 OSD, dan 504 proses klien FIO,
ceph -smenampilkan 1.0 TiB/s read- Seluruh 630 OSD berada dalam status up/in
- Semua 262145 PG berada dalam status active+clean
- Operasi read yang ditampilkan adalah 266.15k op/s
Hasil erasure coding 6+2
- Klaster tujuan migrasi aktual pelanggan memakai konfigurasi erasure coding 6+2, sehingga perlu pengujian terpisah
- Untuk pengujian EC, dipilih nilai PG, shard, dan klien yang bekerja baik pada pengujian sebelumnya
- Karena async messenger thread terlihat sibuk, dilakukan percobaan menambah jumlahnya melebihi default
- Pada 4~5 async msgr thread, performa berikut dicapai
- Read: lebih dari 500GiB/s
- Write: hampir 400GiB/s
- Alasan read 6+2 EC lebih lambat daripada replikasi 3X adalah perbedaan overhead jaringan
- Pada replikasi, primary OSD cukup membaca data lokal dan mengirimkannya ke klien, sehingga overhead jaringan praktis 1X
- Pada 6+2 EC, primary harus membaca 5 dari 6 chunk dari replica untuk menyusun object, lalu mengirimkannya ke klien
- Total overhead jaringan permintaan kira-kira
(1 + 5/6)X
- Pada write, polanya justru terbalik
- Pada replikasi 3X, object yang dikirim klien ke primary diteruskan lagi oleh primary ke dua secondary, sehingga total overhead jaringan 3X
- Pada EC, hanya perlu mengirim 7/8 chunk ke secondary, sehingga untuk write besar performanya lebih cepat
- IOPS untuk IO kecil adalah persoalan berbeda
- Pada read/write yang sangat kecil, Ceph mengakses semua OSD yang berpartisipasi dalam PG object tersebut
- Walaupun data yang dibutuhkan hanya ada pada satu chunk, data tetap diambil dari semua OSD yang ikut dalam stripe
- Clyso menghidupkan kembali PR untuk partial stripe reads pada erasure coding yang mereka implementasikan pada musim panas 2023, dan hasilnya besar
- Belum jelas apakah ini dapat di-merge ke Squid
Dampak enkripsi msgr
- Untuk memperkirakan dampak jika pelanggan memakai enkripsi tingkat msgr, dilakukan juga pengujian msgr v2 encryption
- Hasil saat enkripsi diaktifkan dibandingkan dengan hasil sebelumnya baik pada replikasi 3X maupun erasure coding 6+2
- Dampak terbesar muncul pada read besar
- Turun dari sekitar 1 TiB/s menjadi sekitar 750GiB/s
- Item lain menunjukkan penurunan performa yang lebih ringan tetapi konsisten
- Pengujian scaling PG dan pengujian kernel RBD juga diinginkan, tetapi sistem harus dikembalikan ke pelanggan untuk proses re-imaging dan integrasi
Ringkasan performa puncak akhir
- Angka tertinggi yang dicapai dalam pengujian adalah sebagai berikut
| Item | 30 OSDs (3x) | 100 OSDs (3x) | 320 OSDs (3x) | 630 OSDs (3x) | 630 OSDs (EC62) |
|---|---|---|---|---|---|
| Co-located FIO | No | No | No | Yes | Yes |
| 4MB Read | 63 GiB/s | 214 GiB/s | 635 GiB/s | 1025 GiB/s | 547 GiB/s |
| 4MB Write | 15 GiB/s | 46 GiB/s | 133 GiB/s | 270 GiB/s | 387 GiB/s |
| 4KB Rand Read | 1.9M IOPS | 5.8M IOPS | 16.6M IOPS | 25.5M IOPS | 3.4M IOPS |
| 4KB Rand Write | 248K IOPS | 745K IOPS | 2.4M IOPS | 4.9M IOPS | 936K IOPS |
- Setelah pengujian selesai, seluruh perangkat keras di-reimage, dan OSD baru dideploy ke klaster HDD pelanggan yang sudah ada
- Migrasi dikendalikan dengan upmap-remapped script milik Dan, dan sekitar 80% data lama dipindahkan ke OSD berbasis NVMe
- Pada awalnya diputuskan untuk tidak langsung memakai semua tuning dari pengujian, melainkan terlebih dahulu memastikan operasi klaster pada sebagian besar konfigurasi default
- Data pengujian ini nantinya dapat digunakan untuk tuning tambahan jika pelanggan mengalami masalah performa
Tantangan yang tersisa dan batas skalabilitas
- Masalah laggy PG yang muncul pada beban write skala besar masih perlu diselesaikan
- Tidak dapat diterima jika Ceph kolaps ketika workload write membesar
- Pengujian ini menegaskan bahwa Ceph dapat memenuhi kapasitas 2×100GbE NIC
- Untuk menaikkan throughput lebih jauh saat menggunakan lebih dari 10 drive NVMe per node, dibutuhkan 200GbE atau lebih
- IOPS lebih kompleks
- Jumlah PG bisa sangat berpengaruh
- Model threading OSD juga memainkan peran penting
- Pada berbagai deployment, sering terbentur batas sekitar 400K~600K random read IOPS per node
- Sebagai titik perbaikan, disorot antarmuka async msgr dengan kernel, serta cara thread OSD dibangunkan saat pekerjaan baru masuk ke shard queue
- Pernah dilakukan modifikasi pada kode OSD untuk hasil yang lebih baik di bawah beban tinggi, tetapi dengan konsekuensi latensi beban rendah menjadi lebih buruk
- Peningkatan IOPS memerlukan pendekatan dari beberapa arah dan kemungkinan penulisan ulang sebagian kode threading OSD
1 komentar
Pendapat di Hacker News
Ceph punya sejarah yang menarik
Para pendiri DreamHost membuatnya karena kebutuhan internal, dan DreamHost pada dasarnya sudah menjalankan layanan seperti VPS, OS/database/server aplikasi terkelola, sebelum istilah IaaS dan PaaS mapan di industri
Setelah itu Ceph dipisahkan menjadi perusahaan sendiri dan diakuisisi oleh Red Hat
https://en.wikipedia.org/wiki/DreamHost
Itu masa ketika belum ada kalimat pemasaran yang dipoles untuk menjual setiap kalimat; mereka sekadar membagikan sesuatu yang sedang mereka utak-atik
Seingat saya, itu adalah proyek kuliah salah satu pendirinya, lalu para pendiri lain ikut mendukungnya; saya juga tahu Docker punya asal-usul yang mirip
UCSC adalah tempat yang menghasilkan banyak riset storage bagus
Artikel yang bagus. CERN juga baru-baru ini mencapai 1TB/s, tetapi bukan dengan Ceph, melainkan dengan EOS(https://cern.ch/eos)
https://www.home.cern/news/news/computing/exabyte-disk-stora...
Namun klaster EOS kami memiliki jauh lebih banyak node dan sebagian besar memakai HDD. CERN juga menggunakan Ceph secara luas
Saya benar-benar menyukai eksperimen seperti ini. Saat bekerja sebagai tech lead di Cisco, saya punya kemewahan untuk menyusun Kubernetes di bare metal, lalu menyiapkan GlusterFS dan Ceph sendiri agar bisa mempelajari serta membandingkan mana yang lebih baik
Seingat saya itu sekitar 2017/2018, masa yang menyenangkan. Artikel ini juga sangat bagus
Sebagian NVMe SSD sudah lebih banyak dipakai daripada yang lain sehingga ada perbedaan, dan itu benar-benar pekerjaan yang tidak masuk akal
Saya berharap ada yang mencoba mengecilkan skala node lebih jauh. Sistem yang dijelaskan di sini memakai 10 disk per node dengan sekitar 300W/node, jadi kira-kira 30W per disk
Overhead-nya cukup besar, dan untuk mendapat sedikit saja redundansi juga butuh ruang penyimpanan yang cukup banyak
Dengan sedikit rekayasa, rasanya keseluruhan bisa diperkecil menjadi sepersepuluh. Misalnya membuat komputer single-board kecil dengan 4 lane PCIe untuk NVMe, 2x10GbE(2 soket SFP+), CPU ARM atau RISC-V yang cukup cepat, lalu menambahkan eMMC atau slot SD untuk boot
Dengan begitu skalanya bisa diturunkan hingga hanya beberapa node, dan paparan risiko satu kegagalan yang sekaligus menghilangkan 10 disk juga berkurang
Sepertinya banyak sistem seperti ini bisa dimasukkan ke enclosure 4U, dan secara opsional bisa juga memasukkan 2 switch yang sepenuhnya independen di enclosure yang sama untuk mengagregasi node internal
Karena prosesornya armhf, instalasinya benar-benar menyakitkan, tapi setelah mulai berjalan, semuanya bekerja dengan baik. Hanya saja lambat karena NIC 1Gb tunggal
Saat itu tujuannya hanya untuk belajar
[0] https://www.hardkernel.com/shop/odroid-hc2-home-cloud-two/
Saya akan segera menerima dua ARM Turing RK1 7W, masing-masing menghasilkan 4GB/s lewat PCIe 3x4, dan papan klaster Turing Pi 2 bisa memasang 4 modul dalam form factor ITX
Dengan total biaya 820 dolar, saya berharap mendapat lebih dari 3Gbps per watt
Sejauh ini bottleneck-nya ada pada lane PCIe. SSD 2TB seharga 90 dolar pun tertulis 7GB/s di PCIe 4x4, jadi saya belum melihat single-board computer sebagai solusi optimal
Lini Ampere Altra tampaknya mendukung PCIe 4x128 pada 40W, jadi blade 1U dengan jaringan 100G bisa menarik
Namun, bahkan di homelab pun saya melihat banyak bug terkait ARM dan optimasi yang hilang, jadi mungkin sulit mengatakan solusi seperti ini sudah siap untuk datacenter
Untuk membenarkan konfigurasi Ceph dengan antarmuka 10Gbps saat ini, ukurannya harus benar-benar kecil dan sangat murah
Pada skala sekecil itu, kemungkinan lebih baik menaruh penyimpanan NVMe lokal di tiap server
Perhitungan kasarnya seperti 1TB/s × 8 bit/byte × 1024GB/TB ÷ 34 node ÷ 300W
Sistem ARM yang sangat efisien seperti Mac mini baru memakai sekitar 10W dalam penggunaan interaktif dan bisa menangani jaringan 10Gbps, jadi kira-kira 1Gbps per watt dari sisi data
Artinya, secara kasar klaster di artikel asli berada pada tingkat bit/detik/watt yang mirip dengan sistem ARM yang sangat efisien
Saya tidak yakin memakai node kecil akan benar-benar meningkatkan efisiensi, malah mungkin lebih mahal. Performa per watt server kuat zaman sekarang cukup bagus
Bagaimanapun, ini adalah perangkat lunak open-source yang berjalan di hardware umum, jadi orang bisa mencobanya sendiri dengan beberapa ratus dolar
Jika sistem operasi dan perangkat NVMe berjauhan, kontroler harus menebak maksud request lalu menangani batching dan wear leveling sebaik mungkin, sehingga secara alami muncul inefisiensi
Fitur baru FDP(flexible data placement) adalah upaya untuk mengatasi ini dengan memberi sistem operasi lebih banyak kendali
Yang terbaik adalah menariknya ke sisi sistem operasi host, dan mengekspos flash semirip mungkin dengan “array transistor bodoh berukuran raksasa yang terpasang sebagai perangkat PCIe”
Jika lapisan abstraksi dihilangkan, rasanya kita bisa menyusun unit hardware seperti Atom yang punya NIC 100Gbps terintegrasi dan jumlah flash yang sebanding untuk mendapatkan paralelisme sistem yang diinginkan
Pasti pernah ada satu titik dalam sejarah ketika total data digital yang tersimpan di seluruh dunia pertama kali mencapai 1TiB
Hari itu hampir pasti terjadi dalam 60 tahun terakhir
Namun sekarang, sebuah server milik organisasi yang cukup acak memindahkan data sebanyak itu setiap detik. Padahal bukan negara atau proyek riset supranasional
Artikel yang menarik. Kami menjalankan klaster storage Ceph untuk mempertahankan cache layer Docker
Setelah pindah dari EBS ke Ceph, perbedaan throughput-nya sangat besar. Throughput tulis naik dari 146MB/s dan 3.000 IOPS menjadi 900MB/s dan 30.000 IOPS
Bagian terbaiknya adalah ini hampir langsung bekerja begitu saja. Selain sesekali hal seperti filesystem trim, nyaris tidak perlu dirawat
Ini peningkatan besar untuk sistem cache
[0] https://depot.dev/blog/cache-v2-faster-builds
Pada akhirnya kami pindah ke rack sendiri dan memangkas biaya lagi hampir menjadi sepersepuluh, lalu menjadi lebih bebas karena punya kapabilitas operasional internal
Dari blognya saja tidak langsung jelas
Masalah terburuk yang saya alami dengan dynamic storage internal klaster bukanlah masalah I/O murni
Masalahnya lebih pada software storage controller Kubernetes yang tidak menangani masalah dunia nyata dengan baik, misalnya ketika pod mati dan PVC tidak ter-attach sampai timeout yang sangat panjang selesai, sementara pod tetap berada dalam status ContainerCreating sampai kunci PVC dilepas
Hal semacam ini terjadi di beberapa klaster yang memakai rook/ceph dan Longhorn
Saya penasaran apakah ada yang pernah menjalankan Ceph di homelab. Terakhir kali saya melihatnya, kebutuhan hardware-nya cukup besar
Saat berjalan dengan baik, hasilnya luar biasa, tetapi begitu ada masalah, bisa menjadi sumber sakit kepala besar
Kalau memang tertarik pada distributed storage itu sendiri, ada pilihan yang lebih baik untuk konfigurasi homelab
seaweedfs selama bertahun-tahun sangat stabil baik di skala kecil maupun sangat besar, dan kami benar-benar memindahkan konfigurasi Ceph produksi ke sana
Saat berada di dunia Kubernetes, Longhorn juga stabil
GlusterFS juga masih oke jika sejak awal tahu apa yang harus ditanggung
Namun sangat sulit mendapatkan performa yang layak, dan di cluster kecil metadata daemon bisa cukup mudah berhenti
Akhirnya, setelah tidak terasa menyenangkan lagi, saya kembali ke ZFS di satu mesin
Pertama-tama, perlu diingat bahwa Ceph adalah sistem storage terdistribusi, jadi asumsi dasarnya adalah memakai beberapa node
Untuk belajar, semuanya bisa divirtualisasi di satu mesin, tetapi akan jauh lebih baik jika ada mesin fisik terpisah
Seperti ZFS, Ceph lebih menyukai akses fisik langsung ke disk
Selain itu, dibutuhkan koneksi jaringan yang cukup baik. Menurut saya, inilah bagian yang biasanya terbayang orang ketika memikirkan kebutuhan hardware Ceph yang tinggi
Idealnya minimal 10GbE, dan jika menginginkan performa lebih tinggi, dibutuhkan lebih dari itu. Khususnya untuk pekerjaan seperti backfill, traffic jaringan bisa sangat besar
Jika bisa mendapatkan perangkat homelab dengan murah, 25Gbps juga bagus; 50Gbps secara teknis mendekati jalan buntu, sedangkan 100Gbps bekerja dengan baik
Meski begitu, untuk homelab, mini PC murah atau NUC dengan 10GbE pun sudah cukup berjalan, dengan performa yang dapat diterima dan manfaat belajar yang memadai
Ceph bisa dipasang langsung di bare metal, atau jika ingin menempuh jalur Kubernetes di homelab, bisa memakai Rook(https://rook.io/)
Semoga membantu, dan kalau ada pertanyaan tambahan, silakan beri tahu
Pada level itu, jelas sulit disebut hardware besar
[1] https://ceph.io/en/news/blog/2022/install-ceph-in-a-raspberr...
Minimal 10Gb, sebaiknya 40Gb atau lebih, dan jika memakai disk berputar, ada baiknya beberapa node masing-masing memiliki setidaknya 6 disk
Jika semuanya SSD, kemungkinan besar jumlah disk per node bisa jauh lebih sedikit
Saya menghitungnya karena ingin melihat bagaimana 1 TiB/s dibandingkan dengan batas teoretis perangkat keras sebenarnya
Klaster ini terdiri dari 68 node, dan tiap node adalah Dell PowerEdge R6615(https://www.delltechnologies.com/asset/en-us/products/server...)
Konfigurasi yang dipakai adalah R6615 dengan 10 bay drive U.2, dan link U.2 mentransfer data melalui 4 lane PCIe generasi ke-4. Satu lane PCIe adalah 16 Gbit/s, dan berkat encoding 128b-132b overhead-nya sekitar 3%, jadi bisa diabaikan
Jadi bandwidth link maksimum untuk satu link U.2 adalah 16×4=64 Gbit/s, atau 8 Gbyte/s. Namun drive U.2 NVMe yang digunakan, Dell 15.36TB Enterprise NVMe Read Intensive AG, tampaknya punya throughput baca 7 Gbyte/s(https://www.serversupply.com/SSD%20W-TRAY/NVMe/15.36TB/DELL/...), jadi link U.2 8 Gbyte/s bukan bottleneck
Karena ada 10 drive U.2 per node, tiap node bisa menghasilkan I/O baca lokal hingga 10×7=70 Gbyte/s
Namun bandwidth jaringan tiap node hanya 200 Gbit/s (2×100GbE Mellanox ConnectX-6), yaitu 25 Gbyte/s. Artinya pada pembacaan jarak jauh, kemampuan drive 70 Gbyte/s tidak bisa dimanfaatkan penuh dan jaringan menjadi bottleneck
Dengan asumsi tidak ada bottleneck jaringan tambahan, 68 node dapat menyediakan pembacaan lewat jaringan sebesar 68×25=1700 Gbyte/s. Penulis sebenarnya membenchmark 1 TiB/s, tepatnya 1025 GiB/s=1101 Gbyte/s, jadi sekitar 65% dari maksimum teoretis 1700 Gbyte/s
Ini cukup bagus, tetapi jika semua node bisa sepenuhnya memenuhi link jaringan 200 Gbit/s secara bersamaan, secara teori masih bisa sedikit lebih baik
Saat membaca keseluruhan artikel, saya mendapat kesan bahwa kompleksitas Ceph memberi beban cukup besar pada CPU. Cukup mengejutkan bahwa hanya karena modul tidak dikompilasi dengan -O2 (“Fix Three” yang ditautkan penulis: https://bugs.launchpad.net/ubuntu/+source/ceph/+bug/1894453), pada workload I/O murni “sebagian workload bisa menjadi hingga 5 kali lebih lambat”(https://bugs.gentoo.org/733316)
Aneh juga melihat thread OSD membuang CPU secara berlebihan karena memegang spinlock IOMMU. Saya setuju dengan kesimpulan bahwa model threading OSD tidak optimal
Benchmark sintetis 100% baca yang relatif sederhana seharusnya tidak sampai memunculkan kontensi threading. Kalau bagian arsitektur perangkat lunak Ceph itu dirancang dengan baik. Ini masalah yang bisa diperbaiki, jadi saya berharap para developer Ceph menaikkan prioritasnya
Di lab Ceph upstream ada perangkat generasi sebelumnya dari sasis 1U Dell yang sama dengan prosesor AMD Rome, dan pada skala serupa, sekitar 30 OSD, perangkat itu menghasilkan performa mirip tanpa mengalami masalah ini
Pelanggan mengatakan mereka pernah melihat masalah ini sebelumnya di data center mereka, dan berharap bisa menemukan penyebabnya bersama AMD
Musim panas lalu saya sempat melakukan sedikit pekerjaan untuk memperkuat sementara model threading lama OSD. Misalnya double buffering handoff antara async msgr dan thread pekerja, serta adaptive thread wakeup
Dalam kondisi berbeban, ini bisa sangat meningkatkan performa dan efisiensi, tetapi ada konsekuensi berupa latensi yang meningkat pada beban rendah. Secara default, Ceph sangat agresif membangunkan thread ketika ada I/O baru masuk ke shard tertentu
Saya berdiskusi dengan satu developer inti lain, dan kami berdua menyimpulkan bahwa perombakan total kode threading lebih masuk akal
Dengan 320 OSD, hasilnya sekitar 1,6 TiB/s
Setidaknya itu angka yang saya temukan. Memang tidak banyak ulasan disk NVMe enterprise seperti ini
Meski begitu, angkanya tampak cocok dengan NIC. Pada skala ini, sebagian besar workload kemungkinan terlihat seperti I/O acak di lapisan storage
Yang mengejutkan adalah mengapa memilih node 1U, yang lebih sulit didinginkan, dengan konfigurasi 10 SSD/2×100Gb NIC
Jika memakai node 2U dengan 24 SSD dan 2×200Gb atau 400Gb NIC, bottleneck jaringan bisa dihilangkan, dan konsumsi daya juga bisa dikurangi berkat kipas yang lebih besar dan lebih lambat serta jumlah paket CPU yang lebih sedikit. Jumlah core per soket juga bisa saja lebih banyak
Jika jumlah node berkurang, dampak kegagalan memang menjadi lebih besar, tetapi sekitar 34 node sepertinya bukan masalah yang terlalu besar
Dengan node yang lebih sedikit, mungkin juga bisa membangun jaringan yang lebih datar dengan sekitar 4 switch
Rak dan switch sudah ada dan juga banyak digunakan untuk tujuan lain, jadi ruang fisik tambahan karena Ceph sangat kecil :)