[devel] Re: bloom filters
Alexey Tourbin
=?iso-8859-1?q?at_=CE=C1_altlinux=2Eru?=
Пн Сен 19 01:43:17 MSD 2005
On Mon, Sep 19, 2005 at 12:18:34AM +0400, Alexey Tourbin wrote:
> Bloom filter используется, например, в spellchecker'ах, когда нужно
> захешировать все "правильные" слова. Произвольное неправильное слово
> может с очень небольшой вероятность определиться как правильное.
Возвращаюсь к нашим баранам. Есть список символов def "с адресом" --
эти символы провайдятся, и есть список символов ref "без адреса" --
которые, стало быть, кто-то должен провайдить.
$ awk -F'\t' '{print$NF}' def |sort -u >defsym
$ awk -F'\t' '{print$NF}' ref |sort -u >refsym
$ head defsym
A
A20Proc16
AAAAddAVPToMessage
AAABuildMsgBuffer
AAACloneAVP
AAAConvertAVPToString
AAACreateAVP
AAAFindMatchingAVP
AAAFreeAVP
AAAFreeMessage
$ wc -l defsym refsym
1592688 defsym
174130 refsym
1766818 total
$
Ассиметрия в природе. Провайдится гораздо больше, чем требуется.
Теперь попробуем воткнуть сюда фильтр Блума.
$ bloom -n 1592688 defsym >defsym.bf
$ ls -s1 defsym defsym.bf
56872 defsym
1864 defsym.bf
$
Вот! Меньше минимум на порядок, во всех отношениях.
Пробуем проверить malloc:
$ bloom -e malloc defsym.bf; echo $?
0
$ bloom -e Malloc defsym.bf; echo $?
1
$
Ну. Работает. Как и следовало ожидать. То есть превентивная мера,
которую можно применить для проверки *всех* ELF'ов, а не только
публичных библиотек, состоит в том, что обнаруженные undefined symbols
из вывода `ldd -r' нужно попробовать отыскать в общем "отстойнике".
Если их там нет, то пакет нужно *точно* давить. Кстати, false positive
в данном случае означает, что по ошибке можно пропустить пакет, который
следовало бы задавить, потому что символ в отстойники будет "найден"
(это в некотором смысле лучше, чем задавить пакет невинный). Если
добавить в bloom.c элемент случайности, то сбой проверки будет одиночным
явлением. (Вообще, по поводу сбоев: вероятность сбоев нужно оценивать
комплексно; например, учитывать вероятность выхода из строя сборочных
серверов, которая, кажется, выше статистического 1 процента.)
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип : application/pgp-signature
Размер : 189 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url : <http://lists.altlinux.org/pipermail/devel/attachments/20050919/5ba6942d/attachment-0001.bin>
Подробная информация о списке рассылки Devel