Tratopedia
Sisi NES
Tetapan

Saiz teks

Tema

Kontras tinggi

Versi

v1.177.0

Keluaran yang menjadi asas halaman ini dibina. Itulah versi yang disimpan oleh service worker.

DNS · Rust · Kejuruteraan prestasi · Kejuruteraan perisian · Laporan Teknikalditerbitkan 27 Ogos 2026 · pelancaran 18 Mei hingga 6 Julai 2026

Perwakilan, bukan algoritma · dan kes jarang di mana lebih kecil juga lebih pantas

533 Bait Setiap Entri, 100 Terabait Satu Armada

Big Pineapple, platform di sebalik 1.1.1.1, memegang lebih 250 bilion entri cache DNS pada bila-bila masa. Lima perubahan pada cara satu entri disusun dalam ingatan membawanya daripada 953 bait kepada 420, membebaskan kira-kira 100 terabait merentas armada Cloudflare. Tiada satu pun daripada lima itu ialah algoritma: ia perubahan tentang jenis Rust mana memegang apa. Dakwaan susun atur di bawah disemak dengan mengkompilnya, bukan dengan mempercayainya.

Angkanya Setiap satu dikira semula daripada sebelum dan selepas artikel itu sendiri

  • −56%jejak cache setiap entri, 953 bait kepada 420, dalam penanda aras
  • ~100 TBset kerja agregat yang dibebaskan merentas armada, diukur dalam produksi
  • 250 bilionentri cache DNS dipegang pada bila-bila masa
  • +43%daya pemprosesan sisipan cache, 625,000 kepada 893,000 entri sesaat
  • −19%kependaman carian cache, 828 ns kepada 670 ns

Rekod, bergred Sebahagian daripada ini boleh disemak pembaca tanpa bantuan Cloudflare

GredApaBagaimana ia disemak
DisahkanSatu Vec<T> ialah 24 bait dan Box<[T]> ialah 16, jadi menggugurkan medan kapasiti yang tidak digunakan menjimatkan 8 bait setiap medan — 64 bait merentas lapan medan sebegitu dalam satu entri cache. Perkara sama berlaku bagi String berbanding Box<str>.Dikompil di sini dan saiznya dicetak. Sepadan tepat dengan artikel itu.
DisahkanMenggantikan tiga senarai rekod dengan satu senarai dan dua ofset bahagian u16 menjimatkan 28 bait setiap entri: tiga penuding gemuk berharga 48 bait, satu tambah dua ofset berharga 20.Dikompil di sini. 48 − 20 = 28, seperti dinyatakan.
DisahkanEnum Rust sebesar variannya yang terbesar, jadi rekod A yang memegang 4 bait alamat duduk dalam slot 144 bait bersaiz untuk NAPTR. Mengotakkan varian besar membawa enum kepada 24 bait, menjimatkan 120 pada setiap rekod A dan AAAA — dan itu 81% trafik.Dikompil di sini: enum berkotak ialah 24 bait, dan NAPTR yang dibina semula daripada prosa artikel itu ialah 136. Angka 144 enum bergantung pada jenis medan tepat mereka.
DisahkanDNS mengulang nama pemilik dalam format wayar dan memampatkannya dengan penuding dua oktet, jadi cache menyimpan pemilik penuh sebaliknya — menukar ingatan supaya tidak mengejar penuding di laluan panas. Apabila pemilik sama dengan nama yang ditanya, ia kini digugurkan dan disimpulkan daripada kunci cache.Penuding pemampatan dua oktet itu ialah RFC 1035 §4.1.4, dibaca terus. Dua bit pertamanya ialah 11, meninggalkan ofset 14 bit.
Disahkan, tidak boleh disahkan di siniKeputusan produksi: ingatan pemastautin p99 setiap tika jatuh daripada 9.3 GB kepada 5.3 GB dan p90 daripada 6.5 GB kepada 3.8 GB, sepanjang pelancaran dari 18 Mei hingga 6 Julai 2026, untuk agregat kira-kira 100 TB.Kedua-dua peratusan dikira semula dengan betul. Hanya Cloudflare boleh mengukur armadanya sendiri; tiada pecahan diterbitkan.
Belum disahkanBahawa 130 pelayan Gen 13 memegang 100 TB RAM antara mereka, yang diberikan artikel itu sebagai kesetaraan. Itu menjadi kira-kira 769 GB satu pelayan; tiada spesifikasi ingatan Gen 13 yang diterbitkan ditemui untuk menyemaknya.Aritmetik daripada dua nombor artikel itu sendiri; spesifikasinya tidak awam.

