[so2] [Upstream Challenge] Compilator BPF JIT pentru PowerPC32

Mircea Gherzan mgherzan at gmail.com
Sun Mar 18 00:16:31 EET 2012


Salutare,

Filtrarea capturilor de pachete din nucleul Linux este bazata pe BPF
[1]: un interpretor executa un filtru reprezentat prin instructiuni
RISC-like. Performanta poate fi imbunatatita prin compilare Just-In-Time
in cod masina pentru gazda, astfel incat sa se elimine overhead-ul de
interpretare.

Compilatorul BPF din kernel pentru PowerPC [2] suporta doar variata pe
64 de biti a acestei arhitecturi. Patch-ul vostru trebuie sa introduca
si functionalitatea  pe 32 biti, cel mai probabil pe baza de blocuri
#ifdef CONFIG_*.

La o prima vedere, in fisierul C:
 * trebuie umblat la PACA (nu exista pe 32biti)
 * trebuie ajustata salvarea/restaurarea registrilor in prolog/epilog si
   dimensiunea stackframe-ului
 * incarcarea adreselor functiilor se face cu LI32 in loc de LI64

Cat despre sursa in limbaj de asamblare [3]... fie o sursa noua _32.S,
fie metoda #ifdef. La o prima vedere, e vorba doar de stackframe.

Recomand sa aveti in vedere ABI-ul [4] si arhitectura setului de
instructiuni [5].

Pentru ca nu e vorba de IA32 sau Intel64, aveti nevoie de un
cross-compiler. Ca si in cazul Linaro/ARM, recomandarea mea este sa va
compilati un toolchain folosing crosstool-ng. Tripletul target este acum
powerpc-linux-gnu.

Pentru testare aventi nevoie de un emulator PowerPC. QEMU e o solutie.
In cursul zilei veti gasi pe swarm [6] o imagine Debian pentru QEMU si
un script pentru a o rula. User "test" cu parola "test", root cu parola
"root" :)

Patch-ul trebuie directat catre lista linuxppc-dev si catre autorul
initial (Matt Evans).

Mircea

[1] http://www.tcpdump.org/papers/bpf-usenix93.pdf
[2] http://lxr.linux.no/linux+v3.2.11/arch/powerpc/net/bpf_jit_comp.c
[3] http://lxr.linux.no/linux+v3.2.11/arch/powerpc/net/bpf_jit_64.S
[4]
https://www.power.org/resources/downloads/Power-Arch-32-bit-ABI-supp-1.0-Linux.pdf
[5] https://www.power.org/resources/downloads/PowerISA_V2.06B_V2_PUBLIC.pdf
[6] http://swarm.cs.pub.ro/~mgherzan/pub/powerpc-qemu/


More information about the so2 mailing list