LINUX.ORG.RU

Cloudflare высвободила 100 ТБ оперативной памяти оптимизацией DNS-кэша

 , , , ,


0

6

27 августа в Cloudflare рассказали о событии из разряда «однострочный патч с мультипликативным эффектом»: небольшая экономия памяти на одной структуре данных, будучи умноженной на сотни миллиардов экземпляров, превращается в десятки терабайт. Правда, в данном случае одним однострочным патчем дело не ограничилось — инженеры последовательно внесли пять сравнительно небольших изменений в представление записей DNS-кэша и в итоге высвободили около 100 ТБ оперативной памяти.

Оптимизации проводились в Big Pineapple — написанной преимущественно на Rust платформе Cloudflare, лежащей в основе публичного DNS-резолвера 1.1.1.1, Gateway DNS, DNS Firewall, AS112 и других DNS-сервисов компании. В каждый момент времени Big Pineapple хранит более 250 млрд записей DNS-кэша, поэтому всего один лишний байт на запись означает более 250 ГБ памяти на всей инфраструктуре.

Cloudflare начала развёртывание изменений 18 мая и завершила его 6 июля 2026 года. Оптимизация состояла из пяти основных этапов:

  • Вместо динамических Vec<T> и String для неизменяемых после помещения в кэш данных стали использовать Box<[T]> и Box<str>. У Vec кроме указателя и длины хранится ещё и ёмкость буфера, необходимая для его последующего расширения, но кэшированные DNS-ответы больше не изменяются. В каждой записи находилось восемь подобных полей, поэтому экономия только на этом изменении составила 64 байта на запись и более 15 ТБ в масштабах Cloudflare.

  • Три отдельных массива DNS-записей answer, authority и additional объединили в один массив, а границы секций стали задавать двумя 16-разрядными смещениями. Это позволило убрать два указателя и две длины и сэкономить ещё 28 байт на запись. Несколько логических полей заодно были упакованы в битовые флаги, что сократило и выравнивающие промежутки внутри структур Rust.

  • Из большинства записей перестали сохранять повторяющееся имя владельца DNS-записи. Обычно оно совпадает с доменом, уже присутствующим в ключе кэша. Теперь имя сохраняется отдельно только тогда, когда оно действительно отличается, например для записей за CNAME, а в остальных случаях восстанавливается из ключа.

  • Инженеры обратили внимание на особенности enum в Rust. Размер перечисления определяется его крупнейшим вариантом: в структуре Cloudflare таким вариантом был NAPTR, из-за которого RecordData занимал 144 байта. При этом наиболее распространённой записи A требуется всего 4 байта, а AAAA — 16 байт. Поскольку A и AAAA составляют более 80% обрабатываемых записей, большая часть выделенной памяти фактически оставалась пустой. Перенос крупных вариантов в отдельные heap-объекты позволил значительно уменьшить сам enum.

  • Наконец, от хранения разобранных Rust-структур для содержимого DNS-записей частично отказались вообще. Данные стали помещать в единый Box<[u8]> практически в сетевом формате DNS, добавляя перед каждой записью двухбайтовую длину. Это убрало множество отдельных выделений памяти и улучшило локальность данных для процессорного кэша. Для A, AAAA, TXT и DNSSEC-записей данные теперь можно непосредственно копировать в формируемый DNS-ответ, не выполняя повторную сериализацию. Само это изменение уменьшило задержку поиска примерно на 5%, а использование повторно применяемого временного буфера увеличило скорость добавления записей ещё на 13%.

В результате в тестах средний объём памяти на одну запись сократился с 953 до 420 байт, то есть на 56%, а фактически выделяемая память — с 1,1 КБ до 461 байта. На рабочих серверах эффект оказался несколько меньше, поскольку в RSS процесса входит не только DNS-кэш, но итоговая экономия по всей инфраструктуре всё равно составила примерно 100 ТБ оперативной памяти.

Экономия памяти при этом не потребовала жертвовать производительностью. Наоборот, пропускная способность при добавлении записей в кэш выросла с 625 тыс. до 893 тыс. записей в секунду, или на 43%, а задержка поиска снизилась с 828 до 670 нс, или на 19%. В production значение p99 для потребления памяти одним экземпляром Big Pineapple уменьшилось с 9,3 до 5,3 ГБ, а p90 — с 6,5 до 3,8 ГБ.

Высвободившиеся 100 ТБ Cloudflare сравнивает с объёмом памяти примерно 130 серверов поколения Gen 13. Однако вынимать DIMM из серверов компания, естественно, не собирается: свободную память планируется направить на увеличение DNS-кэшей. Более вместительный кэш повысит вероятность нахождения готового ответа и сократит число запросов к внешним авторитетным DNS-серверам.

