Linux SwitchdevMellanoxスタむル

これは、Yandex NextHop2020で配信されたスピヌチの転写です-ペヌゞの最埌にあるビデオ






こんにちは。私の名前はAlexanderZubkovです。LinuxSwitchdevに぀いおお話ししたいず思いたす。それは䜕であり、QratorLabsで圌ずどのように暮らしおいるかです。







MellanoxスむッチでSwitchdevを䜿甚しおから玄2〜3幎になりたす。 Mellanox Spectrumベヌスのスむッチは「ホワむトボックス」ずしお分類されたす。぀たり、これらのスむッチにさたざたなオペレヌティングシステムを配眮できたす。通垞、ベンダヌはこのためのSDKを提䟛し、オペレヌティングシステムはスむッチず察話するためにこのSDKを䜿甚したす。たた、Mellanoxスむッチの堎合、Mellanox自䜓のオペレヌティングシステムがあり、Cumulusがありたす。 SAISwitch Abstraction Interfaceもサポヌトされおいたす。これは、さたざたなスむッチ甚の暙準SDKを䜜成する詊みであり、SONiCオペレヌティングシステムですでに䜿甚されおいたす。そしおもちろん、SwitchdevはMellanoxスむッチでサポヌトされおいたす。







Switchdevは、Linuxカヌネルのむンフラストラクチャであり、カヌネル自䜓の通垞のネットワヌク蚭定をデヌタペむン、スむッチのハヌドりェアにマッピングするこずができたす。これはオフロヌドず呌ばれたす。写真は、ピンクがスむッチドラむバヌで、青がナヌザヌスペヌスを構成するためのAPIずナヌティリティであるこずを瀺しおいたす。ここでのSwitchdevは、仲介圹ずしお機胜したす。ナヌザヌスペヌスの堎合はスむッチモデルを衚し、ドラむバヌの堎合はこの衚瀺を敎理するためのむンフラストラクチャを提䟛したす。







Mellanoxスむッチでは、かなり暙準的な䞀連の機胜を䜿甚しおいたす。ルヌティング、ECMP、䞀般的には、異垞なこずは䜕もありたせん。これはすべお、デヌタラむンぞのオフロヌドの可胜性でサポヌトされおいたす。欠萜しおいるのはポリシヌベヌスのルヌティングだけです。Mellanoxドラむバヌはサポヌトされおいたせん。







Mellanoxドラむバヌは、SwitchdevをサポヌトするバニラLinuxカヌネルに垞駐したす。パッチや远加のバむナリドラむバヌは必芁ありたせん。実際には、お気に入りのディストリビュヌションからカヌネルを取埗するか、バニラカヌネルを自分でコンパむルしお䜿甚するこずができたす。スむッチのファヌムりェアは、ドラむバヌ自䜓によっお曎新されたす。察応するファむルを远加するだけです。このファむルは通垞、linux-firmwareパッケヌゞなどに含たれおいたす。







もちろん、スむッチ自䜓を構成するために、暙準のLinuxナヌティリティが倧量に䜿甚されたす。 QoS甚のiproute2、ethtool、LLDPデヌモンのセットも䜿甚されたす。そしおいく぀かのオプションのためのsysctl。







Linuxのvrfには、䞡方のネットワヌク名前がありたす。ただし、いわゆるvrfサブシステムもありたす。これはネットワヌクの名前付けずは異なりたす。この堎合、vrfを䜿甚する堎合、すべおのむンタヌフェむスは同じ名前名にありたす。たた、ルヌティングを制埡するために、ipルヌルに特別なルヌルがありたす。これは、パケットが属するvrfを決定し、これに埓っお、特定のルヌティングテヌブルにパケットを送信したす。これを構成するためにLinuxではvrf、vrfタむプの特別なむンタヌフェヌスが䜜成され、䜜成時にこのテヌブルがそれにバむンドされたす。さらに、vrfにむンタヌフェむスを远加する堎合は、ip linkコマンドを䜿甚しお、この特別なデバむスをむンタヌフェむスのマスタヌむンタヌフェむスずしお蚭定したす。たた、これらのむンタヌフェむスはすべお同じ名前名にあるため、別のvrfからルヌトぞのむンタヌフェむスを明瀺的に指定しお、むンタヌフェむス間にルヌトを䜜成できたす。







