[devel] contents_index trie
Mikhail Gusarov
=?iso-8859-1?q?dottedmag_=CE=C1_altlinux=2Eorg?=
Вт Окт 28 10:19:20 MSK 2008
Twas brillig at 10:04:13 28.10.2008 UTC+03 when at на altlinux.ru did gyre and gimble:
AT> С точки зрения доступа сериализации должна давать минимальное
AT> количество page faults [*]. То есть, примерно, чтобы переход / ->
AT> /usr затрагивал всего одну 4K страницу (которую необходимо
AT> загрузить в память с диска), переход /usr -> /usr/share затрагивал
AT> всего одну 4K страницу и т.д.
AT> Если на одной странице оказываются unrelated пути (напр. /usr и
AT> /etc), то мы лишь избавляемся от лишних вызовов типа regexec(3)
AT> (как в grep), но не можем ограничить активность ОС (ограничить
AT> фактическое потребление памяти).
Не понимаю, почему так. Возьмём путь длиной в 40 символов (для простоты
- 40 байтов). Для того, чтобы добраться до его конца, нам нужно
прочитать 40 узлов. Каждый узел - это, максимум, 256 x (байт, указатель
на заголовок следующего блока, бит статуса), т.е. укладывается в 4k с
запасом. Бит статуса можно изжить с помощью заголовка "имена начинаются
со смещения 0xabcde".
Таким образом, для lookup'а придётся поднять 41 блок (последний - для
вычитываяния имени пакета) даже при тривиальной сериализации, которая
просто не даёт узлу пересечь границу блока.
В случае несильного ветвления лексикографическая сортировка даст ещё
большую экономию (последовательные узлы окажутся в одном или соседних
дисковых блоках).
--
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип : application/pgp-signature
Размер : 196 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url : <http://lists.altlinux.org/pipermail/devel/attachments/20081028/db2a018f/attachment.bin>
Подробная информация о списке рассылки Devel