home.social

#кэш_процессора — Public Fediverse posts

Live and recent posts from across the Fediverse tagged #кэш_процессора, aggregated by home.social.

  1. Невидимый враг многопоточности: False Sharing и кэш-линии процессора

    Представьте задачу: мы пишем высоконагруженный сетевой сервис и нам нужно считать входящие пакеты. Чтобы не блокировать потоки мьютексами, мы решаем дать каждому потоку свой собственный счетчик. Нет общих данных — нет блокировок, верно?

    habr.com/ru/articles/1032804/

    #false_sharing #многопоточность #оптимизация #кэш_процессора #lockfree #кэшлиния #производительность

  2. Невидимый враг многопоточности: False Sharing и кэш-линии процессора

    Представьте задачу: мы пишем высоконагруженный сетевой сервис и нам нужно считать входящие пакеты. Чтобы не блокировать потоки мьютексами, мы решаем дать каждому потоку свой собственный счетчик. Нет общих данных — нет блокировок, верно?

    habr.com/ru/articles/1032804/

    #false_sharing #многопоточность #оптимизация #кэш_процессора #lockfree #кэшлиния #производительность

  3. Невидимый враг многопоточности: False Sharing и кэш-линии процессора

    Представьте задачу: мы пишем высоконагруженный сетевой сервис и нам нужно считать входящие пакеты. Чтобы не блокировать потоки мьютексами, мы решаем дать каждому потоку свой собственный счетчик. Нет общих данных — нет блокировок, верно?

    habr.com/ru/articles/1032804/

    #false_sharing #многопоточность #оптимизация #кэш_процессора #lockfree #кэшлиния #производительность

  4. Невидимый враг многопоточности: False Sharing и кэш-линии процессора

    Представьте задачу: мы пишем высоконагруженный сетевой сервис и нам нужно считать входящие пакеты. Чтобы не блокировать потоки мьютексами, мы решаем дать каждому потоку свой собственный счетчик. Нет общих данных — нет блокировок, верно?

    habr.com/ru/articles/1032804/

    #false_sharing #многопоточность #оптимизация #кэш_процессора #lockfree #кэшлиния #производительность

  5. [Перевод] Всего одна строка кода, из-за которой 24-ядерный сервер стал работать медленнее ноутбука

    Допустим, вы написали код для решения задачи, которая хорошо распараллеливается. Каждый поток занимается своим участком работы и не зависит от других, поэтому потоки почти не должны координироваться друг с другом, за исключением самого последнего этапа, когда требуется объединить результаты. Естественно, в данном случае логично предположить, что чем больше ядер задействуется для такого кода, тем быстрее он выполнится. Вы ставите бенчмарки и сначала прогоняете этот код на ноутбуке. Действительно, оказывается, что он практически идеально масштабируется на всех четырёх доступных ядрах. Затем вы прогоняете его на большой и пафосной многопроцессорной машине, рассчитывая, что производительность будет ещё выше — но убеждаетесь, что на практике этот код работает даже медленнее, чем на ноутбуке, сколько бы ядер под него не выделить. Да, именно с таким случаем мне однажды довелось столкнуться.

    habr.com/ru/articles/986810/

    #Cassandra #многоядерность #высокая_производительность #пропускная_способность #узкое_место #кэш_процессора

  6. [Перевод] Всего одна строка кода, из-за которой 24-ядерный сервер стал работать медленнее ноутбука

    Допустим, вы написали код для решения задачи, которая хорошо распараллеливается. Каждый поток занимается своим участком работы и не зависит от других, поэтому потоки почти не должны координироваться друг с другом, за исключением самого последнего этапа, когда требуется объединить результаты. Естественно, в данном случае логично предположить, что чем больше ядер задействуется для такого кода, тем быстрее он выполнится. Вы ставите бенчмарки и сначала прогоняете этот код на ноутбуке. Действительно, оказывается, что он практически идеально масштабируется на всех четырёх доступных ядрах. Затем вы прогоняете его на большой и пафосной многопроцессорной машине, рассчитывая, что производительность будет ещё выше — но убеждаетесь, что на практике этот код работает даже медленнее, чем на ноутбуке, сколько бы ядер под него не выделить. Да, именно с таким случаем мне однажды довелось столкнуться.

    habr.com/ru/articles/986810/

    #Cassandra #многоядерность #высокая_производительность #пропускная_способность #узкое_место #кэш_процессора

  7. [Перевод] Всего одна строка кода, из-за которой 24-ядерный сервер стал работать медленнее ноутбука

    Допустим, вы написали код для решения задачи, которая хорошо распараллеливается. Каждый поток занимается своим участком работы и не зависит от других, поэтому потоки почти не должны координироваться друг с другом, за исключением самого последнего этапа, когда требуется объединить результаты. Естественно, в данном случае логично предположить, что чем больше ядер задействуется для такого кода, тем быстрее он выполнится. Вы ставите бенчмарки и сначала прогоняете этот код на ноутбуке. Действительно, оказывается, что он практически идеально масштабируется на всех четырёх доступных ядрах. Затем вы прогоняете его на большой и пафосной многопроцессорной машине, рассчитывая, что производительность будет ещё выше — но убеждаетесь, что на практике этот код работает даже медленнее, чем на ноутбуке, сколько бы ядер под него не выделить. Да, именно с таким случаем мне однажды довелось столкнуться.

    habr.com/ru/articles/986810/

    #Cassandra #многоядерность #высокая_производительность #пропускная_способность #узкое_место #кэш_процессора

  8. [Перевод] Всего одна строка кода, из-за которой 24-ядерный сервер стал работать медленнее ноутбука

    Допустим, вы написали код для решения задачи, которая хорошо распараллеливается. Каждый поток занимается своим участком работы и не зависит от других, поэтому потоки почти не должны координироваться друг с другом, за исключением самого последнего этапа, когда требуется объединить результаты. Естественно, в данном случае логично предположить, что чем больше ядер задействуется для такого кода, тем быстрее он выполнится. Вы ставите бенчмарки и сначала прогоняете этот код на ноутбуке. Действительно, оказывается, что он практически идеально масштабируется на всех четырёх доступных ядрах. Затем вы прогоняете его на большой и пафосной многопроцессорной машине, рассчитывая, что производительность будет ещё выше — но убеждаетесь, что на практике этот код работает даже медленнее, чем на ноутбуке, сколько бы ядер под него не выделить. Да, именно с таким случаем мне однажды довелось столкнуться.

    habr.com/ru/articles/986810/

    #Cassandra #многоядерность #высокая_производительность #пропускная_способность #узкое_место #кэш_процессора

  9. Кэш, который нас предал: как мы ловили призраков в L3 и нашли side-effects в продакшене

    Это история о том, как мы несколько недель искали странные скачки latency в продакшене и в итоге уткнулись в поведение кэша процессора. Не в аллокатор, не в GC, не в сеть. В кэш. В статье — реальные эксперименты, код, метрики, гипотезы, которые не подтвердились, и довольно неприятные выводы о том, насколько процессор может быть непредсказуемым, когда система нагружена по-взрослому.

    habr.com/ru/articles/1003824/

    #кэш_процессора #cache_miss #L3_cache #latency #perf #false_sharing #NUMA #side_effects

  10. Кэш, который нас предал: как мы ловили призраков в L3 и нашли side-effects в продакшене

    Это история о том, как мы несколько недель искали странные скачки latency в продакшене и в итоге уткнулись в поведение кэша процессора. Не в аллокатор, не в GC, не в сеть. В кэш. В статье — реальные эксперименты, код, метрики, гипотезы, которые не подтвердились, и довольно неприятные выводы о том, насколько процессор может быть непредсказуемым, когда система нагружена по-взрослому.

    habr.com/ru/articles/1003824/

    #кэш_процессора #cache_miss #L3_cache #latency #perf #false_sharing #NUMA #side_effects

  11. Кэш, который нас предал: как мы ловили призраков в L3 и нашли side-effects в продакшене

    Это история о том, как мы несколько недель искали странные скачки latency в продакшене и в итоге уткнулись в поведение кэша процессора. Не в аллокатор, не в GC, не в сеть. В кэш. В статье — реальные эксперименты, код, метрики, гипотезы, которые не подтвердились, и довольно неприятные выводы о том, насколько процессор может быть непредсказуемым, когда система нагружена по-взрослому.

    habr.com/ru/articles/1003824/

    #кэш_процессора #cache_miss #L3_cache #latency #perf #false_sharing #NUMA #side_effects

  12. Кэш, который нас предал: как мы ловили призраков в L3 и нашли side-effects в продакшене

    Это история о том, как мы несколько недель искали странные скачки latency в продакшене и в итоге уткнулись в поведение кэша процессора. Не в аллокатор, не в GC, не в сеть. В кэш. В статье — реальные эксперименты, код, метрики, гипотезы, которые не подтвердились, и довольно неприятные выводы о том, насколько процессор может быть непредсказуемым, когда система нагружена по-взрослому.

    habr.com/ru/articles/1003824/

    #кэш_процессора #cache_miss #L3_cache #latency #perf #false_sharing #NUMA #side_effects

  13. [Перевод] Структуры данных на практике. Глава 1: The Performance Gap

    Часть I: Основы «В теории теория и практика одинаковы. На практике это не так». — авторство приписывается разными специалистам по computer science Загадка Два часа утра. Я смотрю на совершенно нелогичные данные профилирования. В процессе работы над загрузчиком для SoC RISC-V у нас возникла проблема с производительностью. Загрузчик должен был искать конфигурации устройств в таблице: примерно пятьсот элементов, каждый с 32-битным ID устройства и указателем на данные конфигурации. Всё просто. Мой коллега реализовал эту систему с помощью хэш-таблицы. «Поиск за O(1), — сказал он уверенно, — лучше уже некуда». Но загрузчик работал медленно. Недопустимо медленно. Время загрузки должно было находиться в пределах 100 мс, но превышало это значение на три порядка. Я попробовал использовать очевидную оптимизацию: заменить хэш-таблицу двоичным поиском по отсортированному массиву. Двоичный поиск занимает O(log n), что теоретически хуже, чем O(1). Так написано в учебниках. Мой преподаватель алгоритмов был бы разочарован. Но в результате загрузчик оказался на 40% быстрее. Как O(log n) смогло победить O(1)? Что происходит?

    habr.com/ru/articles/982784/

    #оптимизация_кода #микроконтроллеры #кэш_процессора #о_большое

  14. Почему программисты стали писать медленный код и это почти никого не волнует

    Иногда возникает странное ощущение: железо стало безумно быстрым, процессоры научились выполнять миллиарды операций в секунду, памяти стало больше, чем раньше было дискового пространства. Но почему-то программы всё равно тормозят. Открываешь простой веб-интерфейс — и ноутбук начинает шуметь вентиляторами. Запускаешь приложение для заметок — и оно ест полгигабайта RAM. Я долго думал, откуда это ощущение. Потом начал копаться: читать дизассемблер, смотреть профилировщики, запускать микробенчмарки. И постепенно стало понятно, что дело не в железе. Дело в том, как мы пишем код. Предлагаю поговорить о кэше процессора, о том, сколько стоит случайный доступ к памяти, о том, как CPU исполняет ваш цикл.

    habr.com/ru/articles/1013014/

    #производительность_программ #архитектура_процессора #кэш_процессора #оптимизация_кода #CPU_performance

  15. [Перевод] Структуры данных на практике. Глава 3: Бенчмаркинг и профилирование

    Проблема измерений Узнав из Главы 2 об иерархии памяти, вы, возможно, захотите оптимизировать свой код. Но есть одна проблема: как понять, что оптимизация на самом деле сработала? Этот урок дорого мне обошёлся. Я оптимизировал реализацию хэш-таблицы в загрузчике. Исходя из своего понимания поведения кэша, я переписал хэш-функцию так, чтобы она была «более дружественной к кэшу», и был уверен, что она станет быстрее. Я запустил код. Мне показалось, что он быстрее. Я закоммитил изменения. Неделю спустя коллега провёл бенчмарки и выяснил, что моя «оптимизация» замедлила код на 15% . Я оптимизировал не то, но у меня не было данных, чтобы подтвердить мои предположения. Вывод : никогда не доверяйте своей интуиции, всегда проводите замеры. В этой главе я расскажу, как измерять правильно. Мы создадим комплексный фреймворк бенчмаркинга и научимся эффективно использовать инструменты профилирования.

    habr.com/ru/articles/989570/

    #кэш_процессора #бенчмаркинг #статистический_анализ

  16. [Перевод] Задержки и системная архитектура

    Много JavaScript‑фреймворков назад, в 2009 году, Джеффри Дин , будучи инженером в Google, представил знаменитые «числа, которые должен знать каждый программист».

    habr.com/ru/companies/otus/art

    #задержки #системная_архитектура #производительность #кэш_процессора #иерархия_кэша

  17. [Перевод] Структуры данных на практике. Глава 2: Иерархия памяти

    «Память — это современный диск, диск — это современная лента», — Джим Грей Проблема ста тактов В Главе 1 мы говорили о том, что промахи кэша стоят 100-200 тактов, а попадания в кэш — всего 1-4 такта. И это не какая-то мелкая деталь, а самый важный фактор современной производительности. Ниже я расскажу, почему это так. Однажды я оптимизировал драйвер устройства для встраиваемой системы на RISC-V. Драйвер должен был обрабатывать пакеты от сетевого интерфейса, но при большой нагрузке мы теряли пакеты. CPU работал с частотой 1 ГГц, а для обработки каждого пакета требовалось около 500 команд. Простая математика: 500 команд ÷ 1 ГГц = 500 наносекунд на пакет При скорости 500 нс на пакет мы могли бы обрабатывать 2 миллиона пакетов в секунду. Однако мы справлялись всего с 200 тысячами пакетов в секунду, то есть в десять раз меньше, чем ожидалось. Профилировщик показан следующее: $ perf stat -e cycles,instructions,cache-misses ./driver_test Performance counter stats: 5,000,000 cycles 500,000 instructions 45,000 cache-misses Постойте-ка: 500000 команд должны занимать 500000 тактов (при 1 IPC). Но мы видим 5 миллионов тактов. Куда подевались лишние 4,5 миллиона тактов?

    habr.com/ru/articles/985292/

    #кэш_процессора #кэш_cpu

  18. Почему программисты стали писать медленный код и это почти никого не волнует

    Иногда возникает странное ощущение: железо стало безумно быстрым, процессоры научились выполнять миллиарды операций в секунду, памяти стало больше, чем раньше было дискового пространства. Но почему-то программы всё равно тормозят. Открываешь простой веб-интерфейс — и ноутбук начинает шуметь вентиляторами. Запускаешь приложение для заметок — и оно ест полгигабайта RAM. Я долго думал, откуда это ощущение. Потом начал копаться: читать дизассемблер, смотреть профилировщики, запускать микробенчмарки. И постепенно стало понятно, что дело не в железе. Дело в том, как мы пишем код. Предлагаю поговорить о кэше процессора, о том, сколько стоит случайный доступ к памяти, о том, как CPU исполняет ваш цикл.

    habr.com/ru/articles/1013014/

    #производительность_программ #архитектура_процессора #кэш_процессора #оптимизация_кода #CPU_performance

  19. Почему программисты стали писать медленный код и это почти никого не волнует

    Иногда возникает странное ощущение: железо стало безумно быстрым, процессоры научились выполнять миллиарды операций в секунду, памяти стало больше, чем раньше было дискового пространства. Но почему-то программы всё равно тормозят. Открываешь простой веб-интерфейс — и ноутбук начинает шуметь вентиляторами. Запускаешь приложение для заметок — и оно ест полгигабайта RAM. Я долго думал, откуда это ощущение. Потом начал копаться: читать дизассемблер, смотреть профилировщики, запускать микробенчмарки. И постепенно стало понятно, что дело не в железе. Дело в том, как мы пишем код. Предлагаю поговорить о кэше процессора, о том, сколько стоит случайный доступ к памяти, о том, как CPU исполняет ваш цикл.

    habr.com/ru/articles/1013014/

    #производительность_программ #архитектура_процессора #кэш_процессора #оптимизация_кода #CPU_performance

  20. Почему программисты стали писать медленный код и это почти никого не волнует

    Иногда возникает странное ощущение: железо стало безумно быстрым, процессоры научились выполнять миллиарды операций в секунду, памяти стало больше, чем раньше было дискового пространства. Но почему-то программы всё равно тормозят. Открываешь простой веб-интерфейс — и ноутбук начинает шуметь вентиляторами. Запускаешь приложение для заметок — и оно ест полгигабайта RAM. Я долго думал, откуда это ощущение. Потом начал копаться: читать дизассемблер, смотреть профилировщики, запускать микробенчмарки. И постепенно стало понятно, что дело не в железе. Дело в том, как мы пишем код. Предлагаю поговорить о кэше процессора, о том, сколько стоит случайный доступ к памяти, о том, как CPU исполняет ваш цикл.

    habr.com/ru/articles/1013014/

    #производительность_программ #архитектура_процессора #кэш_процессора #оптимизация_кода #CPU_performance