From 245a9d308e0dc48ce6d17195b069099359230bcd Mon Sep 17 00:00:00 2001 From: Pavel Odintsov Date: Thu, 14 Nov 2013 21:26:30 +0400 Subject: [PATCH] big optimization --- Makefile | 2 +- fastnetmon.cpp | 11 ++++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index 110c74e..7c115b8 100644 --- a/Makefile +++ b/Makefile @@ -29,7 +29,7 @@ ifeq ($(REDIS_SUPPORT), yes) endif ifeq ($(ENGINE), PCAP) - LIBS = -lpcap + LIBS += -lpcap endif fastnetmon: libipulog.o fastnetmon.o diff --git a/fastnetmon.cpp b/fastnetmon.cpp index 92dc3c1..2dd5d14 100644 --- a/fastnetmon.cpp +++ b/fastnetmon.cpp @@ -6,7 +6,6 @@ 4) Перейти на cap_admin при работе от штатного юзера 5) Оптимизировать belongs_to_network на префиксном дереве 6) Не создавайте больших списков сетей! Будет тормозить! - */ /* Author: pavel.odintsov@gmail.com */ @@ -32,7 +31,7 @@ #include #include #include -//#include +#include #include #include #include @@ -130,7 +129,7 @@ typedef struct { int out_packets; } map_element; -typedef map map_for_counters; +typedef unordered_map map_for_counters; // data structure for storing data in Vector typedef pair pair_of_map_elements; @@ -175,6 +174,9 @@ time_t start_time; // стандартно у нас смещение для типа DLT_EN10MB, Ethernet int DATA_SHIFT_VALUE = 14; +// начальный размер unordered_map для хранения данных +int MAP_INITIAL_SIZE = 1024; + vector our_networks; vector whitelist_networks; @@ -447,6 +449,9 @@ bool load_our_networks_list() { subnet white_subnet = std::make_pair(convert_ip_as_string_to_uint("159.253.17.0"), convert_cidr_to_binary_netmask(24)); whitelist_networks.push_back(white_subnet); + // Так как мы используем неотсортированный map, то для оптимизации его работы стоит указать требуемый размер хэша + DataCounter.reserve(MAP_INITIAL_SIZE); + vector networks_list_as_string; // если мы на openvz ноде, то "свои" IP мы можем получить из спец-файла в /proc string our_networks_netmask;