Dilancarkan, kemudian ditulis Kerja itu selesai dan dalam produksi tujuh minggu sebelum diterangkan

  1. 18 Mei 2026Pelancaran bermula. Setiap keluaran membawa satu atau lebih daripada lima perubahan itu, jadi ingatan turun berperingkat dan bukan sekali gus.
  2. 18 Mei – 6 Jul 2026Tika yang dimulakan semula bermula dengan cache kosong dan menggunakan kurang ingatan sehingga cache itu penuh, jadi lekukan pada graf bukan hasilnya. Dataran tinggi itulah hasilnya.
  3. 6 Jul 2026Pelancaran selesai merentas semua perkhidmatan — 49 hari dari mula hingga akhir.
  4. 27 Ogos 2026Cloudflare menerbitkan catatan itu, oleh Sebastiaan Neuteboom, dengan kaedah penanda aras, graf produksi dan sembilan rajah.

Apa yang tiada tarikh Dua, dan satu ialah tujuan seluruh usaha ini

Artikel itu berkata setiap keluaran membawa satu atau lebih daripada lima perubahan itu tetapi tidak menyatakan yang mana membawa yang mana, jadi anak tangga pada graf tidak boleh dipadankan dengan pengoptimuman yang menyebabkannya. Dan ingatan yang dibebaskan belum dibelanjakan: Cloudflare berkata ia merancang melaburkannya semula ke dalam cache yang lebih besar, yang akan menaikkan kadar kena dan mengurangkan jumlah pertanyaan huluan. Itu ditulis dalam bentuk masa depan, dan tiada tarikh diberikan. Sehingga ia berlaku, hasil kerja ini ialah 100 terabait ruang lapang dan bukan cache yang lebih baik — yang merupakan hasil yang amat baik, dan berlainan daripada yang diterangkan rancangan itu.

Ubah perwakilan, bukan algoritma Dan premis yang membolehkannya: entri itu tidak diubah lagi

Dakwaan yang dibuat artikel itu tentang kerjanya sendiri bersahaja dan wajar diambil serius: tiada dasar cache, peraturan pengusiran atau struktur data yang berubah. Yang berubah ialah jenis mana memegang apa. Premis yang membuka kelima-lima perubahan itu ialah satu ayat dalam bahagian kedua — setelah respons DNS berada dalam cache, ia tidak pernah diubah lagi. Satu Vec membawa medan kapasiti dan ruang timbunan lebih peruntukan supaya ia boleh membesar; nilai yang tidak akan membesar sedang membayar keupayaan yang tidak boleh digunakannya. Penaakulan yang sama mengalir melalui yang lain: tiga senarai rekod berasingan menjadi satu senarai dengan dua ofset u16, kerana kiraan bahagian muat dalam 16 bit; nama pemilik rekod digugurkan apabila ia sama dengan nama yang ditanya, kerana kunci cache sudah ada di tangan pada setiap carian; dan enum data rekod berhenti disaizkan untuk variannya yang paling jarang. Pasangan paling menarik ialah dua yang terakhir, kerana kedua-duanya berbalah antara satu sama lain. Mengotakkan varian enum yang besar membetulkan padding tetapi memperkenalkan pembundaran pengalokasi dan menyerakkan data merentas timbunan; menyimpan data rekod sebagai satu penimbal bait bersebelahan menghapuskan kedua-dua kos yang baru sahaja dicipta oleh pengotakan itu. Pembaca yang berhenti pada perubahan keempat akan membina sesuatu yang lebih buruk daripada yang terus membaca — dan artikel itu luar biasa jujur dalam membentangkan langkah perantaraan itu dan bukan membentangkan reka bentuk akhir seolah-olah ia tiba sekali gus.

  • 5perubahan, tiada satu pun pada algoritma
  • 1premis di bawah kelima-limanya: entri tidak pernah diubah
  • 2daripada lima itu membatalkan kos yang diperkenalkan yang lain

