Size: a a a

F# Flood: кибербабулинг башкиров

2020 September 21

F

Fill in F# Flood: кибербабулинг башкиров
Ayrat Hudaygulov
в мсбилде можно узнать тайминг операций. Удалось узнать что он тратит дохуя времени на рестор одного и того же. Объединил проекты с одинаковыми зависимостями, время уменьшилось. Потом проанализировал граф сборки, много было мест вида a -> b -> c
без ответвлений. Это убивает параллелизм сборки. Объединил такие куски графа в один.
Там где получались большие проекты пришлось копаться дольше чтобы разделить проект на N независимых чтобы их мсбилд мог билдить параллельно, а не последовательно
хм
источник

F

Fill in F# Flood: кибербабулинг башкиров
хм хм
источник

AH

Ayrat Hudaygulov in F# Flood: кибербабулинг башкиров
код не поменялся, а время сборки сократилось в два раза
источник

F

Fill in F# Flood: кибербабулинг башкиров
т.е. ты по сути немножк структуру проекта поменял, нет?
источник

AH

Ayrat Hudaygulov in F# Flood: кибербабулинг башкиров
Fill
т.е. ты по сути немножк структуру проекта поменял, нет?
да
источник

AH

Ayrat Hudaygulov in F# Flood: кибербабулинг башкиров
но там было 200 проектов в солюшне, а не 3
источник

AH

Ayrat Hudaygulov in F# Flood: кибербабулинг башкиров
было чо объединить
источник

F

Fill in F# Flood: кибербабулинг башкиров
Типа есть сборка, она юзает сборку А, а её юзает сборка Б, и ты делаешь, что сборка Б юзает сборку А директивно
источник

F

Fill in F# Flood: кибербабулинг башкиров
так?
источник

F

Fill in F# Flood: кибербабулинг башкиров
"много было мест вида a -> b -> c
без ответвлений" я вот про это
источник

F

Fill in F# Flood: кибербабулинг башкиров
Просто когда фронтендеры говорят про оптимизацию билда - они имеют ввиду наворчачивание зоопарка тулов
источник

AH

Ayrat Hudaygulov in F# Flood: кибербабулинг башкиров
Fill
Типа есть сборка, она юзает сборку А, а её юзает сборка Б, и ты делаешь, что сборка Б юзает сборку А директивно
не. есть условно сборка А. Её юзает сборка Б. Которую юзает сборка С

мсбилд такое билдит последовательно, при том что компилятор вообще-т может работать паралльно (парсинг лексер).
Но компилятор бессилен, т.к. его на запустят на проекте Б пока не выполнится сборка проекта А. Косяк

Надо использовать и параллелизм компилятора и мсбилда по максимуму.

Для начала схлопнем все три проекта в один и получим параллелизм компилятора (он ограничен).
Но уже збс

Теперь разделим проект на независимые куски чтобы получить чот типа

A -
    \
B - - D

C - /

и тогда мсбилд сможет параллельно запустить A, B, C, в которых компилятор будет чот делать паралльльно
ну и на последок останется маленький проект D, который всё это юзает
источник

AH

Ayrat Hudaygulov in F# Flood: кибербабулинг башкиров
короче, надо чтобы было не

A -> B -> C

а

A -
    \
B - - D

C - /
источник

AH

Ayrat Hudaygulov in F# Flood: кибербабулинг башкиров
не даром же у нас рязани 32 ядра
источник

AH

Ayrat Hudaygulov in F# Flood: кибербабулинг башкиров
пусть работают
источник

AH

Ayrat Hudaygulov in F# Flood: кибербабулинг башкиров
Fill
Просто когда фронтендеры говорят про оптимизацию билда - они имеют ввиду наворчачивание зоопарка тулов
Мой метод работает почти в любой экосистеме
источник

F

Fill in F# Flood: кибербабулинг башкиров
Ayrat Hudaygulov
не. есть условно сборка А. Её юзает сборка Б. Которую юзает сборка С

мсбилд такое билдит последовательно, при том что компилятор вообще-т может работать паралльно (парсинг лексер).
Но компилятор бессилен, т.к. его на запустят на проекте Б пока не выполнится сборка проекта А. Косяк

Надо использовать и параллелизм компилятора и мсбилда по максимуму.

Для начала схлопнем все три проекта в один и получим параллелизм компилятора (он ограничен).
Но уже збс

Теперь разделим проект на независимые куски чтобы получить чот типа

A -
    \
B - - D

C - /

и тогда мсбилд сможет параллельно запустить A, B, C, в которых компилятор будет чот делать паралльльно
ну и на последок останется маленький проект D, который всё это юзает
но при этом проект разъединить ты не можешь
источник

F

Fill in F# Flood: кибербабулинг башкиров
Т.е. это явный трейдоф, где продаешь дизайн, а покупаешь перформанс сборки
источник

AH

Ayrat Hudaygulov in F# Flood: кибербабулинг башкиров
Fill
но при этом проект разъединить ты не можешь
могу, но почти всегда

схлопнутый в один проект граф
A -> B -> C

будет собираться быстрее
источник

AH

Ayrat Hudaygulov in F# Flood: кибербабулинг башкиров
Fill
Т.е. это явный трейдоф, где продаешь дизайн, а покупаешь перформанс сборки
на первом шаге да.
источник