Table des matières

Dans l'architecture des commutateurs traditionnels , Le système d'exploitation du réseau est fourni par les fabricants d'équipements sur la base des fabricants de puces. ASICPuces etSDKAuto - conception、Développement, Les fabricants d'équipements doivent développer la couche supérieure APP、 Couche d'adaptation pour compléter l'application dans un fournisseur d'équipement spécifique , Réaliser diverses fonctions de réseau . Le développement du matériel et des logiciels de commutation traditionnels est fourni par le fabricant de l'équipement. , Système complètement fermé , Incapacité de s'adapter au déploiement rapide de nouvelles fonctionnalités :

Pour construire un système ouvert ,OCP(Open Compute Project, Projet de calcul du développement ) Commencez à pousser le matériel 、 Open Source and Standardization Process of Network Operating System .Parmi eux,SONiC (Software for Open Network in the Cloud) C'est Microsoft 2016Lancé en,Et dans2017Hommage annuelOCPProjets pour.SONiC Tous les modules de fonctions logicielles sont Open Source , C'est un grand coup de pouce OCP Communauté et autres fournisseurs / Innovation des utilisateurs dans les réseaux ouverts .SONiCParSAI En tant qu'intergiciel d'interconnexion nord - Sud , Blindage différent ASIC Différences de conduite entre ,C'est précisément parce queSAIL'existence de,SONiC L'application de la fonction réseau peut supporter plusieurs fabricants ASIC. Le logiciel de réseau est basé sur l'interface abstraite du commutateur (SAI,SAIAdaptateur d'interfaceASIC Le travail est réalisé par chaque fabricant )Allez., Pour qu'il puisse fonctionner sur une variété d'appareils matériels , Former une chaîne écologique logicielle de commutation de boîte blanche .

SONiCDepuis le lancement, Rapidement soutenu par l'industrie , La plupart des fournisseurs de puces réseau SDKSoutien supérieurSAI, Et coopérer avec Microsoft pour SAI Version ajouter une nouvelle interface , Comme l'interface d'analyse de réseau 、L3 Réacheminement rapide et BFDAttendez..

Architecture du système

SONiCConstruit surLinuxAu - dessus du système, Et utiliser une base de données de clés (redis)、Technologie des conteneurs(docker)、 Définition normalisée de l'interface matérielle, etc. , Pour en faire un découplage complet du matériel et des logiciels 、 Module logiciel faiblement couplé (loose coupling)、Haute fiabilité、Facile à étendre、 Open Source Open Network Software System . Ses caractéristiques structurelles se reflètent principalement dans: 3Aspects:

  • SAIInterface:SAI- Oui.SONiCAu cœur de,Et pourSONiCOffre uneAPI. Fabricant du matériel 、 Les développeurs de réseaux peuvent fournir SAI Application de développement d'interface , Sans se soucier des implémentations matérielles sous - jacentes , Accélérer l'itération et l'innovation des produits ;
  • Schéma de base de données: En termes de schéma de base de données ,SONiC Remplacer l'architecture modulaire couplée par l'architecture de base de données , Transformer le mode de transfert de données entre les modules d'application en mode d'échange de données entre les modules d'application par l'intermédiaire de la base de données , Passer d'un processus axé sur les données à un processus axé sur les données , Réaliser le découplage entre les modules fonctionnels . La base de données est devenue le pivot de tous les modules , Découplage entre modules , La base de données est stable , Les mises à niveau et les défaillances des modules individuels n'affectent pas les autres modules. , La surface de transfert n'est pas affectée tout au long du processus de commutation ;
  • Composants conteneurisés : La conteneurisation rend SONiCTrès extensible, Les gestionnaires d'exploitation de réseau peuvent rapidement introduire des tiers 、 Composants propriétaires ou Open Source , Sans incidence sur les activités initiales ;
  • Moins d'interaction avec le noyau : Fonctionnant dans l'espace Utilisateur SONiCSystème, Quelques modules seulement (pmon、swssEtsyncd)AvecLinux Interaction entre les noyaux , Afin d'assurer la stabilité du système .

Principes de conception

  • Concept de découplage du matériel et des logiciels et définition normalisée des interfaces logicielles et matérielles , Développement rapide du système logiciel réseau et de la plate - forme matérielle ;
  • L'évolution du système logiciel réseau , Peut également permettre des itérations rapides 、Sur demande、 La construction communautaire devient possible ;
  • Le développement de logiciels réseau a formé une nouvelle co - Construction 、Partage、 Un écosystème de réseau ouvert , Accélérer le développement du réseau lui - même ;
  • Microsoft open sourceSONiCEn même temps, L'expérience de l'exploitation du réseau de centres de données a également été mise à la disposition du monde extérieur. ,everflow、netbouncer La fonction d'attente est SONiC Fonctions à prendre en charge dans le logiciel . Ouverture de ces fonctions , C'est l'évangile des ingénieurs de l'exploitation et de la maintenance du réseau , Le dépannage du réseau ne dépend plus seulement ping、traceroute Ou une expérience purement artificielle , Mais vers l'intelligence et la science ;
  • SONiCEst également disponibleIpv6Appui、Fast RebootLa fonction de, Pour s'assurer que pendant la mise à niveau , L'interruption du plan de données ne dépasse pas 30Secondes;
  • 2018Année,SONiC Introduit Warm RebootFonction, Cette fonction interrompt le plan de données ‍‍ Contrôle en une seconde , Sur de nombreuses plateformes communes existantes , Même des mises à niveau non perturbatrices .En même temps‍‍ De nouvelles service,Par exemple,Streaming Telemetry‍‍ Et un certain soutien à la virtualisation .

Composants de base

  • sonic-swss-common : 1.3(En milliers de dollars des États - Unis)
  • sonic-swss: 610 000 lignes
  • sonic-sairedis : 22(En milliers de dollars des États - Unis)

CLI、REST FUL API、CFG Manager Configuration redis Base de données CFG_DB,redis Adoption key-space Le mécanisme publie les informations modifiées à SWSS Chacun dans mgrd,xxx-mgrd AppelezlinuxLes ordresOu envoyer netlink Message, Synchroniser l'information vers linux,Après le succès, Insérer également des informations dans APP_DBDePORT_TABLEMoyenne,portorch Abonnements APPL_DBDansPORT_TABLE, Recevoir des informations pertinentes , Traitement ,Et mise à jourASIC_DBInformation.

Les tableaux de la plupart des composants sont redis hashTableau, Différentes tables d'objets du même type ont le même préfixe , Différents suffixes , Dans la même table de hachage ,Différentkey Correspond à différents attributs .

SWSS Conteneur

SWSS (switch state service) Est un ensemble d'outils , Pour la coordination de tous SONiCEntre modules、Modules etredis Communication entre les moteurs .swss Les services suivants sont également fournis: , Ces services passent par netlinkAvecSONiC Interaction au niveau de l'application ( Sauf pour les processus qui fonctionnent dans d'autres conteneurs ,C'est - à - dire:fpmsyncd、teamsyncdEtlldp_syncd). Les trois premiers services suivants (portsyncd、intfsyncd、neighsyncd) Pousser l'état vers redisMoteur, Et les trois derniers services (orchagent、intfMgrd、vlanMgrd) Recueillir l'état du moteur , Et republier l'état à l'application .

  • portsyncd : Écouter les ports netlinkÉvénements. Lorsque le commutateur est activé ,portsyncd Analyser le profil matériel du commutateur pour obtenir des informations physiques sur le port , L'état de la collecte est ensuite poussé à APPL_DBMoyenne.portsyncd Réglage de la vitesse du port 、laneEtMTU, Et injecter l'état dans la base de données d'état .
  • intfsyncd : Écouter les interfaces netlinkÉvénements, Et pousser l'état de la collection vers APPL_DBMoyenne.intfsyncd Gère également les interfaces nouvelles ou modifiées associées IP Éléments tels que l'adresse .
  • neighsyncd : Écouter les voisins nouvellement découverts parce que ARP Lié au voisinage déclenché par le traitement netlinkÉvénements, Et pousser l'état de la collection vers APPL_DBMoyenne.neighsyncd Gérer, par exemple: MAC Propriétés telles que les familles d'adresses et de voisins , Et finalement construire la liste de contiguïté nécessaire dans le plan de données pour la réécriture secondaire .
  • teamd: Agrégation des liens (LAG)Conteneur,Il offre unSONiC Configurer la fonctionnalité de liaison sur le commutateur .teamdLe service estLAG Un protocole basé sur LinuxMise en œuvre open source de.teamsyncdGestion des servicesteamdEtsouthbound Interactions entre sous - systèmes .
  • orchagent :swss Composants les plus critiques du sous - système .orchagent Extraire toutes sortes de syncd Tous les états pertinents de l'injection de service , Traiter et envoyer ces informations en conséquence , Et le pousser vers ASIC_DB.orchagent Unique parmi ces services , Parce que c'est à la fois un consommateur (DeAPPL_DBObtenir l'état) Encore un producteur. ( Comme la propulsion ASIC_DB).
  • intfMgrd :Oui, deAPPL_DB、CONFIG_DBEtstate_DB L'état de réaction ,Pour configurerLinux Interfaces dans le noyau , S'il n'y a pas d'état conflictuel ou incohérent dans l'une des bases de données surveillées .
  • vlanMgrd :Oui, deAPPL_DB、CONFIG_DBEtstate_DB L'état de réaction ,ÀLinux Configuration dans le noyau VLAN, S'il n'y a pas d'état conflictuel ou incohérent dans l'une des bases de données surveillées .

Les rôles fonctionnels des modules connexes sont résumés ci - dessous. :

  • xxx-mgrd : Oui, deAPPL_DB、CONFIG_DBEtstate_DB L'état de réaction ,Pour configurerlinux Interfaces dans le noyau .
  • xxx-syncd: Écouter le noyau netlinkÉvénements, Et écrire l'état collecté APP_DB.
  • orchagent: swss Composants les plus critiques du sous - système .orchagent Extraire toutes sortes de syncd Tous les états pertinents de l'injection de service , Traiter et envoyer ces informations en conséquence , Et le pousser vers ASIC_DB.orchagent Unique parmi ces services , Parce que c'est à la fois un consommateur (DeAPPL_DBObtenir l'état) Encore un producteur. ( Comme la propulsion ASIC_DB).

syncd Conteneur

L'état du réseau du commutateur est comparé à ASICSynchroniser,Cela comprend:ASIC Initialisation de l'état actuel 、 Configuration et collecte . Les principaux éléments logiques sont les suivants: :

  • syncd: Processus d'exécution de la logique de synchronisation .Au moment de la compilation,syncdAvecASIC SDK Liens vers les bibliothèques , Et injecter l'état collecté à partir de l'interface ASIC.syncdAbonnementsASIC_DBPour recevoir deswss Statut des participants , Et repousse l'état du matériel ASIC_DB.
  • SAI API: Interface d'abstraction de commutation (SAI)DéfiniAPI, Contrôler les éléments transmis d'une manière indépendante du fournisseur , Comme l'échange ASIC、NPU Ou commutateur de logiciel .
  • ASIC SDK:DriveASICBesoinsSDKDeSAIMise en œuvre compatible.SDKAccrochez - vous.syncd,syncd Responsable de la conduite de son exécution .

Conteneur d'application réseau

  • lldp: Conteneur du Protocole de découverte de la couche de liaison , Exécuter le processus suivant :1) lldpd:LLDPServices, Il est établi avec des contreparties externes LLDPConnexion, Pour publier et recevoir les fonctions du système .2) lldp_syncd: Ce service lldp État de la découverte téléchargé à redisMoteur( Infrastructure de messagerie pour les systèmes centralisés ),Oui.lldp État transmis à l'application qui en a besoin ,Par exemple:SNMP.3) lldpmgr:lldpd Outils de configuration pour le Service .
  • snmp:PortersnmpFonction. Il y a deux processus connexes dans ce conteneur :1) snmpd: Traitement des entrées à partir d'éléments de réseau externes SNMP Serveurs sondés .2) snmpAgents:C'estSONiCC'est exact.AgentX snmp Sous - agent SONiC_ax_implRéalisation.sonic_ax_impl Sous - agent à agent principal (snmpd) Fournir à partir de la centralisation RedisDans le moteursonic Informations collectées dans la base de données .
  • pmon: Ce conteneur est Sensord Où le service fonctionne .sensord Enregistrer périodiquement les lectures des capteurs pour les composants matériels , Et une alarme est déclenchée lorsque l'alarme est déclenchée .pmon Le conteneur est également chargé fancontrolProcessus, Ce processus recueille l'état lié au ventilateur du pilote de plate - forme approprié .
  • bgp: Exécuter la pile de routage .BGP Le conteneur exécute les services suivants : 1) bgpd:StandardBGPServices. L'état de routage des parties externes passe par la routine TCPOuUDP Réception de la prise ,Et à traverszebra/fpmsyncd Interface Push down to forward plane .2) zebra:TraditionnelIP Gestionnaire de routage . Il fournit des mises à jour de la table de routage du noyau 、 Recherche d'interface et réattribution de services d'acheminement à travers divers protocoles d'acheminement .zebraEt à traversnetlink À calculer FIB Pousser vers le bas vers le noyau , Et en relayant le gestionnaire de plan (FPM) Composants Sud impliqués dans la transmission .3) fpmsyncd: Cette collection de services zebraProduitFIBStatut, Et vider son contenu dans redis Base de données des applications dans le moteur (APPL_DB)Moyenne.

