Какие параметры: Какие параметры атмосферы характеризуют погоду?

Содержание

Какие параметры компьютера влияют на скорость сборки Gradle проекта / Хабр

Как вы думаете, какие характеристики сильнее влияют на скорость сборки вашего проекта: частота CPU или частота оперативной памяти? Количество ядер CPU или количество оперативной памяти? Влияет ли скорость постоянной памяти на скорость сборки? Однажды у меня в голове возникли такие вопросы, и я решил найти на них ответы. Лучший способ для этого — провести тесты. Поэтому представляю вам их результаты и попытаюсь их объяснить в меру своих знаний. Если хотите узнать, что больше всего влияет на скорость сборки, ну или, может быть, хотите обновить компьютер для сборки, но не знаете, во что лучше вложится, то добро пожаловать в статью.

Начнём с того, что «А зачем вообще нам это знать?».

По сути, есть одна основная проблема — непонятно, какое железо стоит брать.

Обычно бюджет покупки ограничен. Будь это покупка компьютера для себя или же для CI. Хочется за свой бюджет получить максимум.

Из чего следуют основные цели статьи:

  1. Понять, какие параметры и как влияют на скорость сборки.

  2. Как следствие, понять, что лучше купить.

  3. Как следствие, понять, как сэкономить.

  4. Ну и косвенно заденем тему разницы во времени сборки между одномодульным и многомодульным проектами.

Для начала, чтобы результаты тестов для нас были простыми и понятными, давайте определим методологию.

Методология

Сразу предупреждаю: циферок будет много. Очень. Но что поделать, такой «жанр».

Компьютер

Начнём со стенда, над которым и будем издеваться. 

Собственно, это мой домашний комп. Так что не ищите сакральной логики в подборе компонентов.

CPU: Ryzen 5 3600, 6 ядер, 12 потоков. Максимальная частота в бусте — 4200 МГц.

RAM: две планки по 8 Гб, две планки по 16 Гб. От Crucial.

Накопители: ноутбучный HDD 2.5”, конечно же, обычный HDD 3.5“, Sata SSD, NVMe SSD.

По умолчанию, если в описании теста не указано иное: 

  • Процессор в режиме Auto. Базовая частота — 3600 МГц, буст до — 4200 МГц.

  • 32 Гб оперативной памяти.

  • Накопитель NVMe SSD.

Ну и в качестве операционной системы у нас Windows 11.

Проект

В целом данные тесты можно спокойно интерпретировать к любым Gradle JVM проектам. В качестве тестового проекта возьмём наше Android приложение Циан. 

На момент проведения тестов в нём: 410 Gradle модулей, 443 тысячи строк Kotlin, 113 тысяч строк Java и 175 тысяч строк XML. Что-то мне подсказывает, что мобильные приложения из тонких клиентов свернули куда-то не туда…

Инструменты измерения

Для проведения тестов будем использовать Gradle Profiler. Это специальный инструмент, который позволяет производить измерения времени сборки и отдельных её этапов. Также он позволяет писать кастомные сценарии. Что нам очень понадобится. 

Затем он генерирует красивый отчёт, в котором сам определяет минимальное, максимальное и медианное время сборки и даже график рисует.

Сценарии

Всего их три:

  1. Многомодульная горячая.  

  2. Многомодульная холодная.

  3. Одномодульная холодная.

По названиям, естественно, ничего не понятно, поэтому давайте подробнее разберём каждый из них. Начнём с многомодульной горячей.

Горячая сборка приложения

Для её симуляции просто вносим изменения в Kotlin файл одного из фичёвых модулей и перезапускаем сборку. Этот модуль подключён только к главному (app) модулю, как runtimeOnly. 

Опасным красным цветом отмечены модули, которые пересоберутся, а зелёным — те, что будут UP-TO-DATE. Выглядит это как-то так:

То есть при изменениях в нём ничего лишнего собираться не будет. Только модуль, в котором произошли изменения и app-модуль. На timeline сборки у нас большинство модулей будут UP-TO-DATE. Так как изменений в части модулей нет, значит и собирать их смысла нет. Модуль с изменениями и app-модуль будут собраны.

По сути, это самый частый сценарий. Я бы назвал его основным.

Холодная сборка приложения 

Для её симуляции будем перед сборкой делать clean, а также передадим в Gradle аргумент —no-build-cache. Таким образом, кэши задействованы не будут. Как можно заметить — ни капелюшечки зелёного цвета. Всё красное. В итоге пересоберётся весь проект.

За счёт многомодульности clean и сборка будет осуществляться параллельно, насколько это возможно. Например, последний модуль app обычно собирается в полном одиночестве.

Холодную сборку на локальной машине приходится делать довольно редко. Только когда в проекте что-то поменялось кардинально. Но всё же приходится. Поэтому проверяем.

Холодная сборка приложения, как будто оно одномодульное

Не все используют многомодульность. А вдруг результаты для одномодульных проектов могут сильно отличаться? Непорядок. Поэтому давайте попытаемся симулировать и такой тип сборки. 

Для этого всё также перед сборкой будем делать clean, а также передадим в Gradle аргумент —no-build-cache. Но в дополнение к этому установим всего один Gradle Worker с помощью —max-workers 1 и передадим флаг —no-parallel.

С точки зрения структуры, относительно многомодульной сборки, у нас ничего не меняется.

А вот timeline изменится кардинально. Вместо параллельной сборки у нас все составляющие сборки будут выполняться последовательно.

За счёт этого получается симулировать одномодульное приложение, в котором также всё делается последовательно.

Предупрежу, что будь у нас реальное одномодульное приложение, то оно бы собралось быстрее, чем симуляция, так как не было бы задержек из-за конфигурации и запуска гораздо большего количества task. Но для нас это приемлемо, так как мы будем сравнивать получившиеся результаты только между собой.

Количество прогонов

Каждый сценарий прогоняется 6 раз: первый раз для «прогрева» и ещё пять раз происходят измерения. В качестве финального результата считаем медианное время сборок.

Это значит, что мы сортируем результат пяти прогонов от меньшего к большему и берём тот, что посередине.

Погрешность

