質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1078閲覧

asyncioのレイテンシ低減Tips

YouheiSakurai

総合スコア6142

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

1グッド

1クリップ

投稿2018/05/30 15:33

編集2018/12/26 11:15

asyncioで低レイテンシ(100us〜1ms)で応答出来るサービスを実装するにあたって、何かtipsはありませんでしょうか?

今のところ思いつくのは、

  • TCPではなくUDPを使う
  • uvloopが使える環境であれば使う
  • streamではなくprotocolで実装する
  • Cythonが使えるところは使う
  • 標準ライブラリも一部Cython化する
  • sleepはtimeでもasyncioでもしない
  • Profileで見て削れそうなところは削る
  • 実測値が一番速い組み合わせのPython 3.6 + uvloop 0.8.1を使う
  • 処理単位が大きくならないように適宜awaitを挟む
  • なるべくCモジュールを使う
  • Python自体の最適化オプションを有効にしたビルドを使用する

です。

今、単純なPing Pongが200〜300usくらいなのですが、なんかまだスケジューリングやI/O周りで変な待ちが発生している気がします。

思いつきで結構なので、何か気付きのヒントを頂けないでしょうか。例えばprint()は使わない等々。よろしくお願いします。

追伸 ... 「PythonではなくGoやCを使おう」は無しの方向でお願いします。Python以外では自分の生産性レベルが著しく落ちてしまいます。

後日談 ... CPUの省電力機能を切ったりしてもジッタが軽減されて幸せになれました。

KSwordOfHaste👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

低レイテンシ(100us〜1ms)

Full GC(Garbage Collection)が動作するだけで、デッドラインを超える要求仕様ですね。。。

思いつきで良ければ、
0. Zero-Copy python
0. memoryview

どちらにせよ、Full GCについて意識する必要はあるのではー。

◇参考情報
Zero-copy networking

投稿2018/05/30 21:19

編集2018/05/30 22:12
umyu

総合スコア5846

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YouheiSakurai

2018/05/30 23:55 編集

ありがとうございます、GC周りですか。詳しくないので調べて追っかけてみます。あとzero-copyもありがとうございます、ぱっと見、知らないフラグも言及されてそうで、こちらもしっかり勉強します。
YouheiSakurai

2018/05/31 10:07

Zero-Copyは無理そうなのでLess-Copyの視点でmemoryviewを使って再度最適化した所、普通のWindows PCでも「Sequential 10000 round trips in 1.09 sc, ('min', '84.0 µs') ('mean', '104. µs') ('median', '92.0 µs') ('max', '2.50 ms')」くらいまでレイテンシを低減できました。bytesのスライス周りで無駄にメモリのコピーが発生していたようで、気持ちが良いくらい高速化した部分もあり、大変に助かりました。誠にありがとうございます。あと残るはジッタですが、GCを間欠的にしか有効化しない or 無効のままで定期的にプロセスを再起動させるといった方向で、また機会を改めて考えていこうと思っています。重ね重ね御礼申し上げます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問