Modèle de communication interne

sonicMécanisme de messagerie2,sonicMécanisme de messagerie3

SONiC Utilisation du mécanisme d'abonnement à la publication et redis Mécanisme de notification de l'espace clé pour ( Lorsque le client modifie les données ,redis Le serveur informe les autres abonnés concernés (client)Changements dans les données).

SONiC Les bases de données utilisées dans :

  • 0Base de données No.:APPL_DB, Stocker l'état de toutes les constructions d'application ——Routage、Le prochain saut、 Voisins, etc. . C'est l'application et d'autres SONiC Point d'entrée pour l'interaction du sous - système ;
  • 1Base de données No.:ASIC_DB, Couche inférieure de stockage ASIC Informations sur l'état et les éléments du tableau de configuration pour , Format convivial pour la puce sous - jacente , Le redémarrage de la puce peut être effectué à partir de ASIC_DBRécupération rapide;
  • 2Base de données No.:CONTERS_DB, Contient des compteurs et des statistiques par Port ,Cette information peut êtrecli Utilisation ou rétroaction à telemetry;
  • 3Base de données No.:LOGLEVEL_DB, Informations sur le niveau de configuration du Journal de stockage ;
  • 4Base de données No.:CONFIG_DB,StockageSONiC État de configuration créé par l'application ——Configuration du port、Interface、VLANAttendez.,Oui.APP/ Le module peut ne pas être configuré , Peut ne pas avoir de tableau correspondant , Certaines configurations appellent directement linux Pour configurer , Certaines configurations doivent être envoyées à la puce , Il faut y aller. APPL_DBC'est écrit ici.;
  • 5Base de données No.:FLEX_COUNTER_DB, Stockage de la configuration flexible du compteur ;
  • 6Base de données No.:STATE_DB, Configurer les entités dans le système de stockage “La clé” État de fonctionnement . Cet état est utilisé pour résoudre les différences SONiC Dépendances entre sous - systèmes .Par exemple,LAGPortchannel(Parteamd Définition du sous - module ) Peut se référer à un port physique qui peut ou non exister dans le système .Un autre exemple estVLANDéfinitions(AdoptionvlanmgrdComponents), Il peut faire référence à un membre de port inconnu dans le système .Essentiellement, La base de données stocke tous les états nécessaires pour résoudre les dépendances inter - modules .