Lima perubahan Mengikut susunan ia diterangkan, yang juga susunan ia dibina di atas satu sama lain

PerubahanMengapa ia percumaJimatan
1. Vec<T> menjadi Box<[T]>, String menjadi Box<str>Entri dalam cache tidak pernah membesar, jadi medan kapasiti dan ekor timbunan simpanan kedua-duanya berat mati.64 bait setiap entri, tambah ekor timbunan yang terbazir
2. Tiga senarai rekod menjadi satu, dengan dua ofset bahagian u16Kiraan rekod setiap bahagian muat dalam 16 bit, jadi ofset berharga 2 bait sedangkan senarai berharga penuding gemuk 16 bait.28 bait setiap entri
3. Gugurkan nama pemilik rekod apabila ia sepadan dengan pertanyaanKunci cache hadir pada setiap carian, jadi nama itu boleh dipulihkan dan bukan disimpan. Kebanyakan rekod sepadan; yang di belakang CNAME tidak, dan mengekalkan namanya.Satu peruntukan timbunan setiap rekod, dalam kes biasa
4. Kotakkan varian enum yang besarIa tidak percuma. Ia membetulkan 120 bait padding pada rekod biasa tetapi menambah pembundaran pengalokasi dan menyerakkan data merentas timbunan.120 bait setiap rekod A atau AAAA
5. Simpan data rekod sebagai satu penimbal bait bersebelahanMenghapuskan kedua-dua kos yang diperkenalkan perubahan 4, dan membenarkan kebanyakan jenis rekod disalin terus ke dalam respons keluar tanpa disiri semula. Kosnya: rekod tidak lagi boleh diindeks secara rawak.Kependaman carian −5%, daya pemprosesan sisipan +13%, dengan sendirinya

Tiga cara menyemak ini tanpa Cloudflare Sifat yang jarang bagi catatan pengendali tentang armadanya sendiri

  • Sebuah pengkompil

    Dakwaan susun atur

    rustc, dioptimumkan, edisi 2021

    • Vec 24 bait berbanding Box<[T]> 16, dan String 24 berbanding Box<str> 16 — jadi 8 satu medan, 64 merentas lapan medan. Tepat angka artikel itu.
    • Tiga penuding gemuk 48 bait, satu tambah dua ofset u16 20 — jimatan 28 bait, seperti dinyatakan.
    • Membina semula NAPTR daripada prosa artikel itu mendarat pada 136 bait tepat. Enum keluar 136 dan bukan 144 — tag muat dalam padding lebihan, yang bergantung pada jenis medan yang tidak diterbitkan artikel itu. Mekanismenya disahkan; 8 bait terakhir milik mereka.
  • Sebuah RFC

    Dakwaan DNS

    RFC 1035, November 1987

    • §4.1.4 memberikan pemampatan nama sebagai “jujukan dua oktet” yang dua bit pertamanya ialah 11, meninggalkan ofset 14 bit.
    • Mengapa cache tidak menggunakannya ialah pertimbangan Cloudflare sendiri, bukan RFC: mengejar penuding pemampatan di laluan carian panas adalah mahal, jadi ia membelanjakan ingatan sebaliknya.
  • Aritmetik

    Keputusan yang diterbitkan

    empat belas angka, dikira semula

    • Setiap peratusan dalam artikel itu dikira semula daripada sebelum dan selepasnya sendiri: −55.9%, −58.1%, +42.9%, −19.1%, −43.0%, −41.5%.
    • Campuran trafik berjumlah 100%, dan A tambah AAAA ialah 81% — “lebih 80%” artikel itu.
    • “Lebih 15 terabait” bagi perubahan pertama ialah 16.0 TB perpuluhan tetapi 14.6 TiB perduaan. Benar sebagai perpuluhan, dan konservatif, kerana kiraan entri itu satu lantai.

