[devel] contents_index trie
Alexey Tourbin
=?iso-8859-1?q?at_=CE=C1_altlinux=2Eru?=
Вт Окт 28 10:04:13 MSK 2008
On Tue, Oct 28, 2008 at 12:31:35PM +0600, Mikhail Gusarov wrote:
> AT> Trie лишь оптимизирует *доступ* к contents_index (переходы типа
> AT> многоуровнего хеша); а с точки зрения размера выгоднее
> AT> contents_index просто сжать.
>
> Конечно, но trie заодно уберёт огромную избыточность текущего
> contents_index. Впрочем, сжать проще.
Сжать ещё и выгоднее (по размеру): сериализованный trie всё ещё
избыточен (например, потому что ссылки кодируются избыточными по
частоте появления и по размеру в битах целыми числами).
> AT> Значит, нужна нетривиальная логика сериализации trie, которая бы
> AT> оптимизировала локальность ссылок при переходе вглубь trie на
> AT> физических страницах.
>
> Любая сериализация trie будет лучше, чем grep по файлу :)
С точки зрения доступа сериализации должна давать минимальное количество
page faults [*]. То есть, примерно, чтобы переход / -> /usr затрагивал
всего одну 4K страницу (которую необходимо загрузить в память с диска),
переход /usr -> /usr/share затрагивал всего одну 4K страницу и т.д.
Если на одной странице оказываются unrelated пути (напр. /usr и /etc),
то мы лишь избавляемся от лишних вызовов типа regexec(3) (как в grep),
но не можем ограничить активность ОС (ограничить фактическое потребление
памяти). А в примитивной сериализации адреса никак не сгруппированы и
не упорядочены, то есть будет почти случайное перемешивание; так что в
памяти будет оседать большое количество лишних страниц. То есть при
наивной сериализации попытка сколько-нибудь глубокого доступ будет
"всасывать" весь contents_index в память, а оптимизация доступа будет
идти уже на "всосанных" данных. Тогда понятие оптимальности
раздваивается: с точки зрения userspace вместо линейного перебора
будет trie; а с точки зрения virtual memory и свопа получается
то же самое, то есть очень дорого.
[*] http://en.wikipedia.org/wiki/Page_fault
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип : application/pgp-signature
Размер : 197 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url : <http://lists.altlinux.org/pipermail/devel/attachments/20081028/8c209ba6/attachment.bin>
Подробная информация о списке рассылки Devel