Решения о маршрутизации в ядре Linux - часть 2.1: кэширование
В предыдущей статье я много говорил про решение о маршрутизации. Его представляют внешняя struct rtable и внутренняя struct dst_entry, и оно прикрепляется к сетевому пакету skb по результату routing lookup. Но одну очень важную тему я намеренно оставил в стороне... кэширование. Если вы смотрите, как пакет обрабатывается по прикреплённому решению о маршрутизации, то неважно (по крайней мере на первый взгляд), откуда это прикреплённое решение на самом деле взялось. Может, его выделили специально под этот сетевой пакет, а может, оно пришло из какого-то кэша... неважно. Обработка пакета от этого не меняется. Но от этого тема кэширования не становится менее важной. На самом деле она очень важна, особенно для производительности, а история у неё непростая, так что я решил: ей стоит отдельная статья. Вы, наверное, то тут, то там слышали термин routing cache, да? Настоящий полноценный routing cache был в старых ядрах, и его убрали в v3.6. Но это не значит, что кэширование от этого исчезло совсем. После удаления в ядро добавили другие механизмы кэширования и оптимизации вокруг решений о маршрутизации. А кое-что из уже существовавшего оставили. В интернете полно статей и документации, где упоминается какой-нибудь routing cache. Но из-за бурной истории во всей этой, местами противоречивой, информации очень легко запутаться. По крайней мере у меня в начале так и было. Эта статья - попытка разложить эту информацию и поставить в контекст, как было в старых ядрах и как на самом деле есть в современном ядре вроде v5.14. Оно конечно уже тоже старовато, но основные принципы с тех пор не претерпели существенных изменений.
https://telegra.ph/Resheniya-o-marshrutizacii-v-yadre-Linux---chast-21-kehshirovanie-10-14
#ит_статьи #linux #kernel #routing #ipv4 #netfilter
Просмотры: 34