10Gイーサーに対応するのは結構大変・・・でも楽しい!?
今日も、ある開発案件で、10Gイーサーでの検証を行ってきました。10Gイーサーで大変だという話題などは、先日も少し書きましたが、
・Linuxでの最大スレッド数
・チェックサム計算の高速化:情報発信すると教えてもらえるのもうれしいこと!
高性能CPUでも対応しきれないほど、通信が高速という点です。特にチェックサム計算などは、全データをなめるため、どうしても計算量が増えてしまいます。先日の記事でアドバイスいただいた方法を組み込んだりしながら、それなりに高速化して、再び確認していたのですが、もう少し性能をUPさせたいところです。まあ、実環境があるおかげで、様々な側面から観察ができますので、対応方法もいろいろと浮かんできているのでまだ良いのですが。。
普段、なかなか高性能環境をブン回す機会はないので(社内には贅沢な環境は置いてないので・・・)、ちょっとだけ雰囲気を紹介してみましょう。
これは、ある処理を行うプログラムの、スレッド数を表示させているところです。26万2千128スレッドで、ほとんど使いたくなくなるくらいサーバが重たくなりました。ちなみに、この状態で、26万×2本のTCPコネクションが張りっぱなしになっています。52万本のTCPコネクションを張る確認をするだけでも、実は簡単ではありません。クライアント側は1つのIPアドレスから65535個しかコネクションを張れませんから、普通にTCPのクライアントプログラムを作っても、そう簡単には26万本もTCPコネクションできませんし、仮想IPアドレスを使っても、一般的なクライアント環境では26万本もTCPコネクションを使わせてもらえるようにするのはかなり大変です。サーバ側も26万個も接続をしっぱなしにするのは、たとえばapacheとかを使っても大変なことです。
まあ、当社のネットワーク好きメンバーであれば、直接TCP/IPパケットを作り出して何とでもできてしまうのですが。
さて、26万スレッドと52万本のTCPコネクションがある状態で、OSの様子を見てみると・・・まだまだメモリーは空き容量の方が多いですねぇ・・・と簡単に言ってはいけません。そもそもこのサーバには28ギガバイトものRAMがあり、13ギガバイトくらい使っているのです。一昔前までは、サーバ機でもRAMは4ギガバイトくらいだった気がするのですが・・・。
このように贅沢な環境でプログラムをブン回しても、処理によっては10Gイーサーに対応しきれないのです。。普通の使い方であれば、TCPチェックサム計算はTCPオフロードでCPUには負荷をかけないようにできたりするのですが、相変わらず私が開発しているものは普通ではないもので・・・。
まだまだチャレンジは続きますが、こういう作業はノウハウもたまりますし、刺激的で楽しいのですよねぇ!