mirror of
https://github.com/pavel-odintsov/fastnetmon
synced 2024-11-23 17:32:59 +01:00
big optimization
This commit is contained in:
parent
1efd8fce10
commit
245a9d308e
2
Makefile
2
Makefile
@ -29,7 +29,7 @@ ifeq ($(REDIS_SUPPORT), yes)
|
||||
endif
|
||||
|
||||
ifeq ($(ENGINE), PCAP)
|
||||
LIBS = -lpcap
|
||||
LIBS += -lpcap
|
||||
endif
|
||||
|
||||
fastnetmon: libipulog.o fastnetmon.o
|
||||
|
@ -6,7 +6,6 @@
|
||||
4) Перейти на cap_admin при работе от штатного юзера
|
||||
5) Оптимизировать belongs_to_network на префиксном дереве
|
||||
6) Не создавайте больших списков сетей! Будет тормозить!
|
||||
|
||||
*/
|
||||
|
||||
/* Author: pavel.odintsov@gmail.com */
|
||||
@ -32,7 +31,7 @@
|
||||
#include <algorithm>
|
||||
#include <iostream>
|
||||
#include <map>
|
||||
//#include <unordered_map>
|
||||
#include <unordered_map>
|
||||
#include <vector>
|
||||
#include <utility>
|
||||
#include <sstream>
|
||||
@ -130,7 +129,7 @@ typedef struct {
|
||||
int out_packets;
|
||||
} map_element;
|
||||
|
||||
typedef map <uint32_t, map_element> map_for_counters;
|
||||
typedef unordered_map <uint32_t, map_element> map_for_counters;
|
||||
// data structure for storing data in Vector
|
||||
typedef pair<uint32_t, map_element> 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<subnet> our_networks;
|
||||
vector<subnet> 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<string> networks_list_as_string;
|
||||
// если мы на openvz ноде, то "свои" IP мы можем получить из спец-файла в /proc
|
||||
string our_networks_netmask;
|
||||
|
Loading…
Reference in New Issue
Block a user