国際会議 運用技術

GopherCon 2019でOptimization for Number of goroutines Using Feedback Controlについて発表をしました

国際会議 運用技術

ペパボ研究所 研究員/プリンシパルエンジニアの三宅(@monochromegane)です。 2019年7月24日から4日間に渡って開催されたGopherCon 2019で発表を行いましたのでスライドと共に紹介します。

GopherCon

GopherConはGo関連で最大級の国際カンファレンスです。 6年目となる今年は世界中から1,800名のGopherが参加し、200名以上の応募の中から選ばれた36名がスピーカーとして登壇しました。 今回のGopherConではPre-Conference Workshopと呼ばれるカンファレンス前日に終日行われるワークショップと、カンファレンス期間中に行われる25分のキーノートセッション、そして45分のチュートリアルセッションがありました。 その中で、僕は「Optimization for Number of goroutines Using Feedback Control」というタイトルで45分のチュートリアルセッションを務めました。

Optimization for Number of goroutines Using Feedback Control

Go言語では、賢いランタイムと軽量なGoroutineによって効率的に並行処理が実行されます。 しかしながら、スピードと安定性の両方を達成するために、開発者は経験と地道なチューニングを通してアプリケーションごとに最適なGoroutine起動数を決めなければなりません。 また、ほとんどの場合、プログラムがチューニングされる環境と実行される環境は異なります。 そのため、負荷状況やプラットフォームに依存せず高い性能を得るために、並行数は実行時に動的かつ高速に制御されることが望ましいです。 そこで本セッションでは、フィードバック制御と動的セマフォを用いてGoroutineの起動数を動的に制御する手法を提案しました。

具体的には、並行数を増加しても何らかのボトルネックにより処理性能が改善しなくなる並行数の上限の存在を前提として、これを汎用的に検知する指標を選定します。 次に、この指標の上限を達成するために必要な並行数をフィードバック制御により継続的に求めます。 なお、タスクの進行により指標の上限は変化するため、これを検知し制御器の目標値を更新します。 提案手法ではこれらを実現するための二重ループ構造を持つ制御器を実装しました。

評価では、並行数に対する様々な性能特性をもつタスクに対し、少ない並行数で安定したパフォーマンス向上を実行時に継続的に達成できることが確認できました。 今後は、制御器に関するパラメタ調整ならびにより効果的な指標を利用する実装を進めることで精度の向上を図りたいと思います。 また、最適な並行数を動的に求めるアーキテクチャの特性を活かして、クラウドコンピューティングにおける仮想サーバー台数の最適化にも応用を進めていきます。

会場の様子

発表の様子

gophercon2019

スライド

スピーカーノート

まとめ

今回のGopherConでの発表は、僕にとって初めての国際会議での登壇となりました。 これまでOSS活動の相棒として付き合ってきたGo言語、ペパボ研究所で研究職についてからの試行錯誤、そしてWeb System Architecture研究会への参加を始めとする継続的かつ長期的な研究との向き合い。 これらの集大成として挑んだ登壇であり、 幸いにも、発表に対して興味を持ってもらえたこと、一定の反響があったことを、非常に嬉しく思っています。これらの取り組みについては以下のエントリでも紹介していますのでよければご覧ください。

GopherConのトークについては、どれも最新の情報だけでなく、スピーカーの方の実際の経験に基づく興味深く、かつ面白いセッションばかりでとてもためになりました。 また、質疑についても非常に積極的に行われている印象を受けました。 今後は専門分野での能力だけでなく英語力も一層向上させ、この活発かつ深い議論の輪にもっと入っていけるようにしたいと思います。


【PR】パートナー積極採用中!

ペパボ研究所では、新しいパートナーを求めています。詳細については、当研究所のトップページをご覧ください。