SubscriberStateTable

InSONiCMoyenne,CONFIG_DBEtSTATE_DB Surveillance des données entre key-space Mise en œuvre du mécanisme.key-space Le consommateur du mécanisme passe par sonic-swss-common/common Dans SubscriberStateTable Mise en œuvre de la classe.

C'est exact.CONFIG_DB Les modifications de sont généralement utilisées pour configurer le système , Si vous utilisez la ligne de commande pour configurer les fonctions du système ,SONiCInsonic-py-swsssdk Paire encapsulée dans le composant CONFIG_DBFonctionnement, Selon la transmission data Si l'exécution est vide hmsetOudeleteFonctionnement.

Ici pour écouter CONFIG_DBConfigurationVLANExemple.

VlanMgr Le composant écoute lors de l'initialisation CFG_VLAN_TABLE_NAMEEtCFG_VLAN_MEMBER_TABLE_NAMEDeux. key-space Événements,Quand on passeconfigLes ordres(sonic cli)Ajouter vlan 100Pendant le fonctionnement de,redisServeur CONFIG_DB Ce sera pour“VLAN|Vlan100”DeKEYProduire key-spaceMessage de l'événement, VlanMgr Dès réception des composants ,Appelez VlanMgr::doTask(Consumer &consumer) Traitement.

@startuml

config -> redisServeur : Écris.redis
redisServeur -> client : ProduirekeyspaceMessage
client -> client : Recevoir un message, Et appeler le traitement de la fonction @enduml

Dès réception du message,Ici.Consumer C'est par orchCatégorie Encapsulé SubscriberStateTable .

NotificationProducer/Consumer

AdoptionFile d'attente des messagesPour transmettre un message, Le contenu peut être défini de manière flexible .In SONiC Moyenne, Ce modèle de communication est principalement utilisé pour SWSSDans le conteneur orchagent Avec syncd Notifications d'événements entre conteneurs .

ParFDBExemple d'événement,SYNCD Reçu du lecteur sous - jacent FDBÉvénements, Appel à la base de données hsetOudelMise à jour opérationnelleASIC_DBDansFDBTable items,En même tempsNotification Le producteur envoie le nom “fdb_event”Message de notification pour.

Notification Le processus de consommation fdborchRéalisation intermédiaire, Déclenchement du message de notification FdbOrch::doTask(NotificationConsumer&consumer) Pour le traitement ultérieur ,Mise à jourorchagentDansFDBInformation.

Producer/ConsumerStateTable

sonic-swss-common Moyenne ProducerStateTable Avec ConsumerStateTable Réalisation

Le mécanisme adopte un set Collection pass key,Adoptionpublish Nouvelle notification de commande keyProduire.Les consommateurs passent parkeyEn un seulhashLe tableaukey, Utilisé pour obtenir des messages réels ,setL'ordre n'est pas garanti,InpublishNotificationKEY Autoriser l'appariement avant de modifier un événement key-valueEffectuer plusieurs opérations, Le processus opérationnel ne garantit pas la séquence d'exécution . L'avantage est qu'il n'est pas nécessaire de définir key-value Les notifications d'événements sont déclenchées chaque fois , Améliore l'efficacité du traitement ,Mais oui.orchagent Le processus de traitement a certaines exigences .

Exemple:

## Dans la collectionINTF_TABLE_KEY_SETAjouter unkey
"SADD" "INTF_TABLE_KEY_SET" "PortChannel1:1.1.1.1/8" ## InhashTableauINTF_TABLE:PortChannel1:1.1.1.1/8Ajouter du contenu
"HSET" "INTF_TABLE:PortChannel1:1.1.1.1/8" "scope" "global"
"HSET" "INTF_TABLE:PortChannel1:1.1.1.1/8" "family" "IPv4" ## Aviser les canaux abonnés INTF_TABLE_CHANNEL Des nouvelles, Abonné selon INTF_TABLE_Combiné en INTF_TABLE_KEY_SET Accèskey,
## Et puis,SelonkeyAccèshashTableau INTF_TABLE:PortChannel1:1.1.1.1/8 Le contenu de, Si le contenu est vide, l'opération de suppression est indiquée. , Autrement indiqué SETFonctionnement.
"PUBLISH" "INTF_TABLE_CHANNEL" "G"

Orchagent Adoption du traitement de la répartition epoll Modèle de notification des événements , Un événement déclenche un calendrier ; Dans le traitement des horaires , Le traitement des tâches peut ne pas être terminé en raison de facteurs tels que la dépendance à l'égard des ressources. , Vous pouvez choisir de laisser la tâche dans m_toSync En attente du prochain processus d'ordonnancement . Dans un scénario de contrôle à grande échelle des éléments de table et des relations logiques plus complexes , Ce mécanisme d'ordonnancement peut se produire en raison de contraintes de ressources 、 Programmation fréquente ou inefficace due à des facteurs tels que le non - respect des conditions de dépendance ,Asterfusion Optimiser la séquence de traitement 、 Améliorer les opérations par lots et STATE_DB Définir le drapeau d'état et d'autres méthodes d'amélioration , Amélioration de l'efficacité et de la fiabilité des composants .

ProducerTable & ConsumerTable

Utiliserredis publish NotificationKEY Modifier l'événement ,UtilisationKey-Value-Operate Mécanisme de transmission de l'information . Le modèle de communication passe par une liste ordonnée (list)Pour passerkey-value-operate Message ternaire , Une opération est effectuée à LIST Moyenne pression en trois valeurs ( Aviser les abonnés du traitement des messages , Message de traitement circulaire , Trois doivent être retirés de la liste à la fois key),Respectivement:key,value,operate.Dont: value C'est un hashExécution du tableaujson Encodé pour former une seule chaîne , L'abonné a donc besoin d'une restauration décodée après avoir reçu le message , Le dernier est le type d'opération .

SYNCD De cette façonList File d'attente key-value-operation, Et décoder ,Écrit àASIC_STATE, Appeler le Sous - sol en même temps SAIInterface.

InSONiCMoyenne, Le modèle est utilisé pour Autour deASIC_DBEtFLEX_COUNTER_DB Messagerie pour .Modèles3Comparé à, Le modèle garantit une séquence stricte d'exécution des opérations ,In syncd Mise en œuvre SAI API L'appel est garanti au niveau inférieur ASIC Temps de fonctionnement .

Exemple:

"LPUSH" "ASIC_STATE_KEY_VALUE_OP_QUEUE" "SAI_OBJECT_TYPE_ROUTE_ENTRY:{\"dest\":\"1.1.1.0/24\",\"switch_id\":\"oid:0x21000000000000\",\"table_id\":\"oid:0x0\",\"vr\":\"oid:0x3000000000043\"}" "[\"SAI_ROUTE_ENTRY_ATTR_PACKET_ACTION\",\"SAI_PACKET_ACTION_FORWARD\",\"SAI_ROUTE_ENTRY_ATTR_NEXT_HOP_ID\",\"oid:0x600000000063a\"]" "Screate"

##  Aviser les abonnés du traitement des messages , Message de traitement circulaire , Trois doivent être retirés de la liste à la fois key
"PUBLISH" "ASIC_STATE_CHANNEL" "G"

