1
0
mirror of https://github.com/pavel-odintsov/fastnetmon synced 2024-11-23 09:12:14 +01:00
fastnetmon-rewritten/tests/DATA_STRUCTURES.md
2014-12-01 13:21:05 +04:00

27 lines
2.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

История использования структур была такой:
* std::map
* Так как предыдущий тормозил, решено было взять: unordered_map С++ 11
* Но std::unordered_map сегфолтился на пустом месте и был не особо стабилен: http://www.stableit.ru/2013/11/unorderedmap-c11-debian-wheezy.html
* Мы вернулись на std::map
* Но он тормозил и мы решили попробовать boost::unordered_map, он был быстр:
http://tinodidriksen.com/2009/07/09/cpp-map-speeds/
standard map: 41% cpu in top
boost::unordered_map: 25% cpu in top
Но он постоянно сегфолтился и оказывается не был совершенно thread safe:
http://boost.2283326.n4.nabble.com/boost-unordered-map-thread-safety-td2585435.html
http://meetingcpp.com/tl_files/2013/talks/Containers%20in%20Boost%20-%20Boris%20Schaeling.pdf
Стоит обратить внимание, что сегфолтился он как раз в итераторе, который читал данные, но писал их лишь из под mutex
* Мы по-прежнему на std::map
Что нам нужно?
Нам нужна структура, которая позволит с максимальной скоростью и минимальными потерями памяти сохранить значение по целочисленному беззнаковому 32 битному ключу. Особенность ключа в том, что он лежит в интервале от нуля о 2^32, но строго не последовательно, а непрерывными 50-100 блоками (разыне подсети).
При этом, структура должна обеспечивать возможность работы в многопоточном режиме в конфигурации - один пишет, а другой читает, по возможности с минимальным использованием блокировок.
Требования к скорости ~ 1^-6 для записи.