Linuxは負荷がかかっています。 高性能シェーパー

以前の投稿では、高負荷下で動作するように設計されたLinux用のルーターのチューニングのいくつかの側面を見ました:Linux under load。 ルーター、NATサーバー次に、シェーパーについて説明します。



トラフィックフローの速度の制限(シェーピング)は、かなりリソースを消費するタスクです。 したがって、ネットワーク内に少なくとも数百の加入者が存在し、大量のトラフィックが通過する場合、シェーパー最適化の問題は特に深刻です。



Linuxを実行するシェーパーを検討します。このOSは、高負荷下でのパフォーマンスに関して最高の結果を示しています。



簡単な紹介





シェーパーは、パケットキューを提供する分野です。 規律は、クラスの有無にかかわらず可能です。 クラスあり-特定のクラスに従ってトラフィックを「損なう」ことができることを意味します。



どのクラスによってどのトラフィックがシェーピングされているか-フィルターを決定します。



簡単に言えば、フィルターツリーとクラスツリーの2つのツリーがあります。 フィルタは、特定の基準に従ってトラフィックをクラスにスローします。 クラスでは、トラフィックはクラスで指定されたパラメーターに従って優先順位付けまたはシェーピングされます。



ハッシュあり、ハッシュなし





他のツリーと同様に、特定のしきい値に達すると、フィルターツリーはリソースを大量に消費します。



あるIPアドレスからのパケットがフィルターツリーに分類されると、各フィルターの基準との比較が開始されます。 一致する場合、パケットは適切なクラスに送信されます。 つまり 着信パケットごとに、一致が発生するまでツリー内の各フィルターの基準に準拠しているかどうかのチェックが一貫して行われます。



たとえば、24番目のマスクを使用するネットワークの場合、必要なクラスを検索するとき、各パケットに平均128ステップがあります。



これは、少量のトラフィックと少数のサブスクライバでは重要ではありません。 数万人の加入者とギガビットがインターネットにアクセスすると、このアプローチはまったく不可能になります-シェーピングサーバーは単に負荷に対処しません。



ツリー全体がIPアドレスのチェックのシーケンスである場合、ハッシュを使用する方がはるかに効率的です。 ハッシュは、特定の「値」と特定の「キー」の対応表です。 この場合、キーはIPアドレスであり、値はパケットをクラスに導くフィルターです。



したがって、キー(IPアドレス)により、パケットに必要なフィルターをすばやく見つけることができます(1ステップ)。



実際、記事のハッシュの使用についてはすでに多くのことが書かれています-これは「軍事的なもの」ではありません。 ソースを参照できます。



シェーパーを作成するスクリプト





高速U32ハッシュフィルタージェネレーターは、シェーパーを構築する際の作業をはるかに容易にします。これは、ルーマニア(?)システム管理者によって作成されたCプログラムです。



入り口で、彼女には次のパラメーターが与えられます。







詳細な例は、上記のプロジェクトページにあります。



厳密に言えば、このプログラムの作業の本質を特に深く掘り下げる必要はありません。この場合、対処する必要はありません。



便宜上、特定の構成に基づいてプレフィックスとクラスのテーブルを構築し、必要なパラメーターを使用してフィルターを構築するために上記のプログラムを起動し、すべての長所からシェーパーの既製の構成を構築し、tc -bを実行する小さなスクリプトを作成しました



必要なのは、ファイルでいくつかの構成パラメーターを指定することだけです。



スクリプト構成





スクリプトフォルダーには、次のフォルダーとファイルが含まれます。







スクリプトの構成全体は、構成ファイルにあります。 構成するには、必ず以下のパラメーターを自分で変更してください。







残りを変更する必要はありません。



networksファイルでは、シェーパーを作成するネットワークを記述できます。 ファイルが空の場合-すべてのサブスクライバー用のシェーパーが作成されます。



サブスクライバのIPアドレスは、MySQLのデータベースから選択されます。



テーブルシェーパー:







Cl_statusテーブル:







ほとんどの場合、サブスクライバーのIPアドレスの選択要求を特定のデータベースに適応させる方が、その逆の場合よりも簡単です。 これを行うには、それに応じてshaper.phpファイルの70行目のリクエストを調整する必要があります



prefixrtee.cのコンパイル





スクリプトを機能させるには、添付のprefixtree.cファイルをコンパイルする必要があります



これは次のコマンドで実行されます:gcc prefixtree.c –o prefixtree



このスクリプトと共に、prefixtreeのわずかに修正されたバージョンが添付されており、そのような使用に適応していることに注意してください。



スクリプト実行





構成に適切な変更を加えた後、shaper.phpで選択を行い、prefixtree.cをコンパイルし、ネットワークで必要なネットワークを(必要に応じて)作成しました-スクリプトを実行できます。



起動はルートから実行する必要があり、単純に以下で構成されます。



/ usr / bin / php –q shaper.php



このスクリプトの後:







その結果、シェーパーが構築され、指定されたIPアドレスの指定されたパラメーターに従って、指定されたインターフェイスで起動されます。



サブスクライバに複数のIPアドレスがある場合、指定された速度パラメータで1つのクラスが構築され、すべてのサブスクライバIPアドレスがこのクラスに向けられます。 したがって、加入者が複数のIPを持っている場合、特定の速度の1つの「チャネル」が作成され、それがIP間で分割されます。



結果のシェーパー構成はdata / _classesにあります-これは、バッチ(-b)オプションでtcに供給することができる既製の構成ファイルです。



ログ





スクリプトのすべての段階がログ(ログフォルダー)に反映されます。



統計





このようなシェーパーは、5000を超えるサブスクライバーに正常にサービスを提供します。



注釈





shaper.phpファイル内の特定の帯域幅とhtbパラメーターは、それぞれの場合に編集する必要があります。



ダウンロードスクリプト





ここに全体を提供するにはコードが多すぎるため、 ホームページからスクリプトをダウンロードできます。



All Articles