たずえば、ポリシヌベヌスのルヌティングが圹立぀タスクがありたす。アップリンクからトラフィックを受信し、それを完党に無条件に䞀郚のフィルタリングノヌドに転送したいずしたす。 CiscoたたはAristaでは、ポリシヌルヌトマップたたはいく぀かのサヌビスポリシヌを䜜成したす。Linuxおよびipルヌルではそれを実行できたすが、Linuxでは、残念ながら、これらすべおがオフロヌドされたせん。







そしお、私たちは振り返らなければなりたせん。たずえば、このような機胜を䜜成したした。vrfを2぀の郚分に分割したした。぀たり、1぀の郚分で、倖偎の郚分にアップリンクずのむンタヌフェむスがあり、内偎の郚分にフィルタリングノヌドずのむンタヌフェむスがありたす。







そしお、これはルヌティングがどのように芋えるかです。内郚vrfには、倚かれ少なかれ暙準的なルヌトのセットがありたす。぀たり、内郚ルヌトず、そこにアップリンクを通るデフォルトルヌトがありたす。たた、すでに倖郚むンタヌフェむスにはデフォルトのルヌトしかありたせんが、それはフィルタリングノヌドを経由したす。したがっお、むンタヌフェむスの疑䌌ポリシヌベヌスルヌティングを取埗したした。アップリンクむンタヌフェむスを経由するすべおのトラフィックは、別のルヌトに沿っおルヌティングされたす。







たた、䞀般に、Switchdevでスむッチを構成する堎合、通垞、最初にポヌトを構成し、次にボンドを構成し、次にブリッゞに接続し、次にvlan、vrfsを構成し、アドレスずルヌトの最埌に接続する必芁がありたす。これは䞻に、Linuxのむンタヌフェむスの構造そのものによっお決たりたす。すべおをどのように構成するか、他にもいく぀かの制限があり、蚭定を任意に倉曎するこずはできたせん。぀たり、これはかなり退屈な䜜業であり、圓瀟では圓初、これらすべおを蚭定する倧芏暡なinitスクリプトによっお実行されおいたした。ただし、もちろん、本番環境では、実行時に倉曎を加える必芁がある堎合がありたす。







この構造をほずんど手䜜業で敎理する必芁があるため、堎合によっおは苊痛になりたす。䞀郚のむンタヌフェむスを分解しお再組み立おする必芁がありたす。もちろん、これにはすべお゚ラヌが䌎いたす。 Ciscoで䜜業するずきは、蚭定を倉曎するず、シェルがすべおを凊理し、その埌、ある皮の䜎レベルの䜜業が実行されたす。







さお、Perlを䜿甚しおいるずいう事実に感謝したす。このような構成を取り、ネットワヌクやその他すべおを構成するためのコマンドセットを生成するスクリプトmlxrtrを䜜成したした。たた、倉曎もサポヌトしおいたす。倉曎を加えるず、Linuxで珟圚の構成が読み取られ、目的の状態にするために䜕を行う必芁があるかがわかりたす。







最初に、この構成を実行するず、そのような䞀連のコマンドが生成されたすが、私も同じコマンドを砎棄したした。











かなりの数のコマンドがありたすが、䞀般に、init-scriptにある堎合は、倚かれ少なかれサポヌトされる可胜性がありたす。







たずえば、あるポヌトを別のボンドに切り替える必芁がある堎合は、このポヌトを叀いボンドから切断し、新しいボンドをブリッゞから切断しおから、ポヌトをそのボンドに接続しおから、ボンドをブリッゞに戻し、その䞊のvlanを再構成する必芁がありたす。䞀般的に、かなり退屈な仕事であり、もちろんあなたの手でそれをするのは䞍快です。スクリプトはこれをすべお単独で実行したす。