Big Pineapple создавалась Cloudflare как собственная замена постепенно переросшей свои первоначальные задачи инфраструктуре на основе Knot Resolver. Компания ранее подробно рассказывала, что сервис со временем практически полностью переписали на Rust, а расширяемую часть архитектуры построили вокруг изолированных WebAssembly-модулей.

>>> Источник

★★★★★

Проверено: maxcom ()
Последнее исправление: unclestephen (всего исправлений: 1)

Память дорожает и буржуи начали экономить..

dynamic_cast
()

как обычно начинали с «быстро в продакшен», а закончили «эффективность - основа жизни» :)
жаль до такого мало кто дорастает.

pfg ★★★★★
()

Сегодня зашёл в магазин, а там видеокарта на 15 тысяч дешевле чем вчера. Вот в чём дело-то!

perl5_guy ★★★★★
()

пол стойки, хм. если по топу брать.
а вот если б переписали с rust на asm, используя claude/codex, оптимизируя при этом правильными промптами - ещё бы пару миллиардов бюджета проэтовали б на токены🤡

etwrq ★★★★★
()
Последнее исправление: etwrq (всего исправлений: 1)
Ответ на: комментарий от LINUX-ORG-RU

Я так и не понял в чём новость

О том, что сэкономили 100TB RAM. Сэкономили. Сколько там всего RAM - ну…

TI_Eugene ★★★
()
Ответ на: комментарий от LINUX-ORG-RU

Я так и не понял в чём новость.

продадут память - заработают)
400 ECC планок по 256gb это не хухры-мухры, тащемта.

etwrq ★★★★★
()
Последнее исправление: etwrq (всего исправлений: 1)
Ответ на: комментарий от jsoncpp

украсть ящик водки, продать за пол цены, а деньги пропить?

unclestephen ★★★★★
() автор топика

свободную память планируется направить на увеличение DNS-кэшей.

Планируется? У них что, не автоматически вся память под кеш?

средний объём памяти на одну запись

То есть записи у них разного размера, а количество фиксировано, иначе как объём занимаемой памяти уменьшился?

mky ★★★★★
()
Ответ на: комментарий от mky

Объём уменьшился, потому что использовались записи фиксированного размера (это в случае с enum).

unC0Rr ★★★★★
()
Ответ на: комментарий от MoldAndLimeHoney

Лично я убежден, что ИИ не способен на такие оптимизации по причине слишком малой выборки для обучения, так сказать.

bbc69
()
Последнее исправление: bbc69 (всего исправлений: 1)
Ответ на: комментарий от bbc69

Оптимизация с enum без всякого ИИ детектится с помощью cargo clippy. Правда, у него по умолчанию порог срабатывания 200 байт, вроде, а тут речь только о 144.

unC0Rr ★★★★★
()

и Big Pineapple хранит более 250 млрд записей DNS-кэша,

зачем она хранит всё в памяти, если к подавляющему числу записей никто никогда не обратится? обычный сбор статистики и вытеснения «бесхозных» записей на ssd кеш позволит высвободить напорядок больше. но сия «гениальная мысля» ещё не пришла в голову «ынженерам», о ней они расскажут через пару тройку лет. ессесенно с подобным апломбом и манагеровским кликбейт заголовком.

vtVitus ★★★★★
()
Ответ на: комментарий от vtVitus

зачем она хранит всё в памяти, если к подавляющему числу записей никто никогда не обратится?

записей в кэше не было, бы если к ним никто нигода не обращался

yandrey ★★★
()

Оптимизация кода не стоит моего рабочего времени, говорили они. Просто добавь больше памяти говорили они...

А тут бах и 2,15 млн долларов.

kirill_rrr ★★★★★
()
Последнее исправление: kirill_rrr (всего исправлений: 1)
Ответ на: комментарий от bbc69

так в этом то и суть, дать контекста LLM в сессии и решать задачу.

gagarin0
()
Ответ на: комментарий от LINUX-ORG-RU

Они сделали то, от чего все разработчики открещиваются как от глупого и бесполезного занятия. Высвободили железа минимум на 2млн баксов, паралельно ускорив работу системы в целом.

kirill_rrr ★★★★★
()

Программисты не инженеры.

wenxuan
()
Ответ на: комментарий от vtVitus

А как работает DNS-скрвер? Вот например Cloudflare высвободила 100 ТБ оперативной памяти оптимизацией DNS-кэша (комментарий) и www.linux.org.ru/gallery/ это для него одно и то же или разные доменные имена? А если не ЛОР например, а какой нибуь google.com, разбросаный на тысячи кластеров по всему миру?

