Dies ist ein Leitfaden zur Entwicklung von BESS (Berkeley Extensible Software Switch). Das offizielle Wiki hat nur eine englische Version und es gibt wenig Inhalt, deshalb werde ich dieses Memo schreiben. Dieses Memo enthält wichtige Inhalte im offiziellen Wiki sowie Verständnis und Entdeckungen beim Entwickeln und Lesen des Quellcodes. Wenn es jemandem hilft, wird es Glück haben.
Offizielle Seite-> BESS Offizielles Wiki und Repo-> BESS Wiki
Ubuntu 18.04 LTS empfohlen
Wir empfehlen die Installation von Ubuntu auf VMware. Wenn Sie die Snapshot-Funktion nutzen und das System irreparable Schäden erleidet, können Sie problemlos zum Normalzustand zurückkehren. Installieren Sie niemals genügend Speicher in der VM. 2-4 GB sind eine Anleitung.
BESS benötigt die folgenden Soft Packages:
sudo apt install make apt-transport-https ca-certificates g++ make pkg-config libunwind8-dev liblzma-dev zlib1g-dev libpcap-dev libssl-dev libnuma-dev git python python-pip python-scapy libgflags-dev libgoogle-glog-dev libgraph-easy-perl libgtest-dev libgrpc++-dev libprotobuf-dev libc-ares-dev libbenchmark-dev libgtest-dev protobuf-compiler-grpc
pip install --user protobuf grpcio scapy
Führen Sie Klone und Skripte von Repo aus:
git clone https://github.com/NetSys/bess.git
cd bess/
sudo ./build.py
Wenn die Ausgabe als nächstes erfolgt, ist der Build erfolgreich:
> sudo ./build.py
Configuring DPDK...
- "Mellanox OFED" is not available. Disabling MLX4 and MLX5 PMDs...
Building DPDK...
Generating protobuf codes for pybess...
Building BESS daemon...
Building BESS kernel module (4.15.0-74-generic - running kernel) ...
Done.
core``` ändern, wird empfohlen, die zugehörigen
`* .o```-Dateien vor dem erneuten Erstellen zu löschen.Log:
make: Entering directory '/home/****/bess/core'
[CXX] opts.o
[CXX] worker.o
[CXX] packet_pool.o
[CXX] task.o
[CXX] resume_hook.o
[CXX] memory.o
[CXX] dpdk.o
[CXX] event.o
[CXX] gate.o
[CXX] port.o
[CXX] main.o
[CXX] debug.o
[CXX] module_graph.o
[CXX] bessctl.o
g++: internal compiler error: Killed (program cc1plus)
Please submit a full bug report,
with preprocessed source if appropriate.
See <file:///usr/share/doc/gcc-7/README.Bugs> for instructions.
Error: bessctl.o
g++ -o bessctl.o -c bessctl.cc -std=c++17 -g3 -ggdb3 -march=native -isystem /home/****/bess/deps/dpdk-17.11/build/include -isystem /home/****/bess/core -isystem ./.. -isystem /home/****/bess/core/modules -D_GNU_SOURCE -Werror -Wall -Wextra -Wcast-align -Wno-error=deprecated-declarations -pthread -I/usr/include/x86_64-linux-gnu -fno-gnu-unique -O3 -DNDEBUG -MT bessctl.o -MMD -MP -MF .deps/bessctl.d
Makefile:439: recipe for target 'bessctl.o' failed
make: *** [bessctl.o] Error 1
make: Leaving directory '/home/****/bess/core'
Error has occured running command: make -j1 -C core
Diese Installation ist für jeden Neustart erforderlich.
Führen Sie den folgenden Befehl aus (der Befehl ist je nach System unterschiedlich):
# For single-node systems
sudo sysctl vm.nr_hugepages=1024
# For multi-node (NUMA) systems
echo 1024 | sudo tee /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages
echo 1024 | sudo tee /sys/devices/system/node/node1/hugepages/hugepages-2048kB/nr_hugepages
Führen Sie den folgenden Befehl aus
> sudo bessctl/bessctl
Type "help" for more information.
Connection to localhost:10514 failed
Perhaps bessd daemon is not running locally? Try "daemon start".
<disconnected> $
Führen Sie dann `` `daemon start``` aus:
Done.
localhost:10514 $
Zu diesem Zeitpunkt wurde BESS bereits gestartet.
Lassen Sie uns ein Testskript ausführen:
$ run samples/acl
als Ergebnis:
Done.
localhost:10514 $
Es erfolgt keine Ausgabe. Der Grund ist, dass dieses Skript keine Ausgabebefehle enthält. Geben Sie den Befehl "Monitor Pipeline" ein und erhalten Sie die folgende Ausgabe:
Dies ist ein Beweis dafür, dass das Testskript erfolgreich ausgeführt wurde.
Ich verwende derzeit Python 3 für Linux, schreibe aber Python 2 für BESS. Wenn also die folgende Fehlermeldung angezeigt wird:
Traceback (most recent call last):
File "bessctl/bessctl", line 186, in <module>
main()
File "bessctl/bessctl", line 170, in main
run_cli()
File "bessctl/bessctl", line 159, in run_cli
cli.loop()
File "bessctl/bessctl", line 134, in loop
super(BESSCLI, self).loop()
File "/home/****/bess/bessctl/cli.py", line 528, in loop
self.process_one_line()
File "/home/****/bess/bessctl/cli.py", line 440, in process_one_line
self.call_func(func, args)
File "bessctl/bessctl", line 95, in call_func
super(BESSCLI, self).call_func(func, args)
File "/home/****/bess/bessctl/cli.py", line 411, in call_func
func(*args)
File "/home/****/bess/bessctl/commands.py", line 1720, in monitor_pipeline
_monitor_pipeline(cli, 'pkts', '', graph_args=opts)
File "/home/****/bess/bessctl/commands.py", line 1711, in _monitor_pipeline
graph_args=graph_args))
File "/home/****/bess/bessctl/commands.py", line 1389, in _draw_pipeline
node_labels[gate.name]), file=f.stdin)
TypeError: a bytes-like object is required, not 'str
Führen Sie bessctl auf Python2 aus:
python2 bessctl/bessctl
Als nächstes werde ich vorstellen, wie man ein BESS-Skript schreibt. Sie sollten auch verstehen, wie Sie die Module von BESS verwenden.
Recommended Posts