aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md21
1 files changed, 11 insertions, 10 deletions
diff --git a/README.md b/README.md
index 6396912..173f209 100644
--- a/README.md
+++ b/README.md
@@ -29,7 +29,9 @@ ifstat
## Установка
Целевая система: Debian 9 (stretch), amd64
-Процесс установки проверен вручную с помощью Vagrant (образ `debian/stretch64`)
+
+Команды установки и запуска проверены вручную через Vagrant (образ
+`debian/stretch64`)
```shell
echo "deb http://deb.debian.org/debian stretch-backports main contrib non-free" | sudo tee /etc/apt/sources.list.d/backports.list && \
@@ -59,7 +61,7 @@ sudo ./ifstat.lua # запуск клиента (отображение ста
```
В качестве конфига используется находящийся рядом с `ifstatd.lua`
-файл `config.lua`.
+файл `config.lua`:
```lua
local _config = {
@@ -98,29 +100,28 @@ eBPF вешается на XDP-хук (eXpress Data Path), что позволя
написан на Си (`ifstat_kern.c`). Процессом компиляции и инъекцией
этого кода в ядро занимается lua-скрипт, основанный на официальных
байндингах проекта [bcc][bcc] (это фреймворк упрощает процесс
-создания утилит, использующих eBPF). Непосредственно компиляцией
-занимается LLVM/Clang.
+создания утилит, использующих eBPF).
## Почему я выбрал Lua в качестве вспомогательного языка?
1. Весь критичный к производительности код запускается в ядре и
написан на Си, всё остальное (парсинг конфигов и командной
строки, инъекция eBPF, вычитка готовых данных, отправка данных
- по ubus) можно было написать на любом подходящем для этих задач
+ по ubus) можно написать на любом подходящем для этих задач
языке;
- 2. Проект bcc официально поддерживает нативный интерфейс
+ 2. Проект `bcc` официально поддерживает нативный интерфейс
(библиотеку libbcc) для инъекции eBPF в ядро и байндинги к нему
поддерживаются непосредственно разработчиком только для Lua и
Python -- выбор сильно сужается;
- 3. Проект ubus предоставляет только нативный интерфейс и
+ 3. Проект `ubus` предоставляет только нативный интерфейс и
Lua-байндинги;
- 4. Идея написать с нуля и поддерживать байндинги для bcc или ubus
- для других языков откидывается сразу.
+ 4. Идея написать с нуля и поддерживать байндинги для `bcc` или
+ `ubus` для других языков откидывается сразу.
-Таким образом, на выбор остаются только Си и Lua. Писать на Lua
+Таким образом на выбор остаются только Си и Lua. Писать на Lua
обработку конфигов и сериализацию/десериализацию данных значительно
проще и приятнее, чем на Си, поэтому Lua и был выбран.