Comment communiquer avec le noyau

Exigences relatives aux événements et au routage de l'interface réseau SONiCApplications etLinux Communications du noyau , Principalement de deux façons :

  • AppelezLinuxCommandes d'outils, Comme appeléip Commande configurer l'interface réseau IP Adresses et paramètres VRF, C'est comme appeler. bridgeConfiguration des commandesVLAN. Encapsulé swss::exec Adoption finale de la méthode popen Effectuer l'assemblage commandDirectives.
  • C'est exact.netlink L'opération de message est effectuée en utilisant libnl Encapsulé par bibliothèque NetLinkClasse pour compléter,En même tempsSWSSEt un ensemble définiNetDispatcherMécanisme de réalisationnetlink Surveillance des messages et traitement de la distribution .

teamd Configuration du Groupe d'agrégation

Configuration

teamdmgrd Responsable du processus de configuration .

  • CLICréer avec le nomPortChannel0001 Groupe d'agrégation pour , Joindre les membres du Groupe d'agrégation Ethernet0EtEthernet4,InCONFIG_DB Générer des éléments de table de configuration dans ;

  • teamdmgrd Le processus surveille les changements de clés correspondants ,AppelezdoLagTaskEtdoLagMemberTaskTraitement méthodologique.a)doLagTaskMéthodes Analyser les paramètres et générer le profil requis conf,Par appelteamd Commande créer et configurer un groupe d'agrégation ,EtAppelezip Commande set Aggregate Group interface MAC Adresse et statut administratif ;b) doLagMemberTask Dans la méthode, on détermine d'abord si l'état de l'interface du Groupe d'agrégation et des membres du Groupe d'agrégation à ajouter satisfait aux exigences. , Si elle est satisfaite AppelezteamdctlEtip Commande pour configurer l'interface des membres agrégés , Le port des membres agrégés est défini ici à down, Sinon, suspendre le traitement ultérieur de la tâche en cours ;



  • teamdmgrd Écrire les informations de configuration du Groupe d'agrégation et des membres en tant que producteur APPL_DB.

  • portsorch Abonnement en tant que consommateur APP_LAG_TABLEAPP_LAG_MEMBER_TABLETraitement.

  • portsorchAppelezsairedisDeAPI, Vérifier la légitimité du type de paramètre et LAG Configurer l'écriture des informations ASIC_DB.

  • SYNCDAbonnementsASIC_DBDansLAG Éléments de tableau connexes et élimination .

  • SYNCDAppelezASIC SDKC'est exact.SAI APIRéalisation,Et à traversASICdriver Sous - puce descendante .

Processus de polymérisation

teamsyncd Responsable du processus d'agrégation :

  • teamsyncd Phase d'initialisation enregistrement écoute RTM_NEWLINKEtRTM_DELLINKTypenetlinkMessage, Sera également enregistré teamdFonctionnementhandler,Pour le traitementteamd Changements dans l'état des ports membres agrégés et teamd Événement déclenché par un changement de paramètre .a) Une catégorie estnetlinkMessage,Quand il est déclenchéNEWLINKOuDELLINK Action correspondante dans le temps STATE_LAG_TABLE Définir l'état du Groupe d'agrégation ;b) L'autre estteamd Message de changement d'état ,QuandteamdAdoptionLACP La machine interactive et interne d'état produit un changement d'état de l'interface membre agrégée ,AppelezTeamSync::TeamPortSync::onChangeTraitement.

  • teamd Perception des changements d'état dans les ports membres de l'agrégation ,teamsyncdDeteamd Obtient la liste et l'état actuels des membres de l'agrégat , Comparaison avec la liste des membres agrégés avant le changement . Si le membre agrégé existe déjà et que l'état change , Modifier directement APP_LAG_MEMBER_TABLE Statut des membres , Si la liste des membres change ,AlorsAPP_LAG_MEMBER_TABLE Ajouter de nouveaux ports membres et définir l'état des membres et supprimer les ports membres qui n'existent pas .

  • portsorch Abonnement en tant que consommateur APP_LAG_MEMBER_TABLETraitement, Définir en fonction de l'état du port membre agrégé SAI_LAG_MEMBER_ATTR_INGRESS_DISABLEEtSAI_LAG_MEMBER_ATTR_EGRESS_DISABLE, Détermine s'il faut permettre la réception du trafic par ce port membre et l'envoi du trafic à partir de ce port membre .

  • portsorch AppelezsairedisDeAPI,Et mise à jourLAG Member Configurer les éléments et attributs du tableau pour ASIC_DB.

  • SYNCDAbonnementsASIC_DBDansLAG Member Tableau et traitement .

  • AppelezASIC SDKC'est exact.SAI APIRéalisation,Et à traversASIC driver Sous - puce descendante .

Interaction de l'état du port

Initialisation du port

Comme le montre la figure ci - dessous, Montre plusieurs composants d'un système exposé qui sont intéressés à générer ou à utiliser des informations liées au port :

  • Établir une connexion, Rôle de la Déclaration : Lors de l'initialisation ,portsyncdAvecredis La base de données principale du moteur établit le canal de communication .Portsyncd Déclare qu'il a l'intention d'agir comme APPL_DBEtSTATE_DBÉditeur de,EtCONFIG_DB Abonnés à .Encore une fois,portsyncd L'abonnement est également responsable de l'hébergement des ports / Système d'information sur l'état des liens netlinkAccès.
  • Résoudre la configuration:Portsyncd Analyser d'abord les profils matériels utilisés dans le système /sku Profil de port associé (port_config.ini)(Pour plus de détails, Voir la section Configuration ). Informations relatives au port , Comme un passage 、Nom de l'interface、 Alias de l'interface 、Vitesse, etc., Par ce canal APPL_DB.
  • Convertir enASIC_DB:Orchagent Entendre tous ces nouveaux états , Mais l'opération sera retardée ,Jusqu'àportsyncd Informez - le qu'il a complètement terminé port_config.iniAnalyse de l'information.Quand ça arrivera,orchagent L'initialisation du matériel se poursuivra / Interface de port correspondante dans le noyau .OrchagentAppelezsairedis API, Par ASIC_DB L'interface transmet cette demande à syncd
  • Créer un port:SyncdAdoptionASIC_DB Recevoir cette nouvelle demande , Et prêt à invoquer la satisfaction Orchagent Demande requise SAI API.SyncdUtiliserSAI API+ASIC SDK Créer une interface hôte du noyau associée au port physique initialisé .
  • Mise à jour de l'état: Génération précédente netlinkMessage,ParportsyncdRéception, Et avec les port_config.ini(Étapes1) Tous les ports analysés sont comparés , Si tout est fait ,Déclaration“Initialisation” Processus terminé .portsyncd Une entrée sera écrite à STATE_DB Moyenne, Indique que l'initialisation du port est terminée .
  • Utilisation dépendante :À partir de maintenant, Abonnements antérieurs STATE_DB content Les demandes de , Permettre à ces applications de commencer à utiliser les ports dont elles dépendent .En d'autres termes,,Si dansSTATE_DB Aucune entrée valide n'a été trouvée pour un port particulier , Aucune application ne peut l'utiliser .

Changement d'état du port

  • Lorsque l'état du port change ,Drive throughsyncd Notifications de fonctions enregistrées syncd
  • syncd Appeler la fonction de notification pour envoyer un événement à ASIC_DB
  • Orchagent Adoptionnotification Thread ListeningASIC_DBÉvénements, Exécuter la fonction de changement d'état du port :1)ProduireAPPL_DB Mise à jour des messages , Aviser l'application supérieure ;2)Appelezsairedis API Pour rappel syncd L'état du noyau associé à l'interface hôte du port sélectionné doit être mis à jour ,orchagent Encore une fois, ASIC_DB L'interface transmet cette demande à syncd
  • SyncdUtiliserSAI API+ASIC SDK Affectera l'état de l'interface hôte (Fermer)Mise à jour;
  • portsyncd Reçu lié à l'étape précédente netlinkMessage,A cause de toutSONiC Le composant est maintenant pleinement conscient de l'événement d'arrêt du port , Le message sera donc rejeté. .