В целом нужно понимать, что у всех железо разное, поэтому не стоит смотреть на абсолютные цифры. Основным критерием будет являться процент, на который стала быстрее собираться сборка. Так как у нас могут быть погрешности, то разницу меньше, чем в 2% не будем учитывать. «2%» — потому что примерно такая разница между значениями, полученными, если последовательно перезапускать сценарии без изменения конфигурации компьютера. Эта минимальная цифра, которую мне удалось достичь. Пришлось побаловаться с настройками Windows, антивируса и служб.

Также прикладываю текст файла со сценариями для Gradle Profiler. Мало ли кто-то захочет проверить или повторить тесты.

Сценарии Gradle Profiler
default-scenarios = ["clean_parallel", "cold_parallel", "hot_parallel", "clean_mono", "cold_mono"]
clean_parallel {
  title = "Clean"
  cleanup-tasks = ["clean"]
  warm-ups = 1
  iterations = 5
}
cold_parallel {
  title = "Clean AssembleDebug without cache"
  tasks = ["assembleDebug"]
  warm-ups = 1
  cleanup-tasks = ["clean"]
  iterations = 5
  daemon = none
  gradle-args = ["--no-build-cache"]
}
hot_parallel {
  title = "AssembleDebug with change kt file"
  tasks = ["assembleDebug"]
  warm-ups = 1
  iterations = 5
  apply-abi-change-to = "modules/feature/worktime_settings/impl/src/main/kotlin/ru/cian/worktime/settings/impl/domain/ports/WorkTimeSettingsRepository.
kt" } clean_mono { title = "Clean mono" cleanup-tasks = ["clean"] gradle-args = ["--no-parallel", "--max-workers", "1"] warm-ups = 1 iterations = 5 } cold_mono { title = "Clean AssembleDebug without cache mono" tasks = ["assembleDebug"] gradle-args = ["--no-build-cache", "--no-parallel", "--max-workers", "1"] warm-ups = 1 cleanup-tasks = ["clean"] iterations = 5 daemon = none }

Gradle Properties

Я постарался не включать настройки, которые бы сильно влияли на погрешность, хоть и ускоряли бы время сборки. Поэтому никаких кэшей. Да, это я про вас: Build Cache и Configuration Cache. Мы вас любим, но не сегодня.

Начнём с настроек, которые не будут меняться:

org.gradle.daemon=false
org.gradle.caching=false
org.gradle.configureondemand=false
kotlin.daemon.jvm.options=-Xmx4g
kotlin.incremental=true
kapt.use.worker.api=true
kapt.incremental.apt=true
kapt.include.compile.classpath=false

Собственно, это флаги отключения демона, кэшей и включения инкрементальной сборки для лучшей параллельности. Ничего особо интересного.

Поэтому посмотрим на те настройки, что будут менятся:

org.gradle.jvmargs=-Xmx24g -XX:+UseParallelGC
org.gradle.workers.max=12

Начнём с org.gradle.jvmargs. 

-XX:+UseParallelGC неплохо ускоряет время работы GC. Всё, что он делает, это включает параллельный GC. Делает он это стабильно, так что он, по сути, тоже постоянный. 

А вот -Xmx24g уже нет. Это количество оперативной памяти, которое мы выделяем куче для сборщика Gradle. 

А почему не выдать ему всю доступную оперативную память и не париться? Не стоит забывать, что сама операционка жрёт оперативу, как беременная лошадь. Плюс у сборщика Gradle есть не только куча, но и стек. Он так-то тоже место занимает. Так ещё и компилятор Kotlin отжирает немножко. И при выставлении слишком большого значения сборка, наоборот, сильно замедлится, так как начнёт использоваться swap.

Экспериментально-эмпирическим методом выяснено, что наш проект не собирается с -Xmx4g. Собирается при -Xmx5g, но много времени тратится на GC. Ну а при -Xmx6g он вообще «сладкая булочка» работает стабильно и быстро. Поэтому минимально приемлемым является именно 6 Гб.

Идеальным для тестов вариантом стала сложнейшая формула: «общее количество оперативы» минус 8 Гб. Которые как раз и уйдут на ОС, stack и т.п. Так как в тестах мы будем использовать либо 16 Гб, либо 32 Гб, то это параметр будет либо -Xmx8g либо -Xmx24g соответственно.

Напоследок про org.gradle.workers.max. С ним всё просто. Это количество Gradle Worker, которые будет использовать Gradle. Выставлять будем по принципу: количество Gradle Worker равно количеству потоков процессора. 

Что измеряем?

А что же мы в итоге будем измерять? Я долго думал, как можно поиздеваться над компьютером, и в голову мне пришли следующие варианты: 

  • частота ядер CPU;

  • количество ядер/потоков CPU;

  • количество оперативной памяти;

  • частота оперативной памяти;

  • скорость чтения/записи постоянной памяти.

По итогу мы увидим общее время сборки, а также время её составляющих:

  • время конфигурации;

  • время clean, для холодных сборок;

  • время, которое затрачивает GC на очистку памяти во время сборки;

  • время самой сборки. 

Пример

Ну и чтобы потом не путаться, взглянем на пример результатов теста.

Слева перечислены варианты теста. В самом верху — цветовая легенда, чтобы не запутаться. Справа — общее время сборки для варианта. По центру — timeline варианта. Он разбит по цветам, соответствующим легенде. И тут же рядом — количество процентов, на которое сборка стала собираться быстрее относительно первого варианта.  

Приступим, наконец, к тестам.

Частота ядер

Тут всё просто. В BIOS убираем Turbo Boost и фиксируем частоту процессора. У нас будет: 3000 МГц в качестве минимума, 3600 МГц, что на 20% больше минимума, и 4200 МГц, что аж на 40% больше минимума.

Посмотрим на результаты:

И мы получаем +14. 2% на 3600 МГц и +23.7% на 4200 МГц. Результат очень даже значительный. 

Видно, что в холодной сборке большую часть времени занимает build (кто бы мог подумать). Следом по времени идёт GC. Затем конфигурация. И в самом конце плетётся clean. 

Прирост от наращивания частоты большой, но можно заметить, что при переходе с 3000 МГц на 3600 МГц (прирост на 20%) мы ускорились на 14.2%. А вот при переходе с 3000 МГц на 4200 МГц (прирост на 40%) мы ускорились лишь на 23.7%. То есть зависимость частоты от скорости сборки нелинейная. 

 +15.7% на 3600 МГц и +25.8% на 4200 МГц. Прирост даже выше, чем в многомодульном варианте.

Но сразу бросается в глаза, что «типа одномодульная» сборка в абсолютных цифрах медленней в три с половиной раза. Применяя сложные технологии интерполяции и экстраполяции запатентованным алгоритмом «Пальцем в небо», мы можем предположить, что одномодульная сборка медленней где-то втрое. Разница колоссальная. Но в то же время…

Может возникнуть вопрос: «А почему не в 12 раз? Мы использовали для одномодульной сборки 1 Worker, а для многомодульной — 12. «Где мой прирост в 1200% Лебовски?». Всё дело в том, что Gradle довольно умненький, и его Tasks хорошо параллелятся. Даже при одном Worker он занимает все 12 потоков процессора. Пусть и всего на 30-40%. Поэтому вся суть ускорения сборки от многомодульности раскрывается в горячей сборке. К слову о ней.

+17.9% на 3600 МГц и +24.7% на 4200 МГц. Моё почтение. В абсолютных цифрах это в 40 раз быстрее одномодульной холодной. 

Сразу о слоне в комнате показателях теста: конфигурация занимает почти половину времени. Сама сборка 40% и 15% отбирает GC. Поэтому Configuration Cache и флаг 

org.gradle.configureondemand=true

так важны в горячих сборках. 

Выводы

  • Разница между 3Ггц и 4.2 Ггц — 25% при приросте частоты на 40%. Прирост нелинейный.

  • Холодная многомодульная сборка быстрее одномодульной не в 12 раз, а в 3 раза. Если вы думали иначе, то передумайте. Вся скорость многомодульности в горячих сборках.

  • Горячая сборка очень любит Configuration Cache.

Количество ядер

В BIOS возвращаем Turbo Boost и ставим частоту на Auto (на удивление, это почти не влияет на погрешность). Вместо этого балуемся с количеством физических ядер, выбирая между четырьмя и шестью. Так как у нас есть SMT (аналог Hyper-Threading от Intel) который на каждое физическое ядро создаёт два логических потока, то и число потоков у нас варьируется от 8 до 12. То есть увеличивается на 50%.

Прирост, конечно, меньше, чем в случае с частотой. Но тоже очень хороший. Правда есть один нюанс… В данном случае сильно важно, насколько хорошо у вас всё разнесено на модули. Так как время сборки каждого отдельного модуля может отличаться. Есть модули, от которых зависит много других модулей, и если они имеют большой размер, либо большое количество кодогенерации, то прирост будет небольшим. Так как часть Gradle Worker будут простаивать в ожидании, когда же соберётся такой модуль. Создавая «бутылочное горлышко». Да и базовые модули никто не отменял. Для примера давайте взглянем, как соберётся проект на трёх Gradle Worker.

И тот же проект на шести Gradle Worker.

Итоговое время, безусловно, уменьшилось. В то же время количество и размеры простоев увеличились. В итоге, чем больше Gradle Worker и ядер, тем сильно меньше пользы приносит каждый из них. Поэтому чем меньше в вашем проекте таких блокирующих модулей, тем больший эффект вам даст прирост количества ядер.

Напомню, что у нас больше 400 модулей и прям огромных монолитов нет. А прирост всего навсего 19.3%.

Ожидаемо, что прирост в одномодульной сборке от количества ядер сильно меньше, чем для многомодульной, всего около пяти процентов. При увеличении числа ядер на 50% я напомню. Всё логично, так как меньше параллельных задач. Небольшой прирост опять же есть из-за того, что Gradle молодчина и пытается параллелить задачи даже в одномодульном режиме.

В горячей сборке тоже прирост не такой большой, как в холодной. Так как параллелить тоже особо нечего. Мы ведь изменили только один модуль. Есть, конечно, Gradle Task, которые не зависят друг от друга, и их можно выполнить параллельно, но, как мы видим, их не слишком много. 

Также хорошо видно, что время GC существенно уменьшилось, и основной прирост в скорости именно от этого. У нас включён параллельный GC. И что логично, чем больше у параллельного GC есть потоков, тем лучше.

Выводы

  • Количество ядер сильно влияет только в многомодульной сборке.

  • Чем лучше распараллелен проект, тем больший прирост.

  • Слишком много ядер для сборки не нужно. Лучше вложится в частоту, там прирост будет выше.

Непонятный факт

Можно заметить, что сборка с частотой, выставленной в Auto режиме, в котором частоты должны доходить до 4200 МГц, собиралась 10:32, но когда мы руками выставляли 4200 МГц, то результат был 8:46. На деле результат в Auto режиме находится между 3000 МГц и 3600 МГц. Что как бы подозрительно.

Чтобы понять, в чём причина, я ещё раз прогнал тесты, и результат не поменялся.

Тогда я предположил, что, возможно, проблема в Turbo Boost, который выставляет слишком низкие частоты. Но прогон тестов с включенным мониторингом показал, что это не так. Частоты почти всегда были выше 4000 МГц.

Дополнительно проверил и в Doom 2016. Для полной надёжности результатов, наиграв несколько часов. Исключительно в научных целях, конечно же. В игре тоже с частотами всё было в порядке.

Самое занятное, что со временем я обновил процессор до Ryzen 7 5800X. У него тоже прослеживается подобное. На фиксированной частоте 4200 МГц результат получается лучше, чем в режиме Auto, в котором, судя по показаниям мониторинга, частоты доходят до 4700 МГц. Найти объяснение этому я так и не смог. Возможно, проблема в Turbo Boost, AMD, возможно, в Windows 11, в планировщике ядер, а может, и сам Gradle подлянки устраивает. Эта тема требует отдельного изучения.

Заканчиваем мучить процессор и переходим к памяти.

Количество памяти

Всё просто. Берём два комплекта памяти. На 16 Гб и на 32 Гб. Выставляем им одинаковые настройки: частоты, тайминги и напряжение. В моём случае это были два комплекта от одного производителя и из одной линейки. Поэтому ничего делать и не пришлось.

Прирост весьма хорош. В основном от уменьшения времени GC. В целом понятно, что из-за большего объёма оперативной памяти у GC меньше причин срабатывать. Время непосредственно же build тоже стало меньше, но совсем на чуть-чуть.

Для одномодульной сборки показатели не очень впечатляющие. Где-то на границе погрешности. По всей видимости из-за того, что сборка более последовательная. Столько оперативной памяти ей и не нужно.

В горячей сборке тоже особого прироста нет. При изменениях в одном модуле много оперативной памяти не нужно, так как количество кода, который надо скомпилировать, тоже не велико. Опять же, весь прирост от GC.

Выводы

  • На локальной машине 16 Гб пока достаточно для проектов, сопоставимых с нашим. Если вы, конечно, не любитель держать приложения и вкладки браузера вечно открытыми.  

  • Одномодульному проекту вообще плевать.

  • На CI Gradle можно дать больше памяти, так как всяческие проверки дополнительно подъедают память.

Частота памяти

Для комплекта на 32 Гб выбираем 2400МГц, 3000 МГц, что на 25% больше, и 3600 МГц, что аж на 50% больше. И самое главное — обязательно фиксируем тайминги. И вы подумали «Что ещё за тайминги и зачем их обязательно фиксировать?». 

Самое простое объяснение, которое я слышал, звучит примерно так: «Представьте  что оперативная память — это набор шкафов с книгами. Когда оперативной памяти нужно обратиться к своей ячейке, это равнозначно тому, что вам надо достать книгу из шкафа. У вас есть номер шкафа (номер чипа памяти), номер полки (номер строки) и номер книги на полке (номер столбца).».

Чтобы прочитать какую-либо книгу, вам потребуется:

  1. Подойти к шкафу.

  2. Пододвинуть лестницу к нужной полке.

  3. Взять книгу.

  4. Вернуть лестницу в начальное положение.

Каждое из этих действий отнимает разное количество времени. Подойти к шкафу — 17 секунд, сдвинуть лестницу — 20 секунд, вернуть обратно лестницу — опять же 20 секунд. Ну и, собственно, найти книгу на полке — 42 секунды.

В итоге ваш тайминг 17-20-20-42.

Также и в оперативной памяти. Только компьютер оперирует не секундами, а тактами. Вот тут в дело и вступает частота. Частота — это количество тактов в секунду.

И вот тут начинается интересное. Если тайминг не зафиксирован, то материнская плата сама его выбирает. Зачастую с запасом. И когда мы подняли частоту, то может выбрать, например, не 15, а 16.

В итоге, просто подняв частоту, мы не увидим существенного прироста.

Ведь 15/3000МГц = 16/3200МГц = 5 наносекунд.

Поэтому обязательно фиксируем их.

В итоге фиксируем тайминги на 20-20-20-42, и сабтайминги на то значение, при котором модули нормально работают на частоте 3600 МГц. Ну и дальше уменьшаем частоту до 3000 МГц и далее до 2400 МГц.

Пропускная способность памяти получилась следующей (медианное из 5-ти прогонов):

  • 2400 МГц. Чтение 25586 MB/s. Запись 20170 MB/s.

  • 3000 МГц. Чтение 36587 MB/s. Запись 25885 MB/s.

  • 3600 МГц. Чтение 42427 MB/s. Запись 31510 MB/s.

Ну-у-у. Честно говоря, результата то почти и нет. Видимо, Gradle не так сильно важна скорость памяти. Так как «голода памяти» не наступает, и процессор всегда занят делом. Я бы списал это на погрешность, но результат стабильный. Могу предположить, что для процессоров с большим количеством ядер частота памяти будет иметь чуть большее значение. 

Опять же небольшой прирост. Ничего интересного.

В процентах это, конечно, неплохо, но в абсолютных значениях — около 5 секунд, что опять же не впечатляет.

Выводы 

Наверное, самый разочаровывающий тест. Не знаю почему, но я ожидал гораздо-гораздо большего. Ведь в тех же играх за счёт частоты оперативной памяти удалось получить до 15% прироста.

В целом можно понять две вещи:

Скорость накопителя

Возвращаем частоты и тайминги на значения по умолчанию и начинаем тест. Возьмём все типы накопителей, что есть у меня дома:

  • HDD 2.5”. Даже не помню, откуда он у меня. Возможно, из старого ноутбука, а возможно, он и не мой.

  • HDD 3.5”. Использовался как файлопомойка.  

  • Sata SSD. Купил ради тестов, а потом запихал в Playstation 2, чтобы меньше шумела. Вот такой вот я странный.

  • NVMe SSD. Основной мой накопитель.

  • RAM Storage. Специальный гость. Делал с помощью программы ImDisk.

Чуть подробнее про RAM Storage. По сути, мы выделяем в оперативной памяти область, к которой мы будем обращаться как к накопителю. В теории оперативная память сильно быстрее, чем любой накопитель. 

Ну и сравнительная таблица скоростей (всё в Мб/с):

Sequence Read

Random Read

Sequence Write

Random Write

HDD 2. 5”

80.845

0.629

67.491

0.727

HDD 3.5”

155.733

1.614

142.615

1.619

Sata SSD

446.519

163.999

353.164

126.276

NVMe SSD

3567.495

1542.787

2325.665

1577.327

RAM Storage

7841.693

1056.208

12537.931

658.770

Как мы видим, на деле всё чуть сложнее… Сначала от накопителя к накопителю скорость только растёт, но на RAM Storage вся логика ломается.

Скорость последовательного чтения ниже, чем скорость записи, а случайное чтение и запись медленнее, чем на NVMe SSD. Это связано как с самой эмуляцией, так и с файловой системой. К тому же работа с оперативной памятью ведётся постоянно. Из-за этого, пока процессору будут нужны какие-либо данные из оперативной памяти, наш RAM Storage будет подтормаживать.

Дальше всё просто. Запускаем ОС не с того накопителя, на котором находится проект. Не забывая при этом добавить папки с проектом в исключения индексатора и антивируса, как это рекомендует Google. Иначе придётся делать тест заново, так как результаты будут непонятными. 

Погнали.

Похоже, что для холодной сборки многомодульных проектов использовать HDD категорически нельзя. Видимо, слишком большой объём данных нужно получить с накопителя. Так ещё и при сборке записываются сотни и тысячи мелких файлов, с которыми у HDD не очень. В итоге вся сборка упирается в него. Таким образом, HDD становится бутылочным горлышком. А вот разница между Sata SSD, NVMe SSD и RAM Storage не столь драматичная. Да, прирост есть, но не такой большой. 

Разница между NVMe и RAM Storage — 22 секунды. Неплохо, но учитываем разницу в стоимости за 1 Гб… Да и разница в тестах оперативной памяти между 16 Гб и 32 Гб  была в районе 30 секунд. Так что лучше пустить оперативу по прямому назначению.

Холодная одномодульная сборка меньше выигрывает от замены накопителя, но опять же от Sata SSD прирост прям хороший. Дальше прирост уже не такой заметный.

Для горячей сборки от смены накопителя не меняется ничего. По всей видимости, слишком малый объём данных считывается и записывается, чтобы скорость накопителя начала как-то влиять. Все результаты в рамках погрешности.

Выводы

  • HDD пока! Похоже, тесты показывают, что HDD в 2022 году лучше уже не использовать. Вместо него стоит взять SSD. Слишком уж много потенциальных плюсов он даёт.

  • Достаточно и обычного SSD. Относительно него от NVMe прирост не слишком большой, но и по цене они почти равны. Так что, всё решает наличие NVMe M2 слота.

  • RAM Storage для сборок — ненужный шик.

Самый-самый последний тест

Напоследок давайте попробуем сравнить наши результаты с результатами на Apple silicon.

К сожалению, я не настолько богат, чтобы сравнивать M2 с каким-нибудь Intel 12900K. Но я могу сравнить то железо, к которому у меня есть доступ. 

Поэтому сравним:

  • Мой домашний комп на Ryzen 3600 c 32 Гб RAM.  

  • MacBook Pro на M1 с 16 Гб RAM. 

  • MacBook Pro на M1 Pro с 32 Гб RAM.

Как минимум мы поймём, как себя ведёт Apple silicon в разных видах сборки по сравнению с обычным домашним компьютером.

В данном виде сборки очень решает именно многопоточная производительность. Тут M1 немного проигрывает обычному компьютеру. А вот M1 Pro прямо разрывает всех напрочь. Напомню, что мы сравниваем, по сути, процессор в ноутбуке с десктопным вариантом.

M1 Pro так оторвался от обычного M1 за счёт того, что у него в два раза больше производительных ядер.  

И мой любимый компьютер остаётся позади обычного M1… Зато он умеет запускать любые игры. Шах и мат Apple silicon. M1 таким похвастаться не может. 

А если серьёзно, то в данном виде сборки производительность на 1 ядро является ключевым фактором. Ну и, как видно по тестам, у Apple silicon с этим всё прекрасно. При этом разница между M1 и M1 Pro — в районе погрешности. Что и логично, так как в M1 Pro просто больше производительных ядер. При этом они такие же, как и в обычном M1.

И опять Apple silicon быстрее. Вдвое. Сюда бы ещё Configuration Cache докинуть, вообще сказка будет. 

Конечно, по итогу вопрос в стоимости. Но если у вас есть куча денег или лишняя почка, может, даже не своя, то выглядит так, что Apple среди рабочих ноутбуков впереди планеты всей. Так как не стоит забывать, что у него ещё и энергоэффективность на высоте. 

Субъективное мнение

Вообще, выводы вы можете сделать самостоятельно. Все цифры в статье. Касаемо того, что думаю по поводу этого я… 

Я был немного разочарован. Что 8 лет назад, когда я начинал карьеру, что сейчас — основным параметром является частота. Да, количество потоков тоже важно, но оно так и не стало решающим фактором. 

Давайте подумаем, на что обратить внимание при сборке ПК.

В целом такая сильная зависимость от частоты ставит под сомнение сборку на ноутбуках без хорошего охлаждения, а таких большинство. Так как из-за нагрева процессор начнёт тротлить, сбрасывая частоты Turbo Boost. Если хотите использовать ноутбук — возможно стоит посмотреть в сторону Mainframer Ну, либо можно использовать технику на Apple silicon. Она очень хорошо показывают себя в сборке проектов. Но тут и бюджеты другие.

Самые топовые процессоры вроде Ryzen 7950X с его 32 потоками станут нужны, только если у вас проект очень хорошо разбит на модули и вам действительно есть чем их загрузить. В целом же — середнячки и чуть выше — наше всё.

Не стоит, конечно, забывать и поколения процессора. Какой-нибудь Ryzen 5 1600 будет сильно отставать от Ryzen 5 5600 на той же частоте. К сожалению, провести такие тесты, не имея у себя зоопарк из процессоров и материнских плат, нельзя. Так что извиняйте.

Касаемо CI, тут точно надо отказываться от HDD, если они у вас остались. Ну и если будет выбор между процессором с большой частотой и процессором с большим количеством ядер, то, думаю, лучше посмотреть в сторону более частотного процессора.

Если у вас есть идеи, что же можно ещё протестировать в конфигурации компьютера, то смело предлагайте в комментариях.

Какие параметры у размера S?

Статьи › Алиэкспресс › Алиэкспресс — вопросы › На Алиэкспресс как выбрать размер одежды › Нужно ли покупать верхнюю одежду на размер больше? › Как определить свой размер одежды по росту и весу?

Женская одежда

Российский размер

40

44

Международный размер

S

Обхват груди, см

78-82

86-90

Обхват талии, см

58-62

66-70

Обхват бедер (см)

84-88

92-96

Размер одежды S — это 44-й российский размер. Иногда он может соответствовать и 42-му (параметры могут разниться), но, вообще-то, значения для данного размера таковы:

  • Обхват груди: 88 см
  • Обхват талии: 70 см
  • Обхват бёдер: 94 см
  1. Какой размер S женский?
  2. Какой рост у размера S?
  3. Какой это размер S?
  4. Какие параметры соответствуют размеру S?
  5. Что меньше размер s или xs?
  6. Что меньше размер S или M?
  7. Какой вес при размере S?
  8. Какая должна быть талия в 15 лет?
  9. Какой размер S по русски?
  10. Чему равен размер одежды S?
  11. Какой размер при росте 160?
  12. Как определиться с размером одежды?
  13. Какой размер ремня на размер S?
  14. Какой размер при росте 170?
  15. Какой размер при росте 164?
  16. Что больше S или SX?
  17. Кто носит размер м?
  18. Как узнать свой размер женский?
  19. Какой размер Рост вес?
  20. Какой размер на 14 лет?
  21. Как понять какой размер нужен?
  22. Какой это размер 38?
  23. Какой размер у штанов S?
  24. Какой это размер 36?
  25. Что за размер SM?
  26. Какой самый маленький размер одежды для девушек?
  27. Какой это размер M?
  28. Какой размер одежды на рост 155?
  29. Как узнать свой размер в буквах?
  30. Какой размер одежды должен быть в 15 лет?
  31. Как понять размер S или M?
  32. Какой размер S или L?
  33. Какой размер 42 в буквах?
  34. Какие параметры 42 размера?

Какой размер S женский?

Таблица женских размеров

Россий- ский размер

Междуна- родный размер

Обхват бедер (см)

38

XXS

82

40

XS

86

42

S

92

42-44

S/M

92-96

Какой рост у размера S?

Таблицы РАЗМЕРОВ

Размер

рост

обхват талии

XS

166 — 170

70 — 76

S

170 — 174

76 — 82

M

174 — 180

82 — 88

L

180 — 186

88 — 94

Какой это размер S?

РАЗМЕРНАЯ СЕТКА — МУЖСКАЯ ОДЕЖДА

Международная

XS

S

По вороту сорочки, см

35-36

37-38

Обхват груди, см

86-88

90-92

Обхват талии, см

70-74

76-78

Обхват бедер, см

90-92

94-96

Какие параметры соответствуют размеру S?

ГОСТ таблица размеров женской одежды

Обхват талии, см

Обхват бедер, см

Международный стандарт

60 — 65

84 — 90

XXS

66 — 69

92 — 95

XS

70 — 73

96 — 98

S

74 — 77

99 — 101

M

Что меньше размер s или xs?

Теперь не сложно определить какой размер больше S.

Какой размер больше в международной размерной линейке

Международный стандарт

Европейский (немецкий) стандарт

стандарт

XXS

32

40

XS

34

42

S

36

44

M

38

46

Что меньше размер S или M?

Расшифровка обозначений (значки на ярлыках одежды): «XS» (eXtra small — очень маленький), «S» (small — маленький), «M» (medium — средний), «L» (large — большой размер), «XL» (eXtra Large — очень большой), «XXL» (eXtra eXtra Large — супер-большой), «XXXL» и так далее (подробнее — в таблице).

Какой вес при размере S?

Prolimit

Размер

Рост

Вес

46 XS

168-173

54-64

48 S

171-176

61-70

49/ST/94

178-186

63-72

50 M

173-178

67-77

Какая должна быть талия в 15 лет?

Таблица размеров

Размер

Возраст, лет

Обхват талии

164

13

71-73

164L

14

74-75

170

14

75-75

176

15

75-75

Какой размер S по русски?

Таблица размеров для мужчин

Европейский размер

Российский размер

Обхват талии по поясу

S

44

76

M

46

80

L

48

84

XL

50

88

Чему равен размер одежды S?

Для новых коллекций

Размер

XXS

S

Обхват груди, см

80

88

Обхват бедер, см

88

96

Обхват талии*, см

60

68

Рост, см

170

170

Какой размер при росте 160?

Таблица соответствия размеров

Размер Россия

Размер EU

Рост, см

44-46

S

165-175

46-48

M

170-180

48-50

L

175-185

50-52

XL

175-185

Как определиться с размером одежды?

Для определения размера одежды нужно измерить:

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

Какой размер ремня на размер S?

Таблица размеров ремней.

Размер одежды (Европа)

XS

S

Размер одежды (Россия)

42-44

44-46

Длина ремня

100 см

105 см

Какой размер при росте 170?

Таблица размеров

Размер

Рост

Обхват груди

42 (2XS)

152-158

84

44 (XS)

164

88

46 (S)

170

92

48 (M)

176

96

Какой размер при росте 164?

Таблица размеров

Размер по ГОСТ

Российский размер

Рост(1)

164-92-100

46

164

164-96-104

48

164

164-100-108

50

164

164-104-112

52

164

Что больше S или SX?

Как соотносятся русские и международные размеры? Размер XS соответствует размеру 40, S — 42 и так далее. Размеры одежды l для женщин это 50-й российский рахмер, а xxl размер одежды женской — 56.

Кто носит размер м?

Женщины предпочитают S, мужчины — L

На втором месте — М: его носит каждая четвертая девушка, желающая обновить гардероб. Доли L и XS составляют 14 проц и 10 проц соответственно, а наименее востребованы вещи размеров XL и XXL.

Как узнать свой размер женский?

В России основным обобщающим размером считается полуобхват груди, выраженный в сантиметрах. Т. е., если обхват груди у женщины составляет 88 см, то размер её одежды — 44-й. Кроме того, к обобщающим размерам относятся рост, обхваты груди, талии и бёдер.

Какой размер Рост вес?

Таблица размеров: соотношение роста и веса

Вес (кг)

Рост (см)

150-158

168-178

41-50

XS

50-62

XS

M

62-73

M

Какой размер на 14 лет?

Таблица размеров одежды

Возраст ребенка

Рост в см.

Размер одежды

10 лет

140 — 146

36

11 лет

146 — 152

38

12 лет

152 — 158

40

14 — 15 лет

158 — 164

42

Как понять какой размер нужен?

Для определения размера одежды, относящейся к поясной группе (юбки, брюки) необходимо измерить обхват бедер для женщин, а для мужчин — обхват талии. Для определения размера одежды, относящейся к плечевой группе (блузки, жилеты и т. д.) и для мужчин и для женщин необходимо измерить обхват груди.

Какой это размер 38?

Теперь сопоставив градацию, ясно понимаем, что европейский размер одежды 38 равен нашему 46-48 при крое классическом, 44-46 — для худощавых мужчин. Это ходовой размер рубашек на среднестатистического человека.

Какой размер у штанов S?

S (российский 46-48 размер): обхват талии — 46-48 см, длина ног — 101,5 см; 3.

Какой это размер 36?

Если говорить о тридцать шестом женском платье, то будет применима такого рода расшифровка: европейский размер одежды 36 на русский — это наш 42, а международный — XS. Итальянский тридцать шестой — это 38 русский или XXS. Если же речь идет о брючных товарах, то данный параметр (36) будет равен российскому 54-56.

Что за размер SM?

Таблицы размеров на разные категории одежды и обуви

W28

W29

S

S-M

Размер

44

44-46

Рост

170

170

Обхват талии

76

78

Какой самый маленький размер одежды для девушек?

Самый маленький размер — XS, расшифровывается, как «extrasmall» (супер маленький — английский). буква Х указывает на максимум. Несмотря на то, самый маленький размер может быть один, по российской размерной шкале под этот маркер подходят мужские размеры 40-42 и женские 38-40.

Какой это размер M?

Fitted Fit / Regular

Обозначение

XS

M

Российский размер

44

48

Обхват шеи

35/36

39/40

Обхват груди

96

108

Обхват талии

88

100

Какой размер одежды на рост 155?

Таблица размеров для женской одежды

Роста женской одежды

Рост типовой фигуры

Интервал роста человека

146-152

От 143 до 155 см включительно

158-164

Свыше 155 до 167 см включительно

170-176

Свыше 167 до 179 см включительно

182-188

Свыше 179 до 191 см включительно

Как узнать свой размер в буквах?

Буквенное обозначение размеров:

  • XS (eXtra small) — очень маленький, русский 40 женщины, 44 — мужчины;
  • S (small) — маленький, русский 42 женщины, 46 мужчины;
  • M (medium) — средний, русский 44/48;
  • L (large) — большой, русский 46/50;
  • XL (eXtra Large) — очень большой, русский 48/52;

Какой размер одежды должен быть в 15 лет?

Мальчики 3 — 17 лет

Размер, Россия

Возраст, лет

Рост, см

40/42

14

158

40/42

15

164

42

16

170

42

17

176

Как понять размер S или M?

S (Small) — маленький M (Medium) — средний L (Large) — большой

Какой размер S или L?

Буквенный международный размер S обозначает русскую размерность 44, M — это 46, L — 48.

Какой размер 42 в буквах?

42 размер одежды — это какой российский

Объем груди (см)

русский

международный

82-85

42

S

86-89

44

S\M

90-93

46

M

94-97

48

L

Какие параметры 42 размера?

Здесь изделия с цифрой 42 соответствуют 48 российскому размеру и следующим параметрам фигуры:

  • грудь — 96 см;
  • талия — 78 см;
  • бедра — 104 см.

«Что такое настройка?» || Справочник штата Орегон по литературным терминам

Что такое настройка?
Стенограмма (английские и испанские субтитры доступны в Видео . Нажмите ЗДЕСЬ для испанской стенограммы )

Рэймонд Малевиц, адъюнкт-профессор американской литературы Университета штата Орегон

Когда мы читаем рассказ или смотрим фильм, мы обычно сосредотачиваем свое внимание на персонажах и сюжете. Но мы также должны обратить внимание на третий важный элемент повествования: сеттинг. Сеттинг — это время и место, в котором рассказывается история.

У всех историй есть настройки, даже у этой. Сеттинг этого видео представляет собой странную пустую пустоту, и вы можете не подумать, что это влияет на то, как вы понимаете содержание этого видео. Но вы, вероятно, согласитесь, что интерпретировали бы урок по-другому, если бы настройка была, скажем, такой:

. Как следует из этой разницы, сеттинг — это гораздо больше, чем просто фон для человеческого действия. Точно так же, как нас формируют город, регион и страна, которые нас окружают, персонажи художественной литературы формируются в зависимости от их собственных географических обстоятельств. И так же, как нас формирует странный 21 st век, в котором мы живем, персонажи художественной литературы формируются своими собственными странными историческими моментами, которые влияют на то, что они думают, как говорят и как действуют. Таким образом, обращение внимания на сеттинг — что это такое и как оно описано — может приблизить нас к центральным темам , идеям и конфликтам историй, которые мы любим.

Позвольте мне привести вам один пример. Действие рассказа Сары Орн Джуэтт 1886 года «Белая цапля» происходит в сельской местности штата Мэн, и описание этого места помогает нам прояснить центральный конфликт. Примерно в середине истории, главный герой , Сильвия, взбирается на высокое дерево в поисках гнезда цапли. Вот как Джуэтт описывает этот момент:

. «В полумиле от дома, на дальней опушке леса, там, где земля была выше, стояла большая сосна, последняя в своем поколении. Был ли он оставлен для пограничного знака или по какой причине, никто не мог сказать; дровосеков, срубивших его товарищей, уже давно нет в живых, и снова вырос целый лес крепких деревьев, сосен, дубов и кленов. Но величавая голова этой старой сосны возвышалась над ними и служила ориентиром для моря и берега на многие мили. Сильвия хорошо это знала.

Теперь это удобно расположенное дерево, очевидно, служит развитию сюжета истории. Ранее по сюжету Сильвия встретила охотника из большого города, который приехал в этот регион, чтобы подстрелить цаплю для своей коллекции чучел, и предложил девушке крупную сумму денег, чтобы она помогла ему найти ее. Забравшись на дерево, Сильвия замечает спрятанное гнездо цапли, что продвигает сюжет к кульминационному вопросу — откроет ли она местонахождение птицы охотнику или нет.

Но описание дерева также РАСШИРЯЕТ эту индивидуальную историю молодой девушки и охотника в историю более общего характера.0003 тема напряженности между сельскими и городскими районами в Соединенных Штатах. Назвав старовозрастную сосну «последней в своем поколении», Джуэтт изображает сельскую местность штата Мэн как место добычи ресурсов — в данном случае добычи древесины. Другие старовозрастные деревья в этом районе были давно срублены — по-видимому, для поддержки развития восточных городов, подобных тому, который охотник называет своим домом. И этот дефицит распространяется на сокращающуюся популяцию белой цапли в этом районе. Перья цапли в конце девятнадцатого века использовались в шляпах для модных дам большого города, и в результате охота на птицу была почти полностью истреблена.

Таким образом, то, что кажется простым мимолетным описанием старовозрастного дерева, на самом деле играет центральную роль в понимании значения решения, которое Сильвия должна принять позже в истории, связывая индивидуальную историю девушки и охотника с более широкой историей. История этого региона США.

Настройки не только помогают прояснить темы данной истории. Они также могут помочь нам понять мировоззрение персонажа через то, как он думает об окружающем мире. Как показывают мысли Сильвии о дереве, она рассматривает свою сельскую местность как место чудесных тайн, величия и достоинства. Эта перспектива резко контрастирует с мыслями охотника в той же обстановке, которые Джуэт раскрывает с помощью техники, называемой «9». 0003 свободный косвенный дискурс »в более раннем отрывке. Когда охотник садится ужинать в доме бабушки Сильвии, он думает:

«Было неожиданно найти такое чистое и уютное маленькое жилище в дикой местности Новой Англии. Молодой человек познал ужасы самого примитивного домашнего хозяйства и тоскливое убожество того слоя общества, который не восстает против общения с курами. Это была лучшая бережливость старинной усадьбы, хотя и в таком маленьком размере, что она казалась отшельнической. Он жадно слушал причудливую речь старухи, смотрел на бледное лицо Сильвии и сияющие серые глаза со все возрастающим энтузиазмом и уверял, что это был лучший ужин, который он ел за месяц…»

В то время как охотник кажется вежливым, его мысли обнаруживают довольно снисходительное отношение к тому, что он называет «примитивным» и «унылым убожеством» обстановки Новой Англии. Поскольку мы связываем этот регион с нашим главным героем Сильвией, когда охотник пренебрежительно отзывается об этом районе, нам предлагается рассматривать его поиски птицы в более негативном свете, связывая жизнь птицы с жизнью Сильвии в ее окружении.

Как предлагает «Белая цапля», учащиеся должны делать больше, чем просто отмечать место и время, когда они используют термин «обстановка» в своих эссе. Вместо этого они должны учитывать множество способов, которыми место и время формируют наше понимание персонажей, сюжета и тем истории.

Хотите больше видеоуроков? Посмотреть всю серию:

Справочник штата Орегон по английским литературным терминам

Определение и значение настроек — Merriam-Webster

установка ˈse-tiŋ

1

: способ, положение или направление установки чего-либо

также : тип крепления

3

а

: время, место и обстоятельства, при которых что-то происходит или развивается

б

: время и место действия литературного, драматического или кинематографического произведения

с

: декорации, используемые в театральных или кинопостановках

4

: музыка, написанная для текста (например, стихотворения) за столом

две упаковки из стерлингового серебра

6

: партия яиц для инкубации

Синонимы

  • окружающая среда
  • атмосфера
  • климат
  • климат
  • контекст
  • контекст
  • окружающая среда
  • окрестности
  • средний
  • среда
  • мизансцена
  • объемный
  • окрестности
  • Terrain

Просмотреть все синонимы и антонимы в тезаурусе

Примеры предложений

Это был бы прекрасный сеттинг на пикник. Он склонен быть застенчивым в социальных сетях . ужин в непринужденной обстановке В фильме действие пьесы меняется с конца 18 века на 2000 год. Она использует современный Лос-Анджелес как номер 9.0159 установка для ее книги. Экономьте деньги, увеличив температуру настроек летом и понизив ее зимой. Она только что научилась менять настройки на своей камере. Узнать больше

Недавние примеры в Интернете Лили Коллинз и Чарли Макдауэлл обручились Коллинз и Макдауэлл объявили о своей помолвке 25 сентября 2020 года перед потрясающей обстановкой в Нью-Мексико . — Скайлер Карузо, Peoplemag , 10 марта 2023 г. Независимо от сеттинг , Уайт намекнул на тему третьего сезона. — Брендан Морроу, Неделя , 7 марта 2023 г. Выбор наиболее агрессивной функции Track приводит к тому, что активная подвеска снижает высоту дорожного просвета, а также появляется возможность настройки регулируемой системы контроля тяги . — Майк Дафф, Автомобиль и водитель , 6 марта 2023 г. Другие сообщества готовятся к тем же врачам, которым уже разрешено назначать метадон в традиционной первичной медико-санитарной помощи настройка — но только когда он используется для лечения боли, а не для лечения расстройства, связанного с употреблением опиоидов. — Лев Фачер, STAT , 24 февраля 2023 г. Торжественность обстановки , не говоря уже о самих показаниях, придает разбирательству определенную достоверность. — Los Angeles Times , 13 февраля 2023 г. Оба мужчины согласились не искать работу в сфере здравоохранения настройка . — Бет Хундсдорфер, ProPublica , 10 февраля 2023 г. Само жилище также использует настройку , получая часть энергии от солнечной энергосистемы. — Эбби Монтанез, , отчет Робба , 9 февраля 2023 г. В этих контекстах культуры , сеттинга , подразумевается, что акта совершения достаточно, чтобы подтвердить потребности людей — но как насчет завершения? — Линда Чаверс, 9 лет.0159 BostonGlobe.com , 7 февраля 2023 г. Узнать больше

Эти примеры предложений автоматически выбираются из различных онлайн-источников новостей, чтобы отразить текущее использование слова «настройка». Мнения, выраженные в примерах, не отражают точку зрения Merriam-Webster или ее редакторов. Отправьте нам отзыв.

История слов

Первое известное использование

14 век, в значении, определенном в смысле 1

Путешественник во времени

Первое известное использование настройки было в 14 веке

Посмотреть другие слова из того же века перевернуть весь мир

параметр

блок настройки

Посмотреть другие записи поблизости

Процитировать эту запись «Параметр.»

Словарь Merriam-Webster.com , Merriam-Webster, https://www. merriam-webster.com/dictionary/setting. По состоянию на 16 марта 2023 г.

Копировать ссылку

Детское определение

Настройка

существительное

установка

ˈset-iŋ

1

: способ, положение или направление, в котором что-то установлено

замена термостата настройка

2

: рама или держатель, в котором что-то монтируется

a закрепка для бриллианта

3

: предыстория (время и место) действия рассказа или спектакля

4

: предметы посуды, необходимые для сервировки стола

два набора из серебра

5

: партия яиц для инкубации

Настройка 0159

для говорящих на испанском языке

Britannica English: Перевод настройки для говорящих на арабском языке

Britannica.

Какие параметры: Какие параметры атмосферы характеризуют погоду?

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Пролистать наверх