私たちのサーバーソリューションは、ioctlインターフェイスとAF_INETアドレスファミリソケットを使用して、多くのトンネル操作要求(追加/更新/削除)を処理します。アプロックス。数は100操作/分で、サーバー上に合計8,000を超えるトンネルがあります。
トンネルの数が増えると、奇妙な動作が観察されました。トンネルの数が増えると、ioctlによってカーネルで費やされる時間のランダム性が高まります。
例:約100トンネルの場合、平均ioctlの動作時間は100〜150ミリ秒の範囲ですが、2000を超えると、100〜10000ミリ秒の範囲になります。プロセスのランダム性は驚くべきものです。
straceは、プロセス時間の97%以上がioctlに費やされていることを示しており、内部タイマーがこれを確認しています。
これを最適化する方法はありますか?たぶんカーネルパラメータ(どれ)を微調整することによって?ランダム性を説明する方法は?
私たちのOSはUbuntuServer12.04です。
ここでは、ioctlは無罪であることが判明しました。 straceはそうであることを示しましたが、ftrace(またはtrace-cmdを使用したカーネルのより詳細な分析))は、ioctl中に、プロセッサスケジューラがコア/コンテキストの切り替え中にほとんどの速度低下を引き起こしたことを示しました。