Interaction de l'état de routage

Dans cette section, Nous allons itérer SONiC Une série d'étapes qui se produisent dans , Pour traiter les eBGP Nouvelles routes reçues par les pairs . Nous supposerons que cette session a été établie , Et nous apprenons un nouveau routage , Cette route utilise le pair directement connecté comme son prochain saut .

(0)InBGP Lors de l'initialisation du conteneur ,zebraPar la routineTCP Socket connecté à fpmsyncd.Stable/ Non transitoire ,zebra、linuxNoyau、APPL_DBEtASIC_DB Les tables de routage sauvegardées dans doivent être entièrement cohérentes /Équivalent.

(1) Un nouveauTCP Le paquet arrive dans l'espace du noyau bgpSocket for. La pile réseau du noyau livre finalement la charge utile associée à bgpdProcessus.

(2) Bgpd Résoudre un nouveau paquet ,TraitementbgpMise à jour,Et informerzebra L'existence du prochain saut de ce nouveau préfixe et de son Protocole d'association .

(3) zebra Déterminer la faisabilité de ce préfixe /Accessibilité(Par exemple, Transmission existante nh)Après,zebraGénérer le routagenetlinkMessage, Injecter ce nouvel état dans le noyau .

(4) ZebraUtilisationFPM L'interface va netlink Routage des messages vers fpmsyncd.

(5) FpmsyncdTraitementnetlink Message et pousser cet état à APPL_DB.

(6) En tant queAPPL_DBConsommateurs, Il recevra les messages précédemment poussés vers APPL_DB Contenu du message .

(7) Après traitement des informations reçues ,orchagentdSera appelésairedis API Injecter des informations de routage ASIC_DB.

(8) Quand etASIC_DB Synchronisation des consommateurs ,Il recevraorchagentd Nouvel état généré .

(9) Syncd Cette information sera traitée et appelée SAI API Injecter cet état dans le asicPilote.

(10) La nouvelle route a finalement été poussée vers le matériel .

LLDPInteraction de l'état

  • (0)lldpmgrd Abonnement au démarrage du processus STATE_DB État du port physique dans les données , Obtenir périodiquement l'état le plus récent de l'interface .Sur la base de ces informations,lldpd( Et ses pairs réseau ) Vous serez tenu informé des changements dans l'état du port système et de tout changement de configuration qui affecte son fonctionnement
  • (1)Reçu par le noyaulldp Le message sera distribué lldpProcessus de traitement
  • (2)lldpAnalyseLLDP Message obtenir le dernier état ,lldp_syncdExécution périodiquelldpctl cli Obtenir le dernier état
  • (3)lldp_syncd Écrivez le dernier état APPL_DBDans la base de donnéesLLDP_ENTRY_TABLETableau
  • (4) D'autres écoutent cette table appPour obtenirlldp Le dernier état de

syncd Components

syncd En enregistrant la fonction de rappel avec driverCommunications,syncdEtsai Espace de noms partagé .syncd Démarrer le thread pour écouter la file d'attente partagée ,TraitementdriverNotification.

syncd Le processus est entre orchagentAvecdriver Processus entre .syncdDeasic-db Les données lues dans le sai Interface envoyée au matériel , En même temps, la réponse du conducteur doit être traitée dans une certaine mesure. , Les notifications d'événements pilotées doivent également être traitées (Comme le portup/down,mac Informations sur le vieillissement, etc. ). Les messages traités sont les suivants: :

@startuml

Orchagent -> asic_db : Étapes1
asic_db -> syncd : Étapes2
syncd -> driver : Étapes3
driver -> syncd : Étapes4
syncd -> asic_db : Étapes5
asic_db -> Orchagent : Étapes6
driver -> syncd : Étapes7
syncd -> asic_db : Étapes8
asic_db -> Orchagent : Étapes9
@enduml

orchagent Écrire l'opération

create,remove,setÉcrire l'opération:écriture asynchrone.orchagentIl sera là. sairedis La couche construit un saiCouche:sairedis.orchagentMise en œuvresai L'interface est juste asic-dbExécution des opérations, Générer ou supprimer des objets virtuels (vid). Par défaut, toutes les opérations sont réussies ,Retour direct,Sans attendresyncd Réponse . Exécuter la figure ci - dessus 1Et6.syncdDeasic-db Lire la demande d'exécution de la figure ci - dessus 2,3,4.Si4 Étape retournée avec succès , L'ensemble de la demande est terminé ,Sinon,syncdSera envoyéshutdownAvis àorchagent.orchagentVa sortir,Comme indiqué ci - dessus5,6;

orchagent Lire l'opération

get Lire l'opération: Lecture synchrone .orchagentMise en œuvre1 Sera utilisé plus tard selectBloquez l'attentesyncd Réponse ,SisyncdIn60 Pas de réponse dans les minutes ,AlorsorchagentÇa va se produire.segmentSortie.get L'ordre d'exécution de l'opération est 1->2->3->4->5->6.

// sonic-sairedis/lib/src/sai_redis_generic_get.cpp:257:sai_status_t redis_generic_get(
sai_status_t redis_generic_get() {
// ...
// internal_redis_generic_get
std::string str_object_type = sai_serialize_object_type(object_type);
std::string key = str_object_type + ":" + serialized_object_id; // Écrire cette fois getÉvénements, Ne pas écrire dans asicBase de données, Juste rejoindre la file d'attente
g_asicState->set(key, entry, "get"); // Créer un temporaire select,Ajouter un événement,Attendez une réponse
swss::Select s;
s.addSelectable(g_redisGetConsumer.get());
//Boucle d'attentesyncd Réponse
while (true)
{
swss::Selectable *sel;
//Bloquez l'attente,Le temps estGET_RESPONSE_TIMEOUT
int result = s.select(&sel, GET_RESPONSE_TIMEOUT);
// Seuls les cas de réponse sont traités OBJECT
if (result == swss::Select::OBJECT) {
swss::KeyOpFieldsValuesTuple kco;
g_redisGetConsumer->pop(kco); const std::string &op = kfvOp(kco);
const std::string &opkey = kfvKey(kco); if (op != "getresponse") // ignore non response messages
{
continue;
} sai_status_t status = internal_redis_get_process(
object_type,
attr_count,
attr_list,
kco); return status;
}
break;
}
// Les temps d'arrêt et les exceptions sont retournés SAI_STATUS_FAILURE
return SAI_STATUS_FAILURE;
}

PourgetFonctionnement,Quandsyncd Quand vous êtes occupé , Dans des cas extrêmes orchagentSortie anormale.

ObtenirdriverNotification

driverDenotify: Après que le pilote a détecté un événement matériel ,Appelezsyncd Notification de la fonction de rappel enregistrée syncd, Écrire des événements connexes dans la file d'attente .syncd Il y a un traitement spécial driver-notifyLes fils dentf-thread.ntf-threadAnalysedriverDenotify,Et à traversasic-dbNotificationorchagent (orchagent Sera dans le processus principal selectMoyenne écouteasic-db.).Ordre d'exécution7->8->9.

