Insinyur Facebook telah membangun dan membuat open source alat waktu komputasi terbuka, komponen penting dari infrastruktur pengaturan waktu modern. Untuk memungkinkan hal ini, kami membuat kartu waktu — kartu PCI Express (PCIe) yang dapat mengubah hampir semua server komoditas menjadi alat waktu. Dengan bantuan komunitas OCP, kami mendirikan Open Compute Time Appliance Project dan open-source setiap aspek Open Time Server. Artikel ini menguraikan perkembangan kartu waktu.
Pada bulan Maret 2020, kami mengumumkan bahwa kami sedang dalam proses peralihan server di pusat data kami (bersama dengan produk konsumen kami) ke layanan ketepatan waktu baru berdasarkan Network Time Protocol (NTP). Layanan baru, yang dibangun secara internal dan kemudian bersumber terbuka, lebih skalabel dan meningkatkan akurasi ketepatan waktu dalam infrastruktur Facebook dari 10 milidetik menjadi 100 mikrodetik. Pengaturan waktu yang lebih akurat memungkinkan pengelolaan infrastruktur yang lebih canggih di seluruh pusat data kami, serta kinerja database terdistribusi yang lebih cepat.
Arsitektur waktu berbasis NTP yang baru menggunakan Stratum 1 — komponen penting yang secara langsung terkait dengan sumber waktu yang berwenang, seperti Sistem Satelit Navigasi Global (GNSS) atau jam sesium, seperti yang ditunjukkan di bawah ini:
Banyak perusahaan mengandalkan kumpulan NTP publik seperti time.facebook.com untuk bertindak sebagai Stratum 1. Namun, pendekatan ini memiliki kekurangan. Kumpulan ini menambah ketergantungan pada konektivitas internet dan dapat memengaruhi keamanan dan keandalan sistem secara keseluruhan. Misalnya, jika konektivitas hilang atau layanan eksternal tidak aktif, hal itu dapat mengakibatkan pemadaman atau penyimpangan waktu untuk sistem yang bergantung.
Untuk menghapus dependensi ini, kami telah membuat perangkat keras khusus baru yang disebut alat waktu, yang terdiri dari penerima GNSS dan jam atom mini (MAC). Pengguna peralatan waktu dapat menyimpan waktu yang akurat, bahkan jika konektivitas GNSS terputus. Saat membuat alat waktu, kami juga menemukan kartu waktu, kartu PCIe yang dapat mengubah server komoditas apa pun menjadi alat waktu.
Mengapa perlu alat waktu baru?
Peralatan waktu yang siap pakai memiliki kelebihannya sendiri. Mereka bekerja langsung dari kotak dan karena banyak dari perangkat ini telah ada di pasaran selama beberapa dekade, mereka telah diuji dalam pertempuran dan umumnya cukup stabil untuk bekerja tanpa pengawasan untuk waktu yang lama.
Namun, solusi ini juga disertai dengan kompromi:
Dalam kebanyakan kasus, mereka sudah usang dan sering kali rentan terhadap masalah keamanan perangkat lunak. Permintaan fitur dan perbaikan keamanan mungkin membutuhkan waktu berbulan-bulan atau bahkan bertahun-tahun untuk diterapkan.
Perangkat ini dilengkapi dengan perangkat lunak sumber tertutup, yang membuat konfigurasi dan pemantauannya menjadi terbatas dan menantang. Meskipun konfigurasi dilakukan secara manual melalui CLI atau UI web berpemilik, pemantauan sering kali menggunakan SNMP, protokol yang tidak dirancang untuk tujuan ini.
Termasuk perangkat keras berpemilik yang tidak dapat diservis oleh pengguna. Ketika satu komponen rusak, tidak ada cara mudah untuk menggantinya. Anda harus mengirimkannya ke vendor untuk diperbaiki atau membeli peralatan baru.
Karena perangkat siap pakai dibuat dalam jumlah rendah, perangkat ini memiliki markup yang lebih tinggi dan dapat menjadi sangat mahal untuk dioperasikan dari waktu ke waktu. Biaya tinggi yang terkait dengan perangkat siap pakai menciptakan keterbatasan bagi banyak orang di industri ini. Versi sumber terbuka akan membuka pintu ke aplikasi yang lebih luas.
Sampai saat ini, perusahaan harus menerima pertukaran ini dan bekerja dalam batasan yang dijelaskan di atas. Kami memutuskan sudah waktunya untuk mencoba sesuatu yang berbeda, jadi kami melihat dengan serius apa yang diperlukan untuk membuat alat waktu baru — khususnya, yang menggunakan arsitektur x86.
Membuat prototipe alat waktu
Berikut adalah diagram blok dari apa yang kami bayangkan:
Semuanya dimulai dari penerima GNSS yang menyediakan waktu hari (ToD) serta satu pulsa per detik (PPS). Ketika penerima didukung oleh osilator stabilitas tinggi (misalnya, jam atom atau osilator kristal yang dikendalikan oven), ia dapat menyediakan waktu yang akurat dalam nanodetik. Waktu dikirimkan melalui jaringan melalui kartu jaringan siap pakai yang mendukung masuk/keluar PPS dan cap waktu paket perangkat keras, seperti NVIDIA Mellanox ConnectX-6 Dx yang digunakan pada peralatan awal kami.
Keluaran GPSDO dimasukkan ke dalam cap waktu EXT dari kartu jaringan ConnectX-6 Dx. Selain itu, penerima GNSS menyediakan ToD melalui port serial dan protokol pelaporan GPS populer yang disebut NMEA. Menggunakan alat ts2phc memungkinkan kami untuk menyinkronkan jam perangkat keras fisik NIC hingga beberapa puluh nanodetik, seperti yang ditunjukkan di bawah ini:
Prototipe kami memberi kami keyakinan bahwa membangun alat seperti itu adalah mungkin. Namun, ada banyak ruang untuk perbaikan.
Untuk meningkatkan keandalan sistem, kami membaginya menjadi dua bagian utama:muatan dan pengiriman. Payload adalah waktu presisi yang pada dasarnya merupakan sistem interpolasi yang digerakkan oleh osilator lokal untuk membuat pengukuran waktu nanodetik antara sinyal PPS berurutan yang diterima oleh penerima GNSS. Kami mempertimbangkan untuk menempatkan penerima GNSS, osilator lokal berstabilitas tinggi, dan logika pemrosesan yang diperlukan ke dalam faktor bentuk PCIe, dan kami menyebutnya kartu waktu (lihat di bawah).
Berikut adalah sketsa kartu waktu yang awalnya kami bayangkan di atas serbet:
Kami menggunakan MAC onboard, penerima GNSS multiband, dan FPGA untuk mengimplementasikan mesin waktu. Tugas mesin waktu adalah menginterpolasi dalam nanodetik granularitas yang diperlukan antara sinyal PPS yang berurutan. Penerima GNSS juga menyediakan ToD selain sinyal 1 PPS. Dalam hal hilangnya penerimaan GNSS, mesin waktu bergantung pada sinkronisasi berkelanjutan dari jam atom berdasarkan ansambel rata-rata pulsa PPS berturut-turut.
Mesin waktu terdiri dari satu set blok pemrosesan yang diterapkan pada FPGA kartu waktu. Blok pemrosesan ini mencakup berbagai pemfilteran, sinkronisasi, pengecekan kesalahan, time-stamping, dan subsistem terkait PCIe untuk memungkinkan kartu waktu berfungsi sebagai periferal sistem yang menyediakan waktu presisi untuk server waktu terbuka.
Perlu dicatat bahwa akurasi penerima GNSS berada dalam puluhan nanodetik, sedangkan sinkronisasi (kalibrasi) MAC yang sedang berlangsung yang diperlukan adalah dalam 10 picodetik (1.000 kali lebih akurat).
Pada awalnya, ini terdengar mustahil. Namun, sistem GNSS menyediakan pengaturan waktu berdasarkan komunikasi berkelanjutan dengan waktu standar. Kemampuan ini memungkinkan jam onboard GNSS untuk terus-menerus disinkronkan dengan sumber waktu yang disediakan untuk konstelasinya, sehingga hampir tidak ada kesalahan drifting jangka panjang. Oleh karena itu, kalibrasi MAC dilakukan melalui perbandingan penghitung yang digerakkan oleh MAC dan pulsa PPS yang disediakan GNSS. Mengambil lebih banyak waktu untuk perbandingan memungkinkan kami mencapai presisi kalibrasi yang lebih tinggi untuk MAC. Tentu saja, ini dengan pertimbangan bahwa MAC adalah sistem invarian waktu linier.
Dalam diagram blok ini, Anda dapat melihat sinyal 10 MHz dari jam rubidium memasuki mesin waktu. Sinyal clock ini dapat diganti dengan input SMA 10 MHz. Sinyal jam dimasukkan ke modul jam digital dan PLL digital (12,5x dihasilkan dari 25 ke atas dan dibagi 2), menghasilkan frekuensi 125 MHz. 125 MHz (periode 8-nanodetik) dimasukkan ke unit ToD.
Unit ToD mengaitkan kenaikan 8-nanodetik dalam nilai digital 0b000001 karena LSB (bit paling tidak signifikan) dikaitkan dengan 250 picoseconds (didorong dari 32 bit akurasi subdetik pada gPTP).
Di sisi lain, sinyal PPS yang datang disaring dari GNSS digunakan untuk memotret hasil kenaikan. Jika 125 MHz akurat, akumulasi kenaikan harus menghasilkan interval tepat 1 detik. Namun, pada kenyataannya, selalu ada ketidaksesuaian antara nilai akumulasi dan interval teoritis 1 detik.
Nilai dapat disesuaikan menggunakan loop kontrol PI (proporsional dan integral) internal. Penyesuaian dapat dilakukan dengan mengubah nilai 0b000001 dengan langkah 250 picoseconds atau fine-tuning PPL 12,5x. Selain itu, penyesuaian lebih lanjut (lebih halus) dapat diterapkan dengan mengarahkan osilator rubidium.
Semakin lama GNSS tidak tersedia, semakin banyak akurasi waktu yang hilang. Tingkat penurunan akurasi waktu disebut holdover. Biasanya, holdover digambarkan sebagai kerangka waktu untuk akurasi dan berapa lama waktu yang dibutuhkan untuk melampauinya. Misalnya, sisa MAC berada dalam 1 mikrodetik selama 24 jam. Ini berarti bahwa setelah 24 jam, akurasi waktu tidak dapat ditentukan tetapi akurat dalam 1 mikrodetik.
Sebagai pendekatan alternatif, kami mengandalkan generasi baru skala chip dan jam atom mini dengan kemampuan mereka untuk menerima input PPS. Hal ini memungkinkan mesin waktu kartu waktu untuk menyerahkan sintonisasi ultrapresisi dari osilator berstabilitas tinggi ke komponen daripada menggunakan sumber daya digital untuk mencapai target.
Sebagai prinsip umum, semakin akurat penyetelan, semakin baik kinerja sisa yang dapat dicapai. Dalam hal pengiriman, menggunakan NIC dengan ketepatan waktu memastikan bahwa paket jaringan menerima stempel waktu yang sangat akurat, yang sangat penting untuk menjaga ketepatan waktu saat dibagikan dengan server lain di seluruh jaringan. NIC semacam itu juga dapat menerima sinyal PPS langsung dari kartu waktu.
Setelah membuat konsep ide dan berbagai iterasi implementasi, kami dapat menyusun prototipe.
Alat waktu beraksi
Kartu waktu memungkinkan setiap mesin x86 dengan NIC yang mampu mengatur waktu perangkat keras untuk diubah menjadi alat waktu. Sistem ini agnostik apakah berjalan untuk NTP, PTP, SyncE, atau protokol sinkronisasi waktu lainnya, karena akurasi dan stabilitas yang disediakan oleh kartu waktu cukup untuk hampir semua sistem.
Kelebihan menggunakan kartu PCIe adalah pengaturannya dapat dipasang bahkan di PC rumahan, asalkan tersedia slot PCIe yang cukup.
Langkah selanjutnya adalah menginstal Linux. Driver kartu waktu disertakan dalam kernel Linux 5.15 atau yang lebih baru. Atau, dapat dibangun dari repositori OCP GitHub pada kernel 5.12 atau yang lebih baru.
Driver akan mengekspos beberapa perangkat, termasuk jam PHC, GNSS, PPS, dan serial jam atom:
$ ls -l /sys/class/timecard/ocp0/
lrwxrwxrwx. 1 root 0 3 Agustus 19:49 perangkat -> ../../../0000:04:00.0/
-r–r–r–. 1 root 4096 3 Agustus 19:49 gnss_sync
lrwxrwxrwx. 1 root 0 3 Agustus 19:49 i2c -> ../../xiic-i2c.1024/i2c-2/
lrwxrwxrwx. 1 root 0 3 Agustus 19:49 pps -> ../../../../../virtual/pps/pps1/
lrwxrwxrwx. 1 root 0 3 Agustus 19:49 ptp -> ../../ptp/ptp2/
lrwxrwxrwx. 1 root 0 3 Agustus 19:49 ttyGNSS -> ../../tty/ttyS7/
lrwxrwxrwx. 1 root 0 3 Agustus 19:49 ttyMAC -> ../../tty/ttyS8/
Driver juga memungkinkan kita untuk memantau kartu waktu, penerima GNSS, dan status jam atom dan mem-flash bitstream FPGA baru menggunakan devlink cli.
Satu-satunya yang tersisa untuk dilakukan adalah mengkonfigurasi NTP dan/atau server PTP untuk menggunakan kartu waktu sebagai jam referensi. Untuk mengkonfigurasi chrony, kita hanya perlu menentukan atribut refclock:
Dan nikmati server NTP Stratum 1 yang sangat presisi dan stabil:
$ sumber kronis 210 Jumlah sumber =1 Nama MS/alamat IP Stratum Poll Reach LastRx Sampel terakhir ================================================================================= #* PHC0 0 0 377 1 +4ns[ +4ns] +/- 36ns
Untuk server PTP (misalnya, ptp4u) pertama-tama kita perlu menyinkronkan PHC kartu waktu dengan NIC PHC. Ini dapat dengan mudah dilakukan dengan menggunakan alat phc2sys yang akan menyinkronkan nilai jam dengan presisi tinggi yang biasanya berada dalam satu digit nanodetik:
$ phc2sys -s /dev/ptp2 -c eth0 -O 0 -m
Untuk presisi yang lebih baik, disarankan untuk menghubungkan kartu waktu dan NIC ke jalur PCIe CPU yang sama. Untuk presisi yang lebih baik, seseorang dapat menghubungkan output PPS dari kartu waktu ke input PPS dari NIC.
Untuk memvalidasi dan mengonfirmasi presisi, kami telah menggunakan perangkat validasi eksternal yang disebut Calnex Sentinel yang terhubung ke jaringan yang sama melalui beberapa sakelar dan antena GNSS independen. Itu dapat melakukan pengujian PPS serta protokol NTP dan/atau PTP:
Garis biru mewakili hasil pengukuran NTP. Presisi tetap dalam ±40 mikrodetik selama interval pengukuran 48 jam.
Garis oranye mewakili hasil pengukuran PTP. Offset praktis berkisar 0 dalam rentang nanodetik.
Memang, ketika kami membandingkan 1 PPS antara keluaran kartu waktu dan referensi internal Calnex Sentinel, kami melihat bahwa kesalahan gabungan berkisar dalam ±200 nanodetik:
Namun yang lebih penting adalah pengukuran ini menunjukkan stabilitas keluaran alat waktu.
Jika terjadi kehilangan sinyal GNSS, kita perlu memastikan penyimpangan waktu (alias peninggalan) dari kartu waktu yang didukung atom tetap dalam 1 mikrodetik per 24 jam. Berikut adalah grafik yang menunjukkan sisa jam atom (SA.53s) selama interval 24 jam. Seperti yang Anda lihat, penyimpangan PPS tetap dalam 300 nanodetik, yang berada dalam spesifikasi jam atom.
Desain modular kartu waktu memungkinkan pertukaran jam atom dengan osilator kristal yang dikendalikan oven (OCXO) atau osilator kristal terkompensasi suhu (TCXO) untuk solusi anggaran dengan kompromi pada kemampuan penyimpanan.
Membuka sumber desain alat waktu
Membangun perangkat yang sangat presisi, murah, dan bebas dari vendor lock merupakan pencapaian tersendiri. Tapi kami ingin memiliki dampak yang lebih besar pada industri. Kami ingin benar-benar membebaskannya dan membuatnya terbuka serta terjangkau untuk semua orang, mulai dari ilmuwan riset hingga pusat data cloud yang besar.
Itu sebabnya kami terlibat dengan Open Compute Project (OCP) untuk membuat Time Appliance Project (TAP) yang benar-benar baru. Di bawah payung OCP, kami melakukan open source di repositori GitHub Time Appliance Project, termasuk spesifikasi, skema, mekanik, BOM, dan kode sumber. Sekarang, selama mencetak PCB dan menyolder komponen kecil tidak terdengar menakutkan, siapa pun dapat membuat kartu waktu mereka sendiri dengan biaya yang lebih murah dari peralatan waktu biasa. Kami juga bekerja sama dengan beberapa vendor seperti Orolia yang akan membuat dan menjual kartu waktu, dan Nvidia yang menjual ConnectX-6 Dx yang memiliki kemampuan pengaturan waktu presisi (dan DPU BlueField-2 berkemampuan pengaturan waktu presisi).
Kami menerbitkan spesifikasi Open Time Server di www.opentimeserver.com, yang menjelaskan dengan sangat rinci cara menggabungkan perangkat keras (kartu waktu, kartu jaringan, dan server komoditas) dan perangkat lunak (driver OS, NTP, dan/atau server PTP ) untuk membuat alat waktu. Membangun alat berdasarkan spesifikasi ini akan memberikan kontrol penuh kepada teknisi yang memelihara perangkat, meningkatkan pemantauan, konfigurasi, manajemen, dan keamanan.
Alat waktu adalah langkah penting dalam perjalanan untuk meningkatkan infrastruktur pengaturan waktu bagi semua orang, tetapi masih banyak yang harus dilakukan. Kami akan terus mengerjakan elemen lain, termasuk meningkatkan presisi dan akurasi sinkronisasi server kami sendiri, dan kami bermaksud untuk terus membagikan pekerjaan ini dengan komunitas komputasi terbuka.