136 lines
4.5 KiB
Makefile
136 lines
4.5 KiB
Makefile
# ─────────────────────────────────────────────────────────
|
|
# Makefile — Compila o programa eBPF sockmap
|
|
#
|
|
# Comandos:
|
|
# make → Compila tudo
|
|
# make vmlinux → Gera vmlinux.h do kernel atual
|
|
# make bpf → Compila o programa BPF
|
|
# make clean → Limpa arquivos compilados
|
|
# make docker-up → Sobe os containers Docker
|
|
# make docker-down→ Para os containers
|
|
# make load → Carrega o eBPF sockmap
|
|
# make unload → Remove o eBPF sockmap
|
|
# make status → Mostra status do sockmap
|
|
# make benchmark → Roda benchmark de latência
|
|
# ─────────────────────────────────────────────────────────
|
|
|
|
# Compilador e flags
|
|
CLANG ?= clang
|
|
BPFTOOL ?= bpftool
|
|
ARCH := $(shell uname -m | sed 's/x86_64/x86/' | sed 's/aarch64/arm64/')
|
|
|
|
# Diretórios
|
|
BPF_SRC := bpf
|
|
BUILD_DIR := build
|
|
LIBBPF_INC := /usr/include
|
|
|
|
# Arquivos
|
|
BPF_PROG := $(BPF_SRC)/sockmap.bpf.c
|
|
BPF_OBJ := $(BUILD_DIR)/sockmap.bpf.o
|
|
VMLINUX_H := $(BPF_SRC)/vmlinux.h
|
|
|
|
# Flags de compilação BPF
|
|
BPF_CFLAGS := -O2 -g \
|
|
-target bpf \
|
|
-D__TARGET_ARCH_$(ARCH) \
|
|
-I$(BPF_SRC) \
|
|
-I$(LIBBPF_INC) \
|
|
-Wall \
|
|
-Wno-unused-value \
|
|
-Wno-pointer-sign \
|
|
-Wno-compare-distinct-pointer-types \
|
|
-Wno-missing-declarations
|
|
|
|
# ─── Alvos principais ───
|
|
.PHONY: all vmlinux bpf clean docker-up docker-down load unload status benchmark help
|
|
|
|
all: vmlinux bpf
|
|
@echo ""
|
|
@echo "✅ Compilação concluída! Objeto BPF em: $(BPF_OBJ)"
|
|
@echo ""
|
|
@echo "Próximos passos:"
|
|
@echo " 1. make docker-up → Subir os containers"
|
|
@echo " 2. make load → Ativar o eBPF sockmap"
|
|
@echo " 3. make benchmark → Testar a latência"
|
|
|
|
# ─── Gerar vmlinux.h ───
|
|
vmlinux: $(VMLINUX_H)
|
|
|
|
$(VMLINUX_H):
|
|
@echo "🔧 Gerando vmlinux.h a partir do kernel $(shell uname -r)..."
|
|
@mkdir -p $(BPF_SRC)
|
|
$(BPFTOOL) btf dump file /sys/kernel/btf/vmlinux format c > $(VMLINUX_H)
|
|
@echo "✅ vmlinux.h gerado com sucesso!"
|
|
|
|
# ─── Compilar programa BPF ───
|
|
bpf: $(BPF_OBJ)
|
|
|
|
$(BPF_OBJ): $(BPF_PROG) $(VMLINUX_H)
|
|
@echo "🔧 Compilando programa eBPF..."
|
|
@mkdir -p $(BUILD_DIR)
|
|
$(CLANG) $(BPF_CFLAGS) -c $(BPF_PROG) -o $(BPF_OBJ)
|
|
@echo "✅ Programa BPF compilado: $(BPF_OBJ)"
|
|
@echo ""
|
|
@echo "📋 Programas e mapas no objeto:"
|
|
@$(BPFTOOL) prog show --bpffs 2>/dev/null || true
|
|
@echo ""
|
|
|
|
# ─── Docker ───
|
|
docker-up:
|
|
@echo "🐳 Subindo containers Docker..."
|
|
cd docker && docker compose up -d --build
|
|
@echo ""
|
|
@echo "✅ Containers rodando! Acesse http://localhost:8080"
|
|
|
|
docker-down:
|
|
@echo "🐳 Parando containers Docker..."
|
|
cd docker && docker compose down -v
|
|
@echo "✅ Containers parados."
|
|
|
|
docker-logs:
|
|
cd docker && docker compose logs -f
|
|
|
|
# ─── eBPF Sockmap ───
|
|
load:
|
|
@echo "⚡ Carregando eBPF sockmap..."
|
|
sudo bash scripts/loader.sh load
|
|
|
|
unload:
|
|
@echo "⚡ Removendo eBPF sockmap..."
|
|
sudo bash scripts/loader.sh unload
|
|
|
|
status:
|
|
@sudo bash scripts/loader.sh status
|
|
|
|
# ─── Benchmark ───
|
|
benchmark:
|
|
@echo "📊 Rodando benchmark de latência..."
|
|
@echo " Acesse: http://localhost:8080/benchmark"
|
|
@curl -s http://localhost:8080/benchmark | python3 -m json.tool 2>/dev/null || \
|
|
curl -s http://localhost:8080/benchmark
|
|
@echo ""
|
|
|
|
# ─── Limpeza ───
|
|
clean:
|
|
rm -rf $(BUILD_DIR)
|
|
rm -f $(VMLINUX_H)
|
|
@echo "🧹 Limpeza concluída."
|
|
|
|
# ─── Ajuda ───
|
|
help:
|
|
@echo "eBPF Sockmap — Acelerador de comunicação entre containers Docker"
|
|
@echo ""
|
|
@echo "Comandos disponíveis:"
|
|
@echo " make Compila o programa eBPF (vmlinux.h + .o)"
|
|
@echo " make vmlinux Gera apenas o vmlinux.h"
|
|
@echo " make bpf Compila apenas o programa BPF"
|
|
@echo " make docker-up Sobe os containers (nginx + node + mysql + postgres)"
|
|
@echo " make docker-down Para e remove os containers"
|
|
@echo " make docker-logs Mostra logs dos containers"
|
|
@echo " make load Carrega e ativa o eBPF sockmap"
|
|
@echo " make unload Remove o eBPF sockmap"
|
|
@echo " make status Mostra status e estatísticas"
|
|
@echo " make benchmark Roda teste de latência"
|
|
@echo " make clean Limpa arquivos compilados"
|
|
@echo ""
|