Jaminan yang disandarkan artikel itu tanpa menamakannya Penemuan laporan ini sendiri, dikompil dan disahkan

Perubahan ketiga menyimpan pemilik sebagai Option<Box<Name>> dan menetapkannya kepada None apabila pemilik sama dengan nama yang ditanya. Dikompil di sini, Option<Box<T>> ialah saiz yang sama dengan Box<T> — 16 bait dalam kedua-dua keadaan. Itulah pengoptimuman penuding nol Rust: kerana Box tidak boleh sesekali menjadi nol, pengkompil menggunakan penuding nol itu sendiri sebagai diskriminan None, jadi pembalut Option tidak berharga apa-apa. Tanpa jaminan itu perubahan ini akan menjadi tawaran yang jauh lebih buruk. Setiap rekod akan membayar satu bait diskriminan tambah padding penjajaran demi keistimewaan kadangkala menggugurkan pemilik — membeli balik satu peruntukan timbunan dalam kes biasa dengan harga bait dalam setiap kes, pada struktur yang seluruh usahanya ialah mengira bait. Artikel itu membentangkan perubahan itu sebagai pertukaran terus storan dengan inferens masa carian dan tidak menyebut peraturan bahasa yang menjadikan pertukaran itu berat sebelah. Ia perkara yang halimunan apabila ia berfungsi dan mahal apabila tidak, dan berbaloi mengetahui yang mana satu anda bergantung padanya.

Apa penanda aras itu, dan apa yang bukan Artikel itu melukis garis ini sendiri, yang berbaloi dibawa bersama

56% itu angka penanda aras: entri dijana secara rawak untuk kira-kira sepadan dengan campuran rekod produksi, dengan TXT mewakili setiap jenis bukan A/AAAA pada saiz rawak 64 hingga 224 bait, dan ingatan dikira oleh pengalokasi tersuai yang membalut pengalokasi sistem Rust. Artikel itu berkata dengan kata-katanya sendiri bahawa input ini “menghampiri produksi dan bukan menghasilkannya semula dengan tepat”, dan bahawa ingatan proses juga bergantung pada campuran trafik, penghunian cache, keadaan pengalokasi dan segala yang di luar cache — sebab itulah ingatan pemastautin turut diukur merentas tika produksi. Dua nombor itu bersaiz berbeza dan jurangnya memberi pengajaran. Membawa jimatan penanda aras terus kepada armada memberikan 533 bait darab 250 bilion entri, atau kira-kira 133 terabait. Angka yang dilaporkan ialah 100 — lebih kurang tiga perempat daripada hasil darab itu. Cloudflare boleh sahaja menerbitkan angka yang lebih besar dengan nota kaki dan ia tidak berbuat demikian. Itu juga sebabnya dataran tinggi graf produksi dan bukan lekukannya yang merupakan hasilnya: tika yang dimulakan semula bermula dengan cache kosong, dan cache kosong bukan cache yang cekap.

Apa yang boleh diumumkan, dan apa yang tidak Tiga penemuan, setiap satu dengan hadnya

Bahagian yang boleh disemak ialah bahagian yang penting

Nombor dalam tajuk itu, kira-kira 100 terabait, ialah angka paling sukar disemak dalam artikel itu: satu agregat merentas armada yang hanya pengendalinya boleh ukur, tanpa pecahan. Mekanisme di bawahnya pula paling mudah disemak, kerana sesiapa yang ada pengkompil boleh menghasilkannya semula dalam seminit. Itulah susunan yang betul. Pembaca yang mengesahkan Vec ialah 24 bait dan Box<[T]> ialah 16 telah memperoleh sebab untuk mempercayai bahagian yang tidak dapat dilihatnya, dan artikel itu memberikan cukup perincian supaya semakan itu mungkin — yang tidak berlaku bagi kebanyakan tulisan kejuruteraan yang membuka dengan nombor tajuk.

Lebih kecil dan lebih pantas serentak bukan satu hukum

