Size: a a a

2018 June 20

OC

Oleg Chirukhin ☄️ 🧙🏻‍♂️🚀 in graalvm_ru
pragus
и? вот есть такая старая задачка про роутинг ipv4 пакетов, которую решает каждый разработчик ос. потому что нужна структура данных с быстрым лукапом и при этом компактная, а записей в ней может быть относительно много(например, 500к).
нахер мне нужно решать какую-то проблему роутинка ipv4 пакетов, если я пишу банковский софт? Почему этот ворклоад меня должен хоть как-то беспокоить?
источник

p

pragus in graalvm_ru
так вот, про роутинг. сначала делали тупо хеш-таблицу, но оно сильно жрет память и хоть декларируется O(1), но по факту все сильно хуже )
источник

NK

ID:414983998 in graalvm_ru
pragus
так вот, про роутинг. сначала делали тупо хеш-таблицу, но оно сильно жрет память и хоть декларируется O(1), но по факту все сильно хуже )
Конечно хуже, чем больше таблица, тем выше вероятность коллизий и соответственно дальше или поключаем список или пересчитываем хэш фкнкцию с другим seed number. Но хэш-таблицы бывают разные есть например DHT которая менее подвержена этому, есть trie-структуры типа Judy-array
источник

p

pragus in graalvm_ru
Oleg Chirukhin ☄️ 🧙🏻‍♂️🚀
нахер мне нужно решать какую-то проблему роутинка ipv4 пакетов, если я пишу банковский софт? Почему этот ворклоад меня должен хоть как-то беспокоить?
я тебе историю хочу рассказать. в итоге, в ход пошли всякие префиксные деревья. но чтобы не бегать по пустым узлам туда втащили path compression.

в итоге. получилось lpc-trie(в linux) и какая-то модификация patricia у freebsd. на относительно современном железе это все дает ~ 8 млн. лукапов в секунду на 1 ядро. вроде збс, да?
источник

OC

Oleg Chirukhin ☄️ 🧙🏻‍♂️🚀 in graalvm_ru
такс, продолжайте. Вроде заебись!
источник

p

pragus in graalvm_ru
а потом появился DIR-24-8 в пейпере "Routing Lookups in Hardware at Memory Access Speeds".
источник

p

pragus in graalvm_ru
потом появился DXR, различные вариации которого дают больше сотни млн лукапов
источник

p

pragus in graalvm_ru
а теперь вот выкатили popcount trie, который быстрее dxr в 1.6 раза.
источник

p

pragus in graalvm_ru
короче, поинт в том, что зная своё железо можно обнаружить что у тебя совсем не хайлоад и надо просто взять профайлер.
источник

OC

Oleg Chirukhin ☄️ 🧙🏻‍♂️🚀 in graalvm_ru
На всякий случай участникам чатика, @shelajevoleg - один из разрабов Грааля. Так что можно вносить сюда и более сложные вопросы)
источник

NK

ID:414983998 in graalvm_ru
popcount trie это тоже самое что QP-tries?
источник

p

pragus in graalvm_ru
ID:414983998
popcount trie это тоже самое что QP-tries?
угу.
источник

p

pragus in graalvm_ru
ID:414983998
popcount trie это тоже самое что QP-tries?
источник

NK

ID:414983998 in graalvm_ru
Ясно. Judy-array пробовали? У него самое лучшее cache coherence среди всех структур что я встречал, но я не уверен, что поиск столь же быстрый как у popcount trie
источник

NK

ID:414983998 in graalvm_ru
Ну и компрессии нету
источник

OC

Oleg Chirukhin ☄️ 🧙🏻‍♂️🚀 in graalvm_ru
Хей ребята, а вы чем по жизни занимаетесь?
источник

OC

Oleg Chirukhin ☄️ 🧙🏻‍♂️🚀 in graalvm_ru
Ну, не каждый интересуется пейперами по Trie
источник

p

pragus in graalvm_ru
Oleg Chirukhin ☄️ 🧙🏻‍♂️🚀
Хей ребята, а вы чем по жизни занимаетесь?
всякое сетевое говно пишу на разных языках.
источник

p

pragus in graalvm_ru
а, у меня лапки.
источник

NK

ID:414983998 in graalvm_ru
Ну trie структура о которой должен знать каждый девелопер так или иначе. Это веб-разработчики могут обходиться массивами да хештаблицами, им даже Map/Set очень редко когда нужен, а для всех остальных это нормальное владение computer science
источник