Note:: orchagent AvecsyncdÀ propos desai Cette couche est très similaire . Ils appellent un grand nombre de fonctions du même nom . Ces fonctions ont juste le même nom ,orchagentAppelésai-redisFonctions dans la bibliothèque,EtsyncdAppelédriverFournisaiBibliothèque

  • syncd Enregistrer la fonction de rappel avec le pilote ,syncd Quelques définitions notify Pointeur de fonction global
sai_switch_state_change_notification_fn     on_switch_state_change_ntf = on_switch_state_change;
sai_switch_shutdown_request_notification_fn on_switch_shutdown_request_ntf = on_switch_shutdown_request;
sai_fdb_event_notification_fn on_fdb_event_ntf = on_fdb_event;
sai_port_state_change_notification_fn on_port_state_change_ntf = on_port_state_change;
sai_packet_event_notification_fn on_packet_event_ntf = on_packet_event;
sai_queue_pfc_deadlock_notification_fn on_queue_deadlock_ntf = on_queue_deadlock;

syncdEtsai Espace de noms partagé , Ainsi, le pilote peut appeler la fonction correspondante directement en utilisant ces pointeurs de fonction , Ces pointeurs de fonctions globaux sont fournis par le pilote lors de l'initialisation sai_set_switch_attribute Définir la fonction à saiCouche.

/*
* Routine Description:
* Set switch attribute value
*
* Arguments:
* [in] switch_id Switch id
* [in] attr - switch attribute
*
* Return Values:
* SAI_STATUS_SUCCESS on success
* Failure status code on error
*/
sai_status_t sai_set_switch_attribute(_In_ sai_object_id_t switch_id,
_In_ const sai_attribute_t *attr) { sai_status_t status = SAI_STATUS_SUCCESS;
switch_status_t switch_status = SWITCH_STATUS_SUCCESS;
switch_uint64_t flags = 0;
switch_api_device_info_t api_device_info;
sai_packet_action_t sai_packet_action;
switch_acl_action_t switch_packet_action;
switch_packet_type_t switch_packet_type = SWITCH_PACKET_TYPE_UNICAST;
bool cut_through = false; if (!attr) {
status = SAI_STATUS_INVALID_PARAMETER;
SAI_LOG_ERROR("null attribute: %s", sai_status_to_string(status));
return status;
} memset(&api_device_info, 0x0, sizeof(api_device_info));
if (status != SAI_STATUS_SUCCESS) {
return status;
}
if (attr->id <= SAI_SWITCH_ATTR_ACL_STAGE_EGRESS) { // Unsupported
SAI_LOG_DEBUG("Switch attribute set: %s", switch_attr_name[attr->id]);
} switch (attr->id) {
//...... case SAI_SWITCH_ATTR_FDB_EVENT_NOTIFY:
sai_switch_notifications.on_fdb_event = attr->value.ptr;
break;
case SAI_SWITCH_ATTR_PORT_STATE_CHANGE_NOTIFY:
sai_switch_notifications.on_port_state_change = attr->value.ptr;
break;
case SAI_SWITCH_ATTR_PACKET_EVENT_NOTIFY:
sai_switch_notifications.on_packet_event = attr->value.ptr;
break;
case SAI_SWITCH_ATTR_SWITCH_STATE_CHANGE_NOTIFY:
sai_switch_notifications.on_switch_state_change = attr->value.ptr;
break;
case SAI_SWITCH_ATTR_SHUTDOWN_REQUEST_NOTIFY:
sai_switch_notifications.on_switch_shutdown_request = attr->value.ptr;
break;
...... default:
SAI_LOG_ERROR("Unsupported Switch attribute: %d", attr->id);
// Unsupported: Temporary hack till all attrs are supported
switch_status = SWITCH_STATUS_SUCCESS;
}
//......
}

sai Une fonction de rappel est enregistrée avec le pilote lorsque l'interface est initialisée , Le pointeur de fonction global que nous avons enregistré est appelé dans la fonction de rappel ,Nous avonsfdbÀ titre d'exemple:

sai_status_t sai_fdb_initialize(sai_api_service_t *sai_api_service) {
sai_api_service->fdb_api = fdb_api;
switch_uint16_t mac_event_flags = 0;
mac_event_flags |= SWITCH_MAC_EVENT_LEARN | SWITCH_MAC_EVENT_AGE |
SWITCH_MAC_EVENT_MOVE | SWITCH_MAC_EVENT_DELETE;
//InitialisationfdbDesaiAu moment de l'interface, Enregistré auprès du conducteur sai_mac_notify_cb Fonction de rappel.
switch_api_mac_notification_register(
device, SWITCH_SAI_APP_ID, mac_event_flags, &sai_mac_notify_cb);
switch_api_mac_table_set_learning_timeout(device, SAI_L2_LEARN_TIMEOUT);
return SAI_STATUS_SUCCESS;
} static void sai_mac_notify_cb(const switch_device_t device,
const uint16_t num_entries,
const switch_api_mac_entry_t *mac_entry,
const switch_mac_event_t mac_event,
void *app_data) {
SAI_LOG_ENTER();
sai_fdb_event_notification_data_t fdb_event[num_entries];
sai_attribute_t attr_lists[num_entries][2];
uint16_t entry = 0; for (entry = 0; entry < num_entries; entry++) {
memset(&fdb_event[entry], 0, sizeof(fdb_event[entry]));
fdb_event[entry].event_type = switch_mac_event_to_sai_fdb_event(mac_event);
memcpy(fdb_event[entry].fdb_entry.mac_address,
mac_entry[entry].mac.mac_addr,
ETH_ALEN);
fdb_event[entry].fdb_entry.switch_id =
(((unsigned long)SWITCH_HANDLE_TYPE_DEVICE)
<< SWITCH_HANDLE_TYPE_SHIFT) |
0x1;
fdb_event[entry].fdb_entry.bv_id = mac_entry[entry].network_handle; memset(attr_lists[entry], 0, sizeof(attr_lists[entry]));
attr_lists[entry][0].id = SAI_FDB_ENTRY_ATTR_TYPE;
attr_lists[entry][0].value.s32 = SAI_FDB_ENTRY_TYPE_DYNAMIC;
attr_lists[entry][1].id = SAI_FDB_ENTRY_ATTR_BRIDGE_PORT_ID;
attr_lists[entry][1].value.oid = mac_entry->handle;
fdb_event[entry].attr_count = 2;
if (fdb_event[entry].event_type == SAI_FDB_EVENT_FLUSHED) {
// Overwriting now for SONiC to be able to process it correctly
fdb_event[entry].event_type = SAI_FDB_EVENT_AGED;
}
fdb_event[entry].attr = attr_lists[entry];
}
//AppelezsyncdFonction de rappel pour
sai_switch_notifications.on_fdb_event(num_entries, fdb_event);
return;
}

syncd Démarrage notify Thread

std::shared_ptr<std::thread> ntf_process_thread;

