Ceci est un guide sur le développement de BESS (Berkeley Extensible Software Switch). Le Wiki officiel n'a qu'une version anglaise et il y a peu de contenu, donc je vais écrire ce mémo. Ce mémo comprend un contenu important sur le Wiki officiel, ainsi que des connaissances et des découvertes lors du développement et de la lecture du code source. Si cela aide quelqu'un, ce sera de la chance.
Page officielle-> BESS Wiki officiel et Repo-> BESS Wiki
Ubuntu 18.04 LTS recommandé
Nous vous recommandons d'installer Ubuntu sur VMware. Si vous profitez de la fonction d'instantané et que le système subit des dommages irréparables, vous pouvez facilement revenir à la normale. N'installez jamais assez de mémoire dans la VM, 2-4 Go est un guide.
BESS nécessite les packages logiciels suivants:
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
Exécutez des clones et des scripts depuis Repo:
git clone https://github.com/NetSys/bess.git
cd bess/
sudo ./build.py
Si la sortie est la suivante, la construction est réussie:
> 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.
deps```, et compilez à nouveau.
core, il est recommandé de supprimer les fichiers `` * .o
associés avant la reconstruction.
core / pb``` est généré par protobuf, il n'y a donc rien avant la construction.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
Cette installation est requise à chaque redémarrage.
Exécutez la commande suivante (la commande diffère selon le système):
# 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
Exécutez la commande suivante
> sudo bessctl/bessctl
Type "help" for more information.
Connection to localhost:10514 failed
Perhaps bessd daemon is not running locally? Try "daemon start".
<disconnected> $
Puis lancez
daemon start```:
Done.
localhost:10514 $
À ce moment, BESS a déjà été lancé.
Lançons un script de test:
$ run samples/acl
Par conséquent:
Done.
localhost:10514 $
Il n'y a pas de sortie. La raison est que ce script n'inclut aucune commande de sortie. Entrez la commande `` Monitor pipeline '' et obtenez la sortie suivante:
C'est la preuve que le script de test est exécuté avec succès.
J'utilise actuellement Python 3 pour Linux, mais j'écris Python 2 pour BESS, donc si j'obtiens le message d'erreur suivant:
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
Exécutez bessctl sur Python2:
python2 bessctl/bessctl
Ensuite, je vais vous présenter comment écrire un script BESS. Vous devez également comprendre comment utiliser les modules de BESS.
Recommended Posts