TGViewer
АЛГОтрейдинг | ALKO трейдинг | CRYPDE | HFT АЛГОтрейдинг | ALKO трейдинг | CRYPDE | HFT @alko_trading · 1.33K subscribers
Post #1782 811
Как понять насколько у вас все херово и где вы не успеваете
Это пост, после которого вы сразу побежите пересматривать производительность ваших стратежек, кода и серверов :)

На своих торговых серверах запускаете вот эту штуку
while true; do
cat /proc/pressure/cpu | grep some
sleep 1
done

она начнет выдавать что-то типа такого
some avg10=0.00 avg60=0.00 avg300=0.00 total=2033886791
some avg10=0.00 avg60=0.00 avg300=0.00 total=2033886791
some avg10=0.00 avg60=0.00 avg300=0.00 total=2033886791
some avg10=0.00 avg60=0.00 avg300=0.00 total=2033886885
some avg10=0.00 avg60=0.00 avg300=0.00 total=2033886885
some avg10=0.00 avg60=0.00 avg300=0.00 total=2033887148
some avg10=0.00 avg60=0.00 avg300=0.00 total=2033887302
some avg10=0.00 avg60=0.00 avg300=0.00 total=2033887302
some avg10=0.00 avg60=0.00 avg300=0.00 total=2033887302
some avg10=0.00 avg60=0.00 avg300=0.00 total=2033887302
some avg10=0.00 avg60=0.00 avg300=0.00 total=2033887302
some avg10=0.00 avg60=0.00 avg300=0.00 total=2033887302
some avg10=0.00 avg60=0.00 avg300=0.00 total=2033887302


Внимательно смотрим на число total, но не на само значение, а на разницу с предыдущей строкой.
В моем случае это

some avg10=0.00 avg60=0.00 avg300=0.00 total=2033886791
some avg10=0.00 avg60=0.00 avg300=0.00 total=2033886791 = 0
some avg10=0.00 avg60=0.00 avg300=0.00 total=2033886791 = 0
some avg10=0.00 avg60=0.00 avg300=0.00 total=2033886885 = 94
some avg10=0.00 avg60=0.00 avg300=0.00 total=2033886885 = 0
some avg10=0.00 avg60=0.00 avg300=0.00 total=2033887148 = 263
some avg10=0.00 avg60=0.00 avg300=0.00 total=2033887302 = 154
some avg10=0.00 avg60=0.00 avg300=0.00 total=2033887302 = 0
some avg10=0.00 avg60=0.00 avg300=0.00 total=2033887302 = 0
some avg10=0.00 avg60=0.00 avg300=0.00 total=2033887302 = 0
some avg10=0.00 avg60=0.00 avg300=0.00 total=2033887302 = 0
some avg10=0.00 avg60=0.00 avg300=0.00 total=2033887302 = 0

Вот эта разница - это то, насколько ваш код неээфективен в микросекундах (us) или если сильно натянуть упрощение - насколько ваш код не успевает.

Чуть подробнее как это работает:
(сразу оговорюсь что это очень упрощенное и не абслютно правильное описание, но так легче понять)

/proc/pressure/cpu - показывает накопленное ожидание CPU процессами.
В моем случае бывают процессы которые хотят cpu, но им его линукс еще не дает, и они могут ждать до 263 us.
Не всегда, но бывают секунды в которых это есть.

Мы не знаем точно какой именно процесс ждал, но как минимум был один который хотел cpu, но ему шедулер его не давал 263 us. Еще раз: это не сумма ожиданий, а условный max.

Этот /proc/pressure/cpu считается слишком жопашно и не прозрачно, но если вы увидите там числа типа 1_000 или 10_000 - то это означает что у вас есть процессы которые опаздывают на 1 ms или на 10 ms. Например, инфа уже прилетела в сокет, ядро уже переложило пакет из NIC в очередь ядра и сказала что есть select(), но процесс еще не разбудился и ждет CPU.

Именно для нашего любимого (или нет) HFT можно понять насколько мы опаздываем: данные уже есть, а мы нихера не делаем.

Мониторить надо долго: может быть ситуация что все время все 0, а потом раз в пару минут начинается жопа: потому что на сервере запускается какая-то хуета типа backup/flush. Например, если вы юзаете redis - то он раз в N времени будет делать disk flush и одно ядро займет на 100%. Это будут миллисекунды, никакой top/htop/cloudwatch этого не покажет в принципе, но в этот момент cpu pressure улетит и ваш код не будет успевать на десятки миллисекунд.

Абсолютно идеальную картину с нулем опозданий можно достичь только если у вас cpu-ядер больше чем процессов. Например, 10 процессов и 100 ядер. В этом случае каждый процесс займет свое ядро и нигде не будет опоздашек. Даже если у вас 10 ядер и 10 процессов - то все равно будут небольшие опопоздания (как у меня в примере).

После этой метрики вы поймете где сколько можно выиграть прежде чем жаловаться на ебучий aws fabric и биржи.

PS: шейрить пост без лайков запрещено

Хз какой тег поставить, наверное это все-таки дурка оптимизации #hellcode
  • 🤝 28
  • 👍 12
  • ⚡ 4
More from @alko_trading
  1. Oct 7, 2026Есть ведь что-то прекрасное в созерцании таких графиков - как красиво цена стремится к нул…
  2. Oct 7, 2026Оказывается что binance дает торговать portfolio margin (не путать с PM Pro) только через…
  3. Oct 7, 20261300 тут должна быть шутка про тракториста
  4. Oct 6, 2026я нашел новый логотип для рубрики "дурка оптимизации" #hellcode
  5. Oct 2, 2026video post
  6. Oct 1, 2026Хроники HFT-дебага by @nirtik
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →