aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Nazaryev <sergey@nazaryev.ru>2018-11-06 16:55:47 +0000
committerSergey Nazaryev <sergey@nazaryev.ru>2018-11-06 16:55:47 +0000
commit04efa585aa227d44dad4a8f313bdc4e5bd2a9de5 (patch)
treedda54c4f56430ffac02e6f0e51c26b0118581444
parent013563a8065725111b093c9be200485b02354685 (diff)
downloadifstat-04efa585aa227d44dad4a8f313bdc4e5bd2a9de5.zip
ifstat-04efa585aa227d44dad4a8f313bdc4e5bd2a9de5.tar.gz
ifstat-04efa585aa227d44dad4a8f313bdc4e5bd2a9de5.tar.bz2
README.md: cosmetic fix
-rw-r--r--README.md32
1 files changed, 18 insertions, 14 deletions
diff --git a/README.md b/README.md
index 83044f4..2a634ff 100644
--- a/README.md
+++ b/README.md
@@ -9,7 +9,6 @@ ifstat
## Зависимости
-
- актуальное ядро Linux с поддержкой eBPF и XDP (4.4+ должно подойти);
- запущенный ubusd, установленные libubus (скомпиленный с
@@ -25,14 +24,18 @@ ifstat
1. **IMPORTANT!** Перейти с `BPF_ARRAY` на `BPF_TABLE("percpu_array", ...)`
- 2. Завести автоматические тесты с `tcpreplay`, созданием
- TAP-устройства и проверкой полученной статистики;
+ 2. Завести автоматические тесты с запуском `tcpreplay`, созданием
+ виртуального сетевого интерфейса и валидацией полученной
+ статистики;
3. Написать инструкцию/скрипт с точностью до команд, с информацией
о том, как установить все необходимые зависимости для Debian;
4. Провести ручное нагрузочное тестирование на реальном железе с
- Debian и посмотреть на производительность.
+ Debian и посмотреть на производительность;
+
+ 5. Перейти с lua-based конфига на что-то, что можно адекватно
+ валидировать (ini/yaml/toml).
## Запуск и конфигурация
@@ -70,16 +73,17 @@ local _config = {
## Архитектура
Для того, чтобы собирать статистику максимально эффективно,
-используется интерфейс ядра [eBPF][ebpf]. Это даёт возможность
-запускать код, подсчитывающий необходимую статистику прямо в ядре.
-Кроме того, для наибольшей производительности eBPF вешается на
-XDP-хук (eXpress Data Path), что позволяет получить доступ до пакета
-даже раньше, чем он будет обработан сетевым стеком ядра.
+используется интерфейс ядра [eBPF][ebpf]. Этот интерфейс даёт
+возможность встроить код прямо в ядро, который будет подсчитывать
+необходимую статистику. Кроме того, для наибольшей производительности
+eBPF вешается на XDP-хук (eXpress Data Path), что позволяет получить
+доступ до пакета даже раньше, чем он будет обработан сетевым стеком
+ядра.
Основной код, задействованный в фильтрации и подсчёте статистики,
написан на Си (`ifstat_kern.c`). Процессом компиляции и инъекцией
этого кода в ядро занимается lua-скрипт, основанный на официальных
-байндингах проекта [bcc][bcc] (это фреймворк, упрощающий процесс
+байндингах проекта [bcc][bcc] (это фреймворк упрощает процесс
создания утилит, использующих eBPF). Непосредственно компиляцией
занимается LLVM/Clang.
@@ -100,11 +104,11 @@ XDP-хук (eXpress Data Path), что позволяет получить до
Lua-байндинги;
4. Идея написать с нуля и поддерживать байндинги для bcc или ubus
- ля других языков откидывается сразу.
+ для других языков откидывается сразу.
-Таким образом, на выбор остаются только Си и Lua. Писать на
-Lua обработку конфигов и сериализацию/десериализацию данных
-значительно проще и приятнее, чем на Си, поэтому Lua и был выбран.
+Таким образом, на выбор остаются только Си и Lua. Писать на Lua
+обработку конфигов и сериализацию/десериализацию данных значительно
+проще и приятнее, чем на Си, поэтому Lua и был выбран.
## Пример вывода утилиты ifstat