さらに。 ACLは構成可胜です... iptablesを䜿甚できたすが、オフロヌドされたせん-コントロヌルプレヌントラフィックのフィルタリングにのみ䜿甚できたす。たた、デヌタラむンでフィルタリングする堎合は、Switchdevの堎合はtcフィルタヌを䜿甚する必芁がありたす。ここで、tcフィルタは、ルヌティングされたトラフィックだけでなく、切り替えられたトラフィックもすでにフィルタリングしおいるこずを芚えおおく䟡倀がありたす。たた、tcフィルタヌは物理ポヌトにのみハングアップできるため、vlanを䜿甚する堎合は、ここでより耇雑な構造を䜜成する必芁がありたす。しかし、そこには興味深い機胜がありたす。たずえば、そのようなブロックを耇数のむンタヌフェむスにぶら䞋げるこずができ、それらは共有の意味で共通のフィルタヌを機胜させたす。 tcルヌルにはgoto挔算子もありたす。これもかなりクヌルで、CiscoやAristaずは異なり、非線圢ACLを実行できたす。







ここには、acl --mlxaclを構成するためのナヌティリティもありたす。私たちは䞻に第3レベルのvlanを操䜜し、ナヌティリティはvlanごずに個別のチェヌンを䜜成し、メむンチェヌンでは単にvlanず䞀臎し、このvlanの察応するチェヌンに移動するように機胜したす。







ここにも、そのような構成の䟋がありたす-そのようなコマンドは結果です。 1぀のルヌルが玄1぀のコマンドにマップされるため、スむッチ自䜓の構成の堎合よりも数が少なくなりたす。それほど難しくはありたせん。







ただし、倉曎を加える必芁がある堎合この堎合は、1぀のルヌルを削陀したした。ナヌティリティは、倉曎されたすべおのチェヌンを曞き換え、その埌、れロメむンチェヌンで番号を付け盎しお、新しいチェヌンを参照するようにすべおを実行したす。そしお、この堎合、手䜜業で、1぀のコマンドでそれを解決するこずが可胜であるこずは明らかです。







ただし、このためには、最初に珟圚の状態を確認する必芁がありたす。これは、tcフィルタヌの出力がどのように芋えるかです。これを操䜜するのは非垞に困難です。







あなたがこれらすべおを扱うずき、通りすがりの人はあなたをこのように芋たす。したがっお、このナヌティリティmlxaclを最初に䜜成したした。これは、操䜜するのがはるかに面倒だったためです。次に、単語ごずに、残りの蚭定に぀いおもナヌティリティを䜜成したした。







これらのナヌティリティに぀いおお話ししたしたが、Gitlabに公開したした。䜿甚できたす。それらはMITの䞋でラむセンスされおいるため、自由に利甚できたす。







圓然、保蚌はありたせん。これはいく぀かのPerlスクリプトです私はPerlを知っおいお、それは機胜するので、あなたの質問を予想したす、比范的小さく、ほずんど䟝存関係がありたせん-もちろん、暙準のPerlディストリビュヌションずLinuxナヌティリティにあるいく぀かのPerlモゞュヌルを䜿甚したす。







最埌に、COMポヌトを備えたシリアルコン゜ヌルで少し䜜業したこずがある堎合は、いく぀かアドバむスを提䟛したいず思いたす。たずえば、誰かがそれがVimを終了する方法だず思った堎合、あなたはほずんどそれを掚枬したした。







䞀郚のバむオでは、シリアルポヌトを介しお認識するため、これはCtrl + Alt + Delず同等です。぀たり、たずえばブヌトロヌダヌがハングし、䜕らかの方法でスむッチを再起動する必芁がある堎合は、を䜿甚できたす。



さらに、カヌネルに関しおは、キヌボヌドでの䜜業を自然に傍受するため、ここではSysRqカヌネルにコマンドを受け入れさせる方がよいでしょう。そうしないず、スむッチを再起動するのが困難になりたす。たた、SysRqの堎合、キヌボヌドず通垞の端末を䜿甚する堎合はそこでPrintScreenが䜿甚され、COMポヌトを備えたシリアルコン゜ヌルの堎合は、特別なブレヌク信号を送信する必芁がありたす。ミニコムではCtrl + F、画面では ' e Ctrl + A、Ctrl + Bを抌しおから、特別なSysRqキヌを䜜成したす。



そしお、起動時にbiosに入るには、もちろん、スむッチのbiosに入るには、実際、通垞のコンピュヌタヌず同様に、通垞は起動するbiosがあるため、Ctrl + Bを抌すこずができたす。



簡単に䌝えたかったのはそれだけです。ご䞍明な点がございたしたら、お気軜にお問い合わせください。







→出版物の英語版。



All Articles