[LINUX] Mémo de développement BESS Partie 01: Installation et utilisation de base de BESS

introduction

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

Environnement de développement

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.

Installation de dépendance

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

Construire

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.

Remarques

  1. Si vous ne parvenez pas à télécharger le DPDK au milieu d'une construction, téléchargez donc manuellement la sortie, décompressez-la dans le dossier deps```, et compilez à nouveau.
  2. Si vous modifiez le code source de core, il est recommandé de supprimer les fichiers `` * .o associés avant la reconstruction.
  3. Le code source dans le dossier core / pb``` est généré par protobuf, il n'y a donc rien avant la construction.
  4. Tous les avertissements sont traités comme des erreurs. S'il y a une erreur, la construction échouera définitivement.
  5. N'installez jamais une grande page après la construction. Si l'ordre est erroné, la prochaine ère peut se produire:
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

Installation d'une énorme page

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

Démarrez BESS et exécutez le script de test

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:

success.jpg

C'est la preuve que le script de test est exécuté avec succès.

Remarques

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

A continué

Ensuite, je vais vous présenter comment écrire un script BESS. Vous devez également comprendre comment utiliser les modules de BESS.

Recommended Posts

Mémo de développement BESS Partie 01: Installation et utilisation de base de BESS
Installation de Python et grammaire de base
notes d'utilisation de la commande virtualenv Basic
Installation de Python (Python 3.7.7) et grammaire de base
Installation d'Elasticsearch et fonctionnement de base pour ubuntu
Comment installer le tissu et comment l'utiliser
Mémo de base Flask
[Python] Chapitre 01-02 À propos de Python (Exécution et installation de l'environnement de développement)
installation de python openCV (mémo)
Cours de base Python (2 installation Python)
Mémo de calcul de base Numpy
installation de jupyter et pandas
Utilisation basique de flask-classy
Utilisation de base de Jinja2
Utilisation de base de SQL Alchemy
Mémo de base Python - Partie 2
Notes de commande de base Python
Mémo de grammaire de base Python
Mémo de base Python - Partie 1
[Memo] Environnement de développement Django
Note d'utilisation deap (OneMax)
Préparation du test RHCSA - Fonction de stockage Présentation et utilisation du VDO (édition de base)