Ruang dan masa lazimnya bertukar ganti, dan di sini tidak: jejaknya jatuh 56% sementara sisipan menjadi 43% lebih pantas dan carian 19% lebih laju. Sebabnya khusus dan bukan umum. Kurang peruntukan bermakna kurang kerja pengalokasi di laluan sisipan, dan data bersebelahan bermakna kurang pengambilan baris cache di laluan carian, jadi kedua-dua metrik kebetulan diperbaiki oleh perubahan yang sama. Perubahan ketiga ialah contoh balas dalam artikel yang sama: ia sengaja membelanjakan ingatan — menyimpan nama pemilik penuh dan bukan mengikut penuding pemampatan — untuk mengekalkan laluan panas laju. Pengajarannya ialah ukur kedua-duanya, bukan mengharapkan kedua-duanya.

Jimatan itu ruang lapang, belum lagi cache yang lebih baik

Cloudflare berkata ia merancang membelanjakan ingatan yang dibebaskan pada cache yang lebih besar, yang akan menaikkan kadar kena dan mengurangkan jumlah pertanyaan huluan. Itu ditulis dalam bentuk masa depan tanpa tarikh. Sehingga ia berlaku, apa yang dihasilkan kerja itu ialah 100 terabait kapasiti tidak terpakai dan cache yang lebih pantas bersaiz sama — hasil yang baik, dan berlainan daripada rancangan itu. Sama ada pelaburan semula itu menjadi, dan apa kesannya pada kadar kena, ialah perkara yang perlu diperhatikan dan perkara yang belum boleh dilaporkan sesiapa.

Apa yang akan menyelesaikan selebihnya Tiada satu pun dipertikaikan; semuanya sekadar belum diterbitkan

  • Sama ada ingatan yang dibebaskan menjadi kapasiti cache. Dinyatakan sebagai rancangan, dalam bentuk masa depan, tanpa tarikh. Catatan susulan dengan angka kadar kena akan menyelesaikannya.
  • Keluaran mana membawa perubahan mana. Artikel itu berkata setiap satu membawa satu atau lebih, jadi anak tangga pada graf produksi tidak boleh dinisbahkan kepada pengoptimuman tertentu.
  • Spesifikasi ingatan Gen 13. Kesetaraan 130 pelayan membayangkan kira-kira 769 GB satu pelayan; tiada spesifikasi diterbitkan ditemui untuk menyemaknya.
  • Berapa banyak armada yang berat ECS. Artikel itu berkata keuntungannya paling besar di tempat EDNS Client Subnet mendarabkan varian cache bagi pertanyaan yang sama, tetapi tidak memberikan bahagiannya.

Disemak pada 30 Ogos 2026 terhadap: Sebastiaan Neuteboom, “How we saved 100 terabytes of memory by optimizing 1.1.1.1's DNS cache”, The Cloudflare Blog, diterbitkan 27 Ogos 2026 17:02 UTC, diambil dan dibaca sepenuhnya dengan sembilan rajahnya · RFC 1035 §4.1.4, P. Mockapetris, November 1987, dibaca di rfc-editor.org bagi penuding pemampatan dua oktet · rustc milik sesi ini sendiri, dioptimumkan, edisi 2021, digunakan untuk mengkompil bentuk jenis yang diterangkan artikel itu dan mencetak setiap saiznya — angka susun atur yang dinisbahkan di sini kepada pengkompilan ialah ukuran laporan ini sendiri, bukan petikan. Setiap peratusan dalam artikel itu dikira semula daripada nilai sebelum dan selepasnya sendiri dan kesemua empat belas bersetuju. Tidak ditetapkan: komposisi ~100 TB itu; spesifikasi ingatan Gen 13 Cloudflare; bahagian armada yang menggunakan ECS; keluaran mana membawa perubahan mana; jenis medan NAPTR tepat yang menjadikan enum 144 dan bukan 136 bait.

Versi

Dokumen ini ditulis semula apabila kandungannya perlu berubah. Setiap versi kekal diterbitkan di alamatnya sendiri.

  1. v0001 semasa

Versi semasa juga berada di latest/.