Files
server-mv/ebpf-sockmap/Makefile
T

135 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
# ─── 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 ""