kirill_rrr ★★★★★
()
Ответ на: комментарий от vtVitus

на каждый уникальный домен, кроме обычных A,AAAA,CNAME, рекурсор, как минимум, хранит ещё все NS записи домена, причём, каждый ip-адрес - это отдельная запись, так что, верю

а всякие DNS blocklist и прочие запрашивающие PTR, генерируют множество записей огромным потоком постоянно

yandrey ★★★
()
Последнее исправление: yandrey (всего исправлений: 2)
Ответ на: комментарий от kirill_rrr

Они сделали то, от чего все разработчики открещиваются как от глупого и бесполезного занятия.

Неправда, на ЛОРе это в порядке вещей

Это полезно, приятно интересно, но ничего выдающегося в этом нет. Каждый разраб, где-то что-то да экономит, ужимает. Масштабируй его оптимизации до размера краудфаеров получишь те же терабайты.

Ещё порадовало это

Инженеры обратили внимание на особенности enum

И то что у них поле данных размеров в 10 раз больше остальных используется на 80% реже чем те что в 10 раз меньше. Эммм… Ладно я говнокодер лютый, но даже мне читать такое смешно, что маленькая инди компания клаудфаер говнокодит как я не понимая язык на котором пишу. Дело даже не в том что там было пустое расходование памяти, а ИНЖЕНЕРЫ обратили внимание на особенность enum, едрить а когда оно писалось понимания как работает enum не было? Я вот про это всё.

По факту сэкономили они

память — с 1,1 КБ до 461 байта

Всё остальное масштабирование для красного словца, в том числе сравнение освободившейся памяти с серверами. Это как выражать количество радиации через бананы. Или мощность электростанции через пальчиковые батарейки которые если выставиь в ряд дотянешься до луны.

Это всё весело и забавно, но это…
Лаааадно, чёто я скряга какой-то стал. Бубубу да бубубу. Ну, наверное иногда можно ^.^!

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 1)
Ответ на: комментарий от kirill_rrr

А если не ЛОР например, а какой нибуь google.com, разбросаный на тысячи кластеров по всему миру?

;google.com.			IN	A

;; ANSWER SECTION:
google.com.		58	IN	A	64.233.164.139
google.com.		58	IN	A	64.233.164.113
google.com.		58	IN	A	64.233.164.100
google.com.		58	IN	A	64.233.164.102
google.com.		58	IN	A	64.233.164.101
google.com.		58	IN	A	64.233.164.138

;; ANSWER SECTION:
google.ru.		84	IN	A	64.233.162.94
		IN	A

;; ANSWER SECTION:
google.cn.		300	IN	A	173.194.221.110

250 ярдов Карл! не миллионов, а ярдов! якобы регулярных использований.

Тут либо ipv6 имена у каждой лампочки в каждом умном доме, которые постоянно зачем-то резолваются, либо быть умелым натягивателем сов на глобусы.

В любом случае 250 ярдов не нужны в оперативной памяти.

vtVitus ★★★★★
()
Последнее исправление: vtVitus (всего исправлений: 1)
Ответ на: комментарий от vtVitus

у каждой лампочки в каждом умном доме

каждый почтовый сервер, по каждому подключившемуся к нему ip, запрашивает записи, почти каждый торрент-клиент с открытой вкладкой пиров, делает десятки-сотни записей в dns кэше, каждый современный браузер по каждому обнаруженному домену каждого уровня запрашивает сразу весь набор записей A,AAAA,HTTPS 🙂

yandrey ★★★
()
Ответ на: комментарий от vtVitus

Ты в курсе, что такое кэш, и как (почему) туда что-то попадает?

ChckNgn
()

Оптимизация состояла из пяти основных этапов:

Почитал этапы, сложилось впечатление, что те «инженеры» таки умели когда-то в Си…))))

Sm0ke85
()
Ответ на: комментарий от kirill_rrr

Они сделали то, от чего все разработчики открещиваются как от глупого и бесполезного занятия. Высвободили железа минимум на 2млн баксов, паралельно ускорив работу системы в целом.

Вот же гады! Если так дальше пойдёт, то ещё кому-то может захотеться оптимизировать структуры данных и освобождать память, параллельно ускоряя работу. Это что же такое делается то, а?

VIT ★★★
()
Ответ на: комментарий от vtVitus

вытеснения «бесхозных» записей на ssd кеш позволит высвободить напорядок больше.

Я так понял, что теперь они наоборот в оперативу еще чуток загонят (на размер освободившегося), чтоб летало все…))) А SSD - слишком медленно мне кажется на таких объемах….

Sm0ke85
()
Ответ на: комментарий от VIT