void startNotificationsProcessingThread()
{
runThread = true;
ntf_process_thread = std::make_shared<std::thread>(ntf_process_function);
} void ntf_process_function()
{
while (runThread) {
cv.wait(ulock);
// this is notifications processing thread context, which is different
// from SAI notifications context, we can safe use g_mutex here,
// processing each notification is under same mutex as processing main
// events, counters and reinit
swss::KeyOpFieldsValuesTuple item;
while (tryDequeue(item))//Retirer de la file d'attentenotify
{
processNotification(item);//Traitementnotify
}
}
} bool tryDequeue(
_Out_ swss::KeyOpFieldsValuesTuple &item)
{
std::lock_guard<std::mutex> lock(queue_mutex);
if (ntf_queue.empty()) {
return false;
}
item = ntf_queue.front();
ntf_queue.pop();
return true;
} void processNotification (
_In_ const swss::KeyOpFieldsValuesTuple &item)
{
std::lock_guard<std::mutex> lock(g_mutex); SWSS_LOG_ENTER(); std::string notification = kfvKey(item);
std::string data = kfvOp(item); if (notification == "switch_state_change") {
handle_switch_state_change(data);
} else if (notification == "fdb_event") {
handle_fdb_event(data);
}
else if (notification == "port_state_change")
{
handle_port_state_change(data);
}
else if (notification == "switch_shutdown_request")
{
handle_switch_shutdown_request(data);
}
else if (notification == "queue_deadlock")
{
handle_queue_deadlock(data);
}
else
{
SWSS_LOG_ERROR("unknow notification: %s", notification.c_str());
}
} // Par fdb Par exemple
void handle_fdb_event(
_In_ const std::string &data)
{
SWSS_LOG_ENTER();
uint32_t count;
sai_fdb_event_notification_data_t *fdbevent = NULL;
sai_deserialize_fdb_event_ntf(data, count, &fdbevent);
process_on_fdb_event(count, fdbevent);
sai_deserialize_free_fdb_event_ntf(count, fdbevent);
} void process_on_fdb_event(
_In_ uint32_t count,
_In_ sai_fdb_event_notification_data_t *data)
{
for (uint32_t i = 0; i < count; i++) {
sai_fdb_event_notification_data_t *fdb = &data[i];
fdb->fdb_entry.switch_id = translate_rid_to_vid(fdb->fdb_entry.switch_id, SAI_NULL_OBJECT_ID);
fdb->fdb_entry.bv_id = translate_rid_to_vid(fdb->fdb_entry.bv_id, fdb->fdb_entry.switch_id);
translate_rid_to_vid_list(SAI_OBJECT_TYPE_FDB_ENTRY, fdb->fdb_entry.switch_id, fdb->attr_count, fdb->attr); /*
* Currently because of bcrm bug, we need to install fdb entries in
* asic view and currently this event don't have fdb type which is
* required on creation.
*/
redisPutFdbEntryToAsicView(fdb);
} std::string s = sai_serialize_fdb_event_ntf(count, data);
send_notification("fdb_event", s);
} void send_notification(
_In_ std::string op,
_In_ std::string data,
_In_ std::vector<swss::FieldValueTuple> &entry)
{
//Écrire dans la base de données
notifications->send(op, data, entry);
} void send_notification(
_In_ std::string op,
_In_ std::string data)
{
SWSS_LOG_ENTER(); std::vector<swss::FieldValueTuple> entry; send_notification(op, data, entry);
}

syncdAvecSDEInteraction

InSONiCMoyenne,syncd Le conteneur est ASIC Canal unique de communication , Les processus opérationnels de la surface de contrôle veulent distribuer les données ASICHeure, Le processus final consiste à traiter les données SAI Écrire au format d'interface standard RedisDansASIC_DB,syncd Processus maître du même nom dans le conteneur syncdAbonnementsASIC_DB Éléments de tableau connexes et traitement de ces données distribuées ,AppelezASIC SDKC'est exact.SAI APIRéalisation,Et à traversASIC driverEnvoyer àASIC.

Parmi euxSDE C'est tout. ASIC SDKEt en cours d'exécutionTofino ASICOui.tofino.bin(ParP4 Binaires générés par la compilation du code source ).

mgmt-framework

https://github.com/Azure/sonic-mgmt-framework

https://github.com/Azure/SONiC/blob/master/doc/mgmt/Management Framework.md

mgmt-framework Responsable de la fourniture de diverses interfaces universelles vers le Nord (North Bound Interfaces , NBI),PourGestionSONiC Configuration et état du commutateur .

Utilisation du cadre de gestion golang Bibliothèque de traduction écrite (Translib) Convertir le modèle de données exposé au client de gestion en Redis ABNF Format du schéma .

Configuration

Après la connexion à l'appareil ,SONiC Le logiciel peut être configuré de trois façons :

  • Command Line Interface (CLI)
  • config_db.json
  • minigraph.xml

Cadre d'essai

Sonic Recherche expérimentale (Un.): Introduction à l'architecture d'essai

FAQ

SONiC Orientation future ?

Chassis、Kubernetes、AI agent、Test Infrastructure

SONiC Situation commerciale actuelle ?

‍‍À2020Jusqu'à,SONiCMaintenant‍‍ A été dépassé 10 Opérateurs Cloud ‍‍ Et adoptées par les grandes entreprises .Par‍‍MicrosoftAzure networkPar exemple,Maintenant‍‍ La nouvelle machine a été entièrement installée. SONiC.SONiCAprès des années, Par de nombreux opérateurs ‍‍Adoption,MaintenantSONiC La technologie est très mature et stable. ,Jusqu'à2020Début de l'année,‍‍ Selon Microsoft, les statistiques ne sont pas complètes ,SONiC La capacité installée de 400 10 000 ports .Criteo ( L'activité principale actuelle de l'entreprise est la redirection de la publicité ) Toutes les nouvelles installations SONiC.

SONiCOpen Source,Voilà.‍‍ Accès à un soutien mondial et à des chaînes d'approvisionnement mondiales ,Deuxièmement,,Parce que maintenantSONiC Il y en a déjà beaucoup. ‍‍ Fournisseurs et ‍‍Utilisateurs d'entreprise, C'est un signe. SONiC Reconnu par l'industrie ,SONiC Est déjà une solution stable et mature , Pour réduire le réseautage ‍‍ Et la complexité de la gestion ‍‍Très efficace..

SONiC Avez - vous une entrée en ligne de commande unifiée ?

SONiC Il y a une ligne de commande , Mais les fonctions des modules d'accompagnement sont dispersées , Pas d'entrée uniforme , Et la ligne de commande de certains modules manque d'interface interactive . Voir la bibliothèque en ligne de commande :https://github.com/Azure/sonic-utilities/

SONiCSoutienAPI Interface? ?

SONiC Il y a un original. RESTAPICadre,Basé surGolangRéalisation, Mais la fonction n'est que VLAN、VLAN interface、VXLAN tunnel、Routage, Accent fonctionnel sur les entreprises .

SONiC Est - ce entièrement Open Source ?

SONiC Pas entièrement Open Source , Adaptateur de puce de commutation , Format binaire seulement . Ceci est principalement limité par les fabricants de puces LicenseProtection, Microsoft ne peut pas non plus ouvrir directement les sources .

Pourquoi les composants doivent - ils être conteneurisés? ?

La conteneurisation peut protéger Conflit de dépendance,Limite de version, Défaut non affecté par la mise en œuvre 、Reprise、Mise à jour.

Switchdev AvecSONiC La différence?

1) J'ai l'impression que c'est différent. : SONiC Prends ça. Switch as switch ,switchdev Le commutateur est utilisé comme carte réseau (Par exemple:1822), Tirer parti de l'ouverture Linux Commutateur de gestion des outils réseau ;

2)SONiC Y compris:SAIInterface、 Cadre de gestion des conteneurs plus lourd, etc. , L'entraînement de l'équipement est effectué par le fabricant SDKOffre. switchdev Le cadre comprendLinuxNoyau( Interface définie uniformément )、 Conduite et application , La plupart sont implémentés par le fabricant dans le noyau , Plus léger pour l'utilisateur , Utiliser comme une carte réseau .

SONiCComment?P4 Adaptation du programme ?

Quelles entreprises sont dans la zone de la boîte blanche ?

  • Netteté: Le développement du commutateur de boîte blanche dépend du fabricant de l'équipement 3 Architectures clés (Fiabilité、 Extensibilité et ouverture )Choix et2 Compétences clés (Chip/SDK BUG Capacités de réparation et de soutien des capacités logicielles du réseau ). Et le réseau Ruijie a 20 ans de développement indépendant de logiciels et de matériel dans le domaine de la communication de données , Correspond exactement aux exigences actuelles en matière de compétences . Ruijie Networks participe activement à l'établissement de normes et à l'atterrissage commercial des commutateurs de boîtes blanches avec une attitude d'acceptation active du changement ,Est devenuSONiC Un des principaux partenaires de l'écologie .

