1. Куча / Говнокод #25979

    +1

    1. 1
    "Performance is easy. All you need to know is everything" (c) S. Kuksenko (@kuksenk0)

    Умеете профилировать программы?
    Знаете, что такое flame diagram? Умеете посмотреть стектрейс от входа в тред до какого-нить спинлока в ядре? Смотрите асм своего компилятора или джита? Знаете, какая инструкция сколько занимает?
    Умеете по vmstat/iostat или xperf/perf counters увидать проблему и соотнести ее с программой? Используете dtrace голый или с instruments? yourkit? vTune? valgrind? bpf?
    Или такие же дебилы, как я?

    Запостил: MAKAKA, 20 Октября 2019

    Комментарии (59) RSS

    • официальный тред для обсуждения профилировки и перформанса
      Ответить
    • почему виртуальным машинам (.NET, JVM) нужны SafePoints чтобы отдать стект трейсы профилировщику?
      Почему нативным не нужны?
      Ответить
      • Потому что JIT придет и перехуевертитвсе

        У жабы есть ключ, чтоб репортовать стеки без safepoint, алсо по AsyncGetStackTraces тоже так работает,но есть нюансы
        Ответить
    • Дебажу принтами
      Ответить
      • А ечсли принтов нет?
        Ответить
      • Да, кстати, речь не о дебаге, а о простофилириловании.
        Ответить
        • Засекаю время таймерами
          Ответить
          • Чесговоря, не понимаю как люди пользуются профилировщиками для изменения времени в плюсах. Ну увидите вы, что 70% времени занимает вычисление длины вектора. И хуй? Что с этим делать то? Увидите, что 40% из этого тратится (условно) на треугольники, 60% на квадраты. И хуй? Что с этим делать то?

            Я пробовал профилировщик для шарпов, но забил хуй по описанной выше причине, и использовал собственные таймеры над высокоуровневыми функциями.
            Ответить
            • В «Visual Studio» профилировщик рисует нормальное дерево вызовов. Я вижу, что 90% времени жрёт вызов foo(), из которых 90% жрёт bar(), в котором 90% занимает вычисление длины вектора — значит, надо оптимизировать работу с векторами в bar().
              Ответить
              • Но в релизной сборке картина может быть совсем другой. Как в этом случае быть?
                Ответить
                • Профилировать релизную сборку. Там, ЕМНИП, надо пару флагов выставить, вроде генерации PDB.
                  Ответить
                  • Он имеет ввиду, что оптимизации могут быть другие наверное.
                    Для жоба и .NET не актуально обычно, а для нативного кода оч даже. Ну тут ты прав: надо профилить релизную сборку, а PDB надо иметь всегда, иначе как ты будешь разбирать краш релизной сборки?
                    Ответить
                    • > иначе как ты будешь разбирать краш релизной сборки?
                      Принтами.

                      Ну да, дебаг-версию профилировать смысла особого нет: там бо́льшую часть ресурсов пожрал долгоносик жрут всяческие assert'ы (в том числе и те, которые внутри CRT), плюс зачастую узкие места дебаг-сборки конпелятор способен оптимизировать сам, и делать это вручную — абсолютно бесполезный труд.
                      Ответить
                      • А какими инструментами ты пользуешься?
                        Используешь ли ты какие-то свои эвенты через EWT (раз уж мы про винду говорим) или только готовые?
                        Ответить
                        • Я пишу говно в «Visual Studio» и теку. Я вообще от «Visual Studio» теку, почти как от «Notepad++». «ETW» не использовал.
                          Ответить
                          • профилируешь-то ты тоже прямо в студии, або берешь что-то типа dotTrace?

                            >«ETW»
                            То-есть весь performance toolkit тож лесом?
                            Ответить
                            • Да, прямо в студии, но редко. Последний раз этим занимался когда пейсал маленькую недопесочницу для личного пользования — там перфоманс критичен был.
                              Ответить
                              • Такую хуйню используеш


                                https://docs.microsoft.com/ru-ru/visualstudio/profiling/media/diag-tools-cpu-usage-tab.png?view=vs-2019

                                ?
                                Ответить
                                • Нет, это, насколько помню, только в 2019 появилось. Раньше была (и есть) отдельная хуйня для профилирования, со сборкой специальной версии.
                                  Ответить
                                  • Performance Wizard мож
                                    https://www.ifourtechnolab.com/pics/performance-profiling-in-visual-studio-5.png
                                    ?
                                    Ответить
                                    • О, оно.
                                      Ответить
                                      • в xperf прикольно то, что он умеет тягать инфу с разных совершенно провайдеров, включая например кеш мисы и загрузку диска, и сводить это все в единый форшмак

                                        потом ты видишь, что в 3:20 у тебя было много обосравшихся бранч предиктов, а в это время твой код исполнял функцию foo().

                                        Это, типа, клево. Хз, если студия так умеет
                                        Ответить
                                  • Специальная сборка это instrumenting profiling.

                                    А ETW это вообще цыцадминский инструмент.

                                    На бейсике пишешь?
                                    Ответить
            • Во-первых можно посмотреть сколько раз ты вызываешь это вычисление. возможно, можно сократить это время.

              во-вторых все профилировщики умеют рисовать диаграммы или дерево стектрейсов, и ты можешь увидеть, какая из твоих фунций сильнее всего его дергает.

              например тут
              http://www.brendangregg.com/FlameGraphs/cpu-mysql-filt.png

              видно, что displatch_command БОльшую часть времени делает mysql_parse


              Кроме того, функциясми тебе трудно будет узнать, сколько времени ушло на GC, например
              Ответить
          • Как ты узнаешь, в какое место надо поставить принт?
            Ответить
            • Смотрю какие высокоуровневые операции потенциально самые зажравшиеся, и делаю над ними обертку с таймером.
              Ответить
              • А если у тебя в проекте миллион строк кода, и над ним работает 200 программистов?
                А если тормозит только конкретно у одного заказчика или толькона продакшене?
                Ответить
                • Я и не говорю что это нормально, как я делаю
                  Ответить
                  • родила дала вам perf, ebpf, instruments/dtrace, xperf, dottrace, yourkit, jprofile, а офицеры хотят жрать говно
                    Ответить
    • > Или такие же дебилы, как я?
      Да. Ты разве не знал, что программы становятся в два раза медлеенннеее с каждым годом?
      Ответить
      • Потому что их постоянно переписывают на очередной электрон
        Ответить
      • Дайте пороль от Rooster.
        Ответить
        • Зарегистрируй никнейм Ruster. Будешь питухом.
          Ответить
          • И будешь тогда писать на расте, как ржавый
            Ответить
            • Кстати, а «Clay» всё? В «Википедии» про него даже статьи нет, на сайте последняя новость в 2012-м году, в «Гитхабе» последний коммит в 2013-м (если не считать коммит в README).
              Ответить
              • погуглил
                Clay (Clowns Laughing At You), a hacker group in Who Am I
                Who Am I (German: Who Am I – Kein System ist sicher; English: "Who Am I: No System Is Safe") is a 2014 German techno-thriller film directed by Baran bo Odar.

                Сразу нажористая клюква

                Программа-ключ к месту в даркнете, где проходит связь Бенжамина и MRX сама является трояном, позволившим деанонимизировать Бенджамина. Пауля, Макса, Штефана и Наю убивает русская мафия
                Ответить
                • Покажу, что я имел в виду:
                  http://claylabs.com/clay
                  https://github.com/jckarter/clay

                  В своё время его рекламировали на «Говнокоде» как альтернативу крестам и сишке. На местном жаргоне он назывался «клеем». А «Rust» в те времена называли «питушнёй». Происхождение такого жаргона может объяснить диаграмма:
                  rooster    ruster
                  ------- -> ------
                   петух     питух
                     |         |
                     v         v
                   roost      rust
                  ------- -> -------
                  петушня    питушня
                  Ответить
                  • Абсолютно все попытки выгнать сишку потерпели крах. Смиритесь.

                    Пока боролись с сишкой, распостранился рак вроде JS. Живите теперь с этим
                    Ответить
                    • На ржавчине пишут новые версии «Фуррифокса». Но они, к сожалению, не запускаются на «XP».
                      Ответить
                      • Зачем нужен фурифокс? Чтобы висеть и тормозить?
                        Ответить
                        • Так точно! Java для того же самого нужна.
                          Ответить
                        • Вообще давайте перечислять всё, что тормозит:
                          1. «Фуррифокс».
                          2. «Java».
                          3. Двойные кавычки в «PHP».
                          4. Джойны в «MySQL».
                          5. «Pycharm».
                          6. «Windows 95» с точки зрения пользователя «Windows 3.1».
                          7. «Windows XP» с точки зрения пользователя «Windows 2000».
                          8. «Windows Vista» с точки зрения пользователя «Windows XP».
                          9. «Windows 10» с точки зрения пользователя «Windows 7».
                          10. «Skype».
                          11. Торренты на «Андроиде».
                          12. «Битрикс».
                          13. «Ютуб».
                          14. «VNC».
                          15. «Bounds checking» с точки зрения сишника.
                          16. «STL».
                          17. «Internet Explorer» (чуть не забыл про него, это слишком очевидно).
                          18. «Javascript».
                          19. «Eclipse».
                          20. Фреймворки.
                          21. «Apache».
                          22. «Flash».
                          23. Вычисления с нецелыми числами.
                          24. «Visual Studio».

                          Дополняйте.
                          Ответить
                          • 11. Торренты на «Андроиде». - они вылетают из-за нехватки памяти при первой возможности. Я ебал этот андроид.
                            Эклипс не тормозит, не пиздите. Ну в сравнении с pycharm.
                            Ответить
                            • По сравнению с F4 в фаре эклипс очень даже тормозит.

                              Тем более что для нормальной работы в эклипсе нужно установить 94 плагина, и тогда он тормозит по хлеще студии с решарпей
                              Ответить
                              • А с каких это пор f4 - это ide?

                                Для жавы эклипсу плагины не нужны. Ты сам-то с ним работал?
                                Ответить
                          • 25. «Mac OS» с точки зрения пользователя «Windows».
                            Ответить
                          • Виндуос с точки зрения лоровских фанбоев
                            Ответить
                  • Диаграмма петух-питух.
                    https://ok.ru/video/5723523744
                    Ответить
                    • Видео Надюшки Давыдовой (Дивициной)
                      Сама снимала?
                      Ответить
                    • По названию «Rusty rooster» гуглится куча разных логотипов. Кококококая интересная тема!
                      Ответить
                      • Ахахах
                        https://i.etsystatic.com/5388888/d/il/136062/710998994/il_340x270.710998994_p5rx.jpg
                        Ответить
                      • И правда.

                        P.S. Впервые при регистрации «повтор пароля» был полезен.
                        Ответить
    • Удивительно, что никто не упомянул perf под прыщи.

      зы: крышесносный чел научился видеть дджавовый бектрейс вместе с нативным
      https://www.youtube.com/watch?v=D53T1Ejig1Q

      * запилил опцию, чтобы джит не трогал врейм поинтер
      * заставил джита высирать мапы
      * скормил все в perf (линуксоыый обычный профилер главный) и получил объедененный стек
      охуенный
      Ответить
      • В писи имени капитана Пауэра нет никакого стека. Именно поэтому я за "ППЦ".
        Ответить
        • причем тут хардварный стек,если речь о бектрейсах?
          Ответить

    Добавить комментарий