Вот же гады! Если так дальше пойдёт, то ещё кому-то может захотеться оптимизировать структуры данных и освобождать память, параллельно ускоряя работу. Это что же такое делается то, а?

Думаю этому можно научиться только в условиях сильно ограниченных ресурсов, ибо в эмбдеде - это норма, типа дату оформить битовым полем, да еще и упаковать как надо, чтоб потом по указателю ее скинуть куда-нибудь, а еще лучше, если это все через DMA летит, чтоб не напрягало лишний раз ядро))))

Sm0ke85
()
Ответ на: комментарий от Sm0ke85

Да, согласен. Правда сильно ограниченные ресурсы бывают не только во встраиваемых системах.

VIT ★★★
()

Я так понимаю, что новость не про опенсурс, а про оптимизацию какого-то проекта на Rust’e?

Vest
()
Ответ на: комментарий от kirill_rrr

менеджеры открещиваются как от глупого и бесполезного занятия.

Fixed.

bbc69
()
Последнее исправление: bbc69 (всего исправлений: 1)
Ответ на: комментарий от LINUX-ORG-RU

ИНЖЕНЕРЫ обратили внимание на особенность enum, едрить а когда оно писалось понимания как работает enum не было? Я вот про это всё.

Язык просто не тот. Вот был бы язык другой… А, погодите, там и так все на Расте.. Хммм..

vvb333007
()
Ответ на: комментарий от Sm0ke85

Думаю этому можно научиться только в условиях сильно ограниченных ресурсов, ибо в эмбдеде - это норма, типа дату оформить битовым полем, да еще и упаковать как надо, чтоб потом по указателю ее скинуть куда-нибудь, а еще лучше, если это все через DMA летит, чтоб не напрягало лишний раз ядро))))

Да не только эмбеддед. Разработкая ядра ОС (очереди и прочие системные примитивы должны быть оптимизированы - все их юудут использовать). На самом деле везде, где пишут не прикладной софт.

vvb333007
()
Ответ на: комментарий от kirill_rrr

тут бах и 2,15 млн долларов.

У хайнлайна есть рассказ «отель». там был работник, который экономил компании тысячи долларов, а в руки получал несколько в день.

так и тут, эти деньги сэкономившему не достанутся.

Saakx
()

бездари гордо рассказали о том, как немного почистили свой бездарный говнокод. Бывает.

Lrrr ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

едрить а когда оно писалось понимания как работает enum не было? Я вот про это всё.

Ну, строго говоря пиша код прогрммист всё таки не вникает в каждую функцию, в каждый слой компиляции, оптимизации и исполнения на разных платформах. Объём работы трудно представить, а требуемая квалификация возможно больше чем существует Раст. Но вот конкретно этой инди-кампании конечно следовало бы делать это над каждой строчкой своего кода изначально. Как и, ъть, многим другим, например Гуглу и Майкам.

kirill_rrr ★★★★★
()
Ответ на: комментарий от vtVitus

Да всего то по 25 записей на человека, при том что как известно - 9/10 населения интернета - боты. Ну да, поработать бы над маршрутизацией в интернете заново и с нуля, но какое есть болото такое есть.

kirill_rrr ★★★★★
()
Последнее исправление: kirill_rrr (всего исправлений: 1)
Ответ на: комментарий от vtVitus

ipv6 имена у каждой лампочки

Ну, PTR запись для каждой ipv6 лампочки запрашивать ведь можно? А ещё ipv6 можно всё время менять из соображений анонимности. И, может они и негативные ответы в эти 250 миллиардов включают.

И, ещё надо поняит, про какие записи они пишут. У них же куча серверов, они там суммарный объём памяти считают, значит и суммарное количество записей, а не уникальных записей. Вот стоит 1000 серверов, они все закешировали google.com, по 10 записей каждый, итого 10000 записей.

mky ★★★★★
()
Ответ на: комментарий от bbc69

Лично я убежден, что ИИ не способен на такие оптимизации

LLM довольно неплохо умеет делать микро оптимизации, особенно если это агент, у которого есть возможность быстро проверить результат.

maxcom ★★★★★
()
Ответ на: комментарий от cobold

Дефицит памяти теперь отменяется или все ещё нет?

Если бы не цены, я бы себе домой 16тб озу купил. Соответственно 100тб, разлетелось бы за пару секунд по Европе. Чтобы дефицит покрыть, кажется, что нужны экзабайты озу

AntonyRF ★★★★
()

На эту тему теперь надо актулизировать известный анекдот

  • Папа, теперь мы будем больше есть?

  • Нет сынок, теперь я буду больше пить.

FriendshipIsMagic
()
Последнее исправление: FriendshipIsMagic (всего исправлений: 1)
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.