Conception du commutateur de boîte blanche pour le réseau Ruijie ,CPU Standard x86Architecture, Spécialement conçu pour le Centre de données bottom ASIC La base du commutateur de boîte blanche ouvert est construite ,Soutien simultanéONIEEnvironnement d'installation、Fournir un soutienSAIDeBSP+SDKSac, Et fournit une base SONiCDéveloppement de logiciels pour、Services consultatifs.En même temps, Réseau Ruijie basé sur de nombreuses années d'expérience commerciale dans le développement et l'échelle des commutateurs commerciaux , A accumulé une douceur complète 、 Cas d'essai du matériel et suite d'essai entièrement automatisée 、 Méthodes d'essai et testeurs professionnels , Peut fournir du matériel professionnel 、 Services de personnalisation de logiciels , En même temps, il fournit un soutien et une garantie puissants pour la qualité du commutateur de boîte blanche .

nfvschool Wechat public Number : nfvschool

nfvschoolSite Web: nfvschool.cn

RÉFÉRENCES

SONiC Autre article Afghanistan

  1. tomcatAnalyse architecturale (SessionGestion)

    SessionLa gestion estJavaEE Une partie importante du conteneur ,Inapp Souvent utilisé .En cours de développementappHeure, On en a juste un. session,Et ensuite,session Données d'accès moyen ,Puis détruitsession. Comment cela se produit - il? se ...

  2. MagentoAnalyse architecturale,Magento MVC Analyse de la conception

    MagentoAnalyse architecturale,Magento MVC Analyse de la conception Classification:Magento Étiquettes:Magento MVC.MagentoArchitecture 669 Navigation humaine Magento Adopter une approche similaire JAVAArchitecture de, Son expansion et sa stabilité ...

  3. Flickr Analyse de l'architecture du site Web

    Flickr Analyse de l'architecture du site Web Flickr.com Est l'un des sites de partage de photos les plus populaires en ligne , Tu te souviens de celui - là? Windows Vista Sur papier peint Hamad DarwishC'est ça?? Il a simplement téléchargé des photos Flickr, Par la suite ...

  4. AndroidAnalyse architecturaleAndroidMécanisme de traitement des messages(2.)

    Auteur: Liu haoyu Blogs:http://blog.csdn.net/liuhaoyutz AndroidNuméro de version:4.4.2 Dans le dernier article, nous avons vu une utilisation HandlerTraitementMessage Exemple de message , Dans cet article, nous ...

  5. NopCommerceAnalyse architecturale(Réimpression)

    Original: ANGLAIS Un.,NopCommerce Début de l'analyse architecturale NopCommerce- Oui..net Un cadre d'application d'entreprise mature dans les projets open source , Est également un modèle dans le système de commerce électronique . J'aimerais en savoir plus sur la conception et la mise en oeuvre. . 2.,NopCo ...

  6. Qualcomm Android displayAnalyse architecturale

    Android displayAnalyse architecturale(Un.) http://blog.csdn.net/BonderWu/archive/2010/08/12/5805961.aspx http://hi.baidu ...

  7. tomcatAnalyse architecturale-Index

    Origine:http://gearever.iteye.com tomcatAnalyse architecturale (Vue d'ensemble) tomcatAnalyse architecturale (Classe de conteneur) tomcatAnalyse architecturale (valveMécanismes) tomcatAnalyse architecturale (valve ...

  8. [Réimpression] À propos de“ Réponse à Taobao &quot;Double11&quot; Analyse de l'architecture technique ”

    Le dernier article sur Weibo “ Réponse à Taobao "Double11" Analyse de l'architecture technique ”. L'une des caractéristiques les plus importantes des produits de données est l'écriture non en temps réel des données. .

  9. apache kafka Analyse de l'architecture d'optimisation des performances de la série

    apache kafkaCommunauté chinoiseQQGroupe:162272557 Apache kafka Analyse de l'architecture d'optimisation des performances Optimisation des applications :Compression des données watermark/2/text/aHR0cDovL2Jsb2cuY3Nk ...

  10. Deep LearningNotes de thèse(Six)Multi-Stage Analyse de l'architecture à plusieurs niveaux

    Deep LearningNotes de thèse(Six)Multi-Stage Analyse de l'architecture à plusieurs niveaux [email protected] http://blog.csdn.net/zouxy09          J'en ai vu d'habitude. ...

Recommandation aléatoire

  1. ImageView

    ImageViewSoutienXMLPropriétés et méthodes connexes XMLPropriétés Méthodes pertinentes Description android:adjustViewBounds setAdjustViewBounds(boolean) Ajuster ou non vos limites ...

  2. A propos deDelphi XML Unit é de traitement BUG

    UtiliserdelphiDeXMLUnité de traitement XMLDoc XMLIntf En train d'obtenirXML Lorsque le contenu du texte , Version supérieureDelphi La description du codage sera perdue ....InD7 C'est normal. , Voici le code source du test : procedure TF ...

  3. SSH UtiliserJUnitTests

    Si deux paquets sont introduits :org.springframework.test-3.1.3.RELEASEEtJUnit4. package com.qk.test; import javax.annotation ...

  4. (Manutention)《Introduction à l'algorithme》Résolution d'exercices Chapter 22.1-1( Entrée et sortie )

    (Manutention)<Introduction à l'algorithme>Résolution d'exercices Chapter 22.1-1( Entrée et sortie ) Idées: Traversez la liste de contiguïté ; Pseudo - Code: for u De Vertex for vDe Adj[u] outdegre ...

  5. Recherche en profondeur d'abord basée sur la matrice de contiguïté (DFS)

    Titre:http://acm.sdut.edu.cn/sdutoj/showproblem.php?pid=2107&cid=1186 #include<stdio.h> #incl ...

  6. redis【 Extrait du site Web , Pour plus tard seulement 】

    ubuntuDémarrage de l'installationredis 1.Télécharger l'installation cd /tmp wget http://redis.googlecode.com/files/redis-2.2.13.tar.gz tar -zxf r ...

  7. jasmine note

    jasmine Introduction jasmine Est un développement piloté par des tests (TDD)Cadre d'essai, UnjsCadre d'essai, Il ne dépend pas du Navigateur .domOu autrejsCadre jasmine Avec une syntaxe très concise Utiliser De Ici. Télécharger stant ...

  8. 201521123071《JavaProgrammation》Résumé des études de la semaine 5

    No5 Semaine de travail -Succession.Polymorphisme.Classes abstraites et interfaces 1. Résumé de la semaine 1.1 Résumé de la carte mentale : 1.2 Dans les études de cette semaine , Les principales leçons sont les suivantes: : - Contact initial avec la définition de l'interface ,AvecinterfaceInterface de définition des mots clés,Utiliserimpl ...

  9. Chapitre VI JDBC

    Chapitre I JDBC Un..JDBCIntroduction à 1.Qu'est - ce queJDBC JDBC- Oui.javaConnexion à la base de données(java database connectivity)Abréviation de la technologie,Il agit commejava Progression entre les applications et les différentes bases de données ...

  10. FermershiftBasculer entre le chinois et l'anglais Code anglais / L'annotation chinoise change d'écriture au hasard .

    x Contexte C'est toujours un accident d'écrire du Code en chinois. , En particulier dans le cas des majuscules et des minuscules dans le Code ... Par exemple:"public static TimeZone CurrentTime..."publi ...