Skip to content

Instantly share code, notes, and snippets.

View pavel-odintsov's full-sized avatar
🛡️
On mission to deliver affordable DDoS protection

Pavel Odintsov pavel-odintsov

🛡️
On mission to deliver affordable DDoS protection
View GitHub Profile
@pavel-odintsov
pavel-odintsov / gist:dcf6569f2ad9619e4d83aeae52311f1d
Created July 1, 2022 15:19
Ryzen 7 5800X with number of buckets boost::unordered
Loaded 183978 IPs into memory
std::map big endian
Total lookup time is 31 seconds
Million of lookup ops per second: 5.85925
Total scan time is 3 seconds
Million of full scan ops per second: 40.3343
Accumulator value to guarantee no optimisation tricks from compiler: 183978000000
std::map little endian
@pavel-odintsov
pavel-odintsov / gist:5fc97731b63aee8c4f7927507c94c003
Created July 1, 2022 15:02
Performance tests for Boost on Ryzen 7 5800X
Loaded 183978 IPs into memory
std::map big endian
Total lookup time is 31 seconds
Million of lookup ops per second: 5.81285
Total scan time is 4 seconds
Million of full scan ops per second: 38.8132
Accumulator value to guarantee no optimisation tricks from compiler: 183978000000
std::map little endian
@pavel-odintsov
pavel-odintsov / compare.txt
Last active June 30, 2022 12:58
Boost 1.79 vs Boost 1.80 little endian and big endian
1.78:
Loaded 183978 IPs into memory
std::map big endian
Total time is 60 seconds total ops: 183978000
Million of ops per second: 3.09965
std::map little endian
Total time is 58 seconds total ops: 183978000
@pavel-odintsov
pavel-odintsov / performance.patch
Created June 29, 2022 18:26
Boost 1.78 vs 1.80 diff
--- 78 2022-06-29 19:25:43.444689862 +0100
+++ 80 2022-06-29 19:25:46.944734452 +0100
@@ -1,49 +1,50 @@
Element size: 248 bytes
Total structure size: 2365 Mbytes
-std::map: 5.1 mega ops per second
-std::map big endian keys full scan: 17.3 mega ops per second
-std::map big endian keys: 1.4 mega ops per second
CPU: AMD Ryzen 5 3600 6-Core Processor
Boost 1.78
Element size: 248 bytes
Total structure size: 2365 Mbytes
std::map: 5.1 mega ops per second
std::map big endian keys full scan: 17.3 mega ops per second
@pavel-odintsov
pavel-odintsov / gist:6e996075809e6a0362459e5ba583519b
Created June 29, 2022 13:48
Boost 1.79 traffic structures on Ryzen 7 5800X
Element size: 248 bytes
Total structure size: 2365 Mbytes
std::map: 6.4 mega ops per second
std::map big endian keys full scan: 32.2 mega ops per second
std::map big endian keys: 2.4 mega ops per second
std::map big endian keys full scan: 10.6 mega ops per second
CPU: AMD Ryzen 5 3600 6-Core Processor
Boost 1.78
Element size: 248 bytes
Total structure size: 2365 Mbytes
std::map: 5.1 mega ops per second
std::map big endian keys full scan: 17.3 mega ops per second
Element size: 248 bytes
Total structure size: 2365 Mbytes
std::map: 5.5 mega ops per second
std::map big endian keys full scan: 17.2 mega ops per second
std::map big endian keys: 1.3 mega ops per second
std::map big endian keys full scan: 6.3 mega ops per second
@pavel-odintsov
pavel-odintsov / signal_prefix.pl
Created April 13, 2022 15:47
FastNetMon Advanced callback script to announce specific signal prefix when we detect an attack
#!/usr/bin/perl
use strict;
use warnings;
use JSON;
use Data::Dumper;
my $community = '65000:777';
@pavel-odintsov
pavel-odintsov / traffic_structures_performance_tests.cpp
Created February 21, 2022 23:25
Example code to reproduce libsparsehash segmentation faults
#include <functional>
#include <iomanip>
#include <iostream>
#include <locale.h>
#include <map>
#include <stdint.h>
#include <sys/time.h>
#include <unistd.h>
#include "../fastnetmon_types.h"