powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Принципиальный вопрос о многопоточности, кешах ЦП, конвеерах.
25 сообщений из 28, страница 1 из 2
Принципиальный вопрос о многопоточности, кешах ЦП, конвеерах.
    #37648020
Системы завоза тонн плова
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Что конкретно имеют ввиду под высокими накладными расходами при переключении потоков? Мне кажется, 250 раз в секунду перезаписывать содержимое всех регистров - это фигня полная при современных частотах в район 2-3 Ггц. Вероятно имеется ввиду удар по кешам? Только кеши "привыкли" к текущему потоку, как надо всё забывать и переориентироваться на другой. Это главный враг?

2. Правильно я понимаю, что при наличии 4 физических ядер и 4 (или менее) активных потоках (остальные спят - редко получают управление) современный планировщик linux/windows/другое постарается оставить каждый тред на своём ядре?

3. Верно ли, что установленные 250 Гц в конфиге ядра - это можно понимать как "как минимум 250 шансов переключения контекста в секунду"? Шансов - ибо если пришло очередное прерывание таймера и пора переключаться, шедулер не будет переключать контекст если в этот момент все остальные процессы/потоки спят (ждут i/o, таймеров...). То есть один что-то активно вычисляющий поток будет получать подряд много квантов?

4. Я тут выше за кеши переживал... Но ведь когда много раз в секунду шедулер получает управление из обработчика прерывания таймера, это ведь тоже переключение контекста (из текущей задачи в код обработчика таймера). Это ведь наверное тоже бьёт кешам по мозгам или как?

Все эти вопросы связаны вот с чем.

У меня есть 50 очередей из 100млн заданий и 4 ядра. Я могу запустить 50 потоков на каждую очередь, либо запустить 4 потока и давать им пачки заданий. Второй случай выглядит (интуитивно) лучше - меньше переключений между тяжёлыми потоками, каждый работает на своём ядре, кеш и конвееры не сбиваются. При 50 потоках, будет больше смен контекста в смысле смен состояний кеша и конвееров и прочих подобных вещей (извините, слабо понимаю все тонкости пока).
...
Рейтинг: 0 / 0
Принципиальный вопрос о многопоточности, кешах ЦП, конвеерах.
    #37648027
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Системы завоза тонн плова2. Правильно я понимаю, что при наличии 4 физических ядер и 4 (или менее) активных потоках (остальные спят - редко получают управление) современный планировщик linux/windows/другое постарается оставить каждый тред на своём ядре?
моя винда так не делает. один и тот же поток, равномерно размазывает по ядрам.
...
Рейтинг: 0 / 0
Принципиальный вопрос о многопоточности, кешах ЦП, конвеерах.
    #37648028
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Системы завоза тонн плова1.
о еще вспомнил.
если говорить про кши и поцессы(не потоки а именно процессы), то при переключении процесса - происходит подгрузка рабочего набора виртуальных страниц - в оперативку.
что может очень бить по производительности.
...
Рейтинг: 0 / 0
Принципиальный вопрос о многопоточности, кешах ЦП, конвеерах.
    #37648029
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Системы завоза тонн пловаУ меня есть 50 очередей из 100млн заданий и 4 ядра. Я могу запустить 50 потоков на каждую очередь, либо запустить 4 потока и давать им пачки заданий. Второй случай выглядит (интуитивно) лучше - меньше переключений между тяжёлыми потоками, каждый работает на своём ядре, кеш и конвееры не сбиваются. При 50 потоках, будет больше смен контекста в смысле смен состояний кеша и конвееров и прочих подобных вещей (извините, слабо понимаю все тонкости пока).

а теперь мы подошли к самому глановму - проблема 50 потоков - не только в переключении контектста, но и ресурсах.

50 - еще не сильно много, вот если запустить 1000-чи потоков, то тачка сдохнет.

решения два - пулл потокв либо зеленые потоки
...
Рейтинг: 0 / 0
Принципиальный вопрос о многопоточности, кешах ЦП, конвеерах.
    #37648071
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
[не одобрен]
Системы завоза тонн плова2. Правильно я понимаю, что при наличии 4 физических ядер и 4 (или менее) активных потоках (остальные спят - редко получают управление) современный планировщик linux/windows/другое постарается оставить каждый тред на своём ядре? к сожалению, нет.
но существует возможность явно указать ярдо (ядра) при наличии соответствующих прав у пользователя.
...
Рейтинг: 0 / 0
Принципиальный вопрос о многопоточности, кешах ЦП, конвеерах.
    #37648495
Системы завоза тонн плова
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaNСистемы завоза тонн плова1.
о еще вспомнил.
если говорить про кши и поцессы(не потоки а именно процессы), то при переключении процесса - происходит подгрузка рабочего набора виртуальных страниц - в оперативку.
что может очень бить по производительности.
Давайте думать для простоты, что свопа нет, а то мы дойдём до javascript-сервисов и их задержек )
...
Рейтинг: 0 / 0
Принципиальный вопрос о многопоточности, кешах ЦП, конвеерах.
    #37648501
Системы завоза тонн плова
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaNСистемы завоза тонн плова2. Правильно я понимаю, что при наличии 4 физических ядер и 4 (или менее) активных потоках (остальные спят - редко получают управление) современный планировщик linux/windows/другое постарается оставить каждый тред на своём ядре?
моя винда так не делает. один и тот же поток, равномерно размазывает по ядрам.

eNoseСистемы завоза тонн плова2. Правильно я понимаю, что при наличии 4 физических ядер и 4 (или менее) активных потоках (остальные спят - редко получают управление) современный планировщик linux/windows/другое постарается оставить каждый тред на своём ядре? к сожалению, нет.
но существует возможность явно указать ярдо (ядра) при наличии соответствующих прав у пользователя.

Да, в винде сам наблюдаю размазывание. На linux.org.ru мне ответили, что современный линуксовый шедулер CFS "при не пределльной загрузке оставляет процессы/потоки на своих ядрах". Пытаюсь выяснить о чём речь. Ну там вообще хитро, куча разновидностей шедулеров...
...
Рейтинг: 0 / 0
Принципиальный вопрос о многопоточности, кешах ЦП, конвеерах.
    #37648513
Системы завоза тонн плова
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaNСистемы завоза тонн пловаУ меня есть 50 очередей из 100млн заданий и 4 ядра. Я могу запустить 50 потоков на каждую очередь, либо запустить 4 потока и давать им пачки заданий. Второй случай выглядит (интуитивно) лучше - меньше переключений между тяжёлыми потоками, каждый работает на своём ядре, кеш и конвееры не сбиваются. При 50 потоках, будет больше смен контекста в смысле смен состояний кеша и конвееров и прочих подобных вещей (извините, слабо понимаю все тонкости пока).

а теперь мы подошли к самому глановму - проблема 50 потоков - не только в переключении контектста, но и ресурсах.

50 - еще не сильно много, вот если запустить 1000-чи потоков, то тачка сдохнет.

решения два - пулл потокв либо зеленые потоки
Да, растёт потребление памяти на служебную информацию, но вопрос о тысячах потоков не стоит, - 50 максимум и затраты намяти на это - фигня, относительно имеющихся 32 гигов в сервере.

Самое интересное в том, как само переключение контекста на 4-ядерной машине различается для 4 и для 50 потоков. В чём разница. Ведь если я поставил в настройках ядра linux частоту таймера = 250 Гц, то чаще потоки переключаться не будут, т.е. и 4 потока и 50 - будут переключаться с одинаковой частотой.

Одна надежда - что при кол-ве потоков = кол-ву ядер, шедулер будет оставлять все потоки на своих ядрах, что, как выяснено выше, не гарантируется.

Тогда какая разница между 4 и 50 тяжёлыми потоками, при отсутствии свопа и огромной RAM и 4-х ядрах?
...
Рейтинг: 0 / 0
Принципиальный вопрос о многопоточности, кешах ЦП, конвеерах.
    #37648785
Фотография OoCc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Системы завоза тонн пловаZyK_BotaNпропущено...


а теперь мы подошли к самому глановму - проблема 50 потоков - не только в переключении контектста, но и ресурсах.

50 - еще не сильно много, вот если запустить 1000-чи потоков, то тачка сдохнет.

решения два - пулл потокв либо зеленые потоки
Да, растёт потребление памяти на служебную информацию, но вопрос о тысячах потоков не стоит, - 50 максимум и затраты намяти на это - фигня, относительно имеющихся 32 гигов в сервере.

Самое интересное в том, как само переключение контекста на 4-ядерной машине различается для 4 и для 50 потоков. В чём разница. Ведь если я поставил в настройках ядра linux частоту таймера = 250 Гц, то чаще потоки переключаться не будут, т.е. и 4 потока и 50 - будут переключаться с одинаковой частотой.

Одна надежда - что при кол-ве потоков = кол-ву ядер, шедулер будет оставлять все потоки на своих ядрах, что, как выяснено выше, не гарантируется.

Тогда какая разница между 4 и 50 тяжёлыми потоками, при отсутствии свопа и огромной RAM и 4-х ядрах?
1. кол-ве потоков = кол-ву ядер работает только в случае если твои потоки ничего не ждут, иначе и 50 может быть мало.
2. при наличии кэша третьего уровня 4 или 50 потоков разницы практически нет и привязка к ядрам уже не актуальна.
...
Рейтинг: 0 / 0
Принципиальный вопрос о многопоточности, кешах ЦП, конвеерах.
    #37649010
Системы завоза тонн плова
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OoCcСистемы завоза тонн пловапропущено...

Да, растёт потребление памяти на служебную информацию, но вопрос о тысячах потоков не стоит, - 50 максимум и затраты намяти на это - фигня, относительно имеющихся 32 гигов в сервере.

Самое интересное в том, как само переключение контекста на 4-ядерной машине различается для 4 и для 50 потоков. В чём разница. Ведь если я поставил в настройках ядра linux частоту таймера = 250 Гц, то чаще потоки переключаться не будут, т.е. и 4 потока и 50 - будут переключаться с одинаковой частотой.

Одна надежда - что при кол-ве потоков = кол-ву ядер, шедулер будет оставлять все потоки на своих ядрах, что, как выяснено выше, не гарантируется.

Тогда какая разница между 4 и 50 тяжёлыми потоками, при отсутствии свопа и огромной RAM и 4-х ядрах?
1. кол-ве потоков = кол-ву ядер работает только в случае если твои потоки ничего не ждут, иначе и 50 может быть мало.
2. при наличии кэша третьего уровня 4 или 50 потоков разницы практически нет и привязка к ядрам уже не актуальна.
1. Да, мои потоки ничего не ждут, я об этом по-моему постоянно пишу. Никакого ввода-вывода, блокирования, сна...
2. Получается 4 и 50 тяжёлых потоков - один хрен? Но как же так? Ведь если каждый выполняется на своём ядре долгое время, то кеши L1, L2, конвееры (и что там ещё) будут меньше сбиваться?
...
Рейтинг: 0 / 0
Принципиальный вопрос о многопоточности, кешах ЦП, конвеерах.
    #37649314
Системы завоза тонн пловаУ меня есть 50 очередей из 100млн заданий и 4 ядра. Я могу запустить 50 потоков на каждую очередь, либо запустить 4 потока и давать им пачки заданий

Это реальная задача или вымышленная? Что мешает взять и поставить тест?

Системы завоза тонн плова1. Да, мои потоки ничего не ждут, я об этом по-моему постоянно пишу. Никакого ввода-вывода, блокирования, сна...
Так что мешает поставить тест? Ну кроме отсуствия этих самых 100млн заданий и реальзой (хоть кому-то нужной) задачи, как таковой?
...
Рейтинг: 0 / 0
Принципиальный вопрос о многопоточности, кешах ЦП, конвеерах.
    #37650616
Фотография OoCc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Системы завоза тонн пловапропущено...

1. Да, мои потоки ничего не ждут, я об этом по-моему постоянно пишу. Никакого ввода-вывода, блокирования, сна...
2. Получается 4 и 50 тяжёлых потоков - один хрен? Но как же так? Ведь если каждый выполняется на своём ядре долгое время, то
кеши L1, L2, конвееры (и что там ещё) будут меньше сбиваться?
1. Тогда зачем тебе 50 тредов?
...
Рейтинг: 0 / 0
Принципиальный вопрос о многопоточности, кешах ЦП, конвеерах.
    #37650834
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaN...вот если запустить 1000-чи потоков, то тачка сдохнет...

ерунду несёте. насколько мне не изменяет память(из практики, когда то проводился тест) отжирает (сам поток) ресурсы в момент запуска. сколько тысяч вы будете запускать в рамках своего процесса - определяет лишь размерность хэндлера форточек. времена когда их было всего 65 тысяч - давно прошли.

или другое имелось ввиду?
(круглый)
...
Рейтинг: 0 / 0
Принципиальный вопрос о многопоточности, кешах ЦП, конвеерах.
    #37650879
Фотография OoCc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolobok0ZyK_BotaN...вот если запустить 1000-чи потоков, то тачка сдохнет...

ерунду несёте. насколько мне не изменяет память(из практики, когда то проводился тест) отжирает (сам поток) ресурсы в момент запуска. сколько тысяч вы будете запускать в рамках своего процесса - определяет лишь размерность хэндлера форточек. времена когда их было всего 65 тысяч - давно прошли.

или другое имелось ввиду?
(круглый)
По видимому другое. То от чего этот хэндлер. И ресурсы ядра которое все это разгребает.
...
Рейтинг: 0 / 0
Принципиальный вопрос о многопоточности, кешах ЦП, конвеерах.
    #37650880
Системы завоза тонн плова
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OoCcСистемы завоза тонн пловапропущено...

1. Да, мои потоки ничего не ждут, я об этом по-моему постоянно пишу. Никакого ввода-вывода, блокирования, сна...
2. Получается 4 и 50 тяжёлых потоков - один хрен? Но как же так? Ведь если каждый выполняется на своём ядре долгое время, то
кеши L1, L2, конвееры (и что там ещё) будут меньше сбиваться?
1. Тогда зачем тебе 50 тредов?
Проще код.
...
Рейтинг: 0 / 0
Принципиальный вопрос о многопоточности, кешах ЦП, конвеерах.
    #37650896
Фотография OoCc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Системы завоза тонн пловаOoCcпропущено...

1. Тогда зачем тебе 50 тредов?
Проще код.
Вот так всегда. Эти программеры вместо того чтобы делать как надо - делают как им удобнее и проще. :)
...
Рейтинг: 0 / 0
Принципиальный вопрос о многопоточности, кешах ЦП, конвеерах.
    #37650898
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Системы завоза тонн пловаOoCcпропущено...

1. Тогда зачем тебе 50 тредов?
Проще код.
если тебе так проще писать - то юзай эрланг, там хоть процессы легковесные
...
Рейтинг: 0 / 0
Принципиальный вопрос о многопоточности, кешах ЦП, конвеерах.
    #37650899
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OoCc делают как им удобнее и проще. :)
если при этом не возникает проблем - то так и нужно.
но не думаю, что 50 потоков - это не проблема.
...
Рейтинг: 0 / 0
Принципиальный вопрос о многопоточности, кешах ЦП, конвеерах.
    #37650954
Фотография schwa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
50 потоков перед которыми стоит очередь из 100 миллионов сферических задач в вакууме .
Системы завоза тонн пловаOoCcпропущено...

1. Тогда зачем тебе 50 тредов?
Проще код.
Доктор Клифф Клик, перелогиньтесь.
...
Рейтинг: 0 / 0
Принципиальный вопрос о многопоточности, кешах ЦП, конвеерах.
    #37650990
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Системы завоза тонн пловаВедь если я поставил в настройках ядра linux частоту таймера = 250 Гц, то чаще потоки переключаться не будут,
не только прерывания от таймера, но и от периферии, а так же системные вызовы могут вызвать переключение потоков
...
Рейтинг: 0 / 0
Принципиальный вопрос о многопоточности, кешах ЦП, конвеерах.
    #37650991
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OoCcЭти программеры вместо того чтобы делать как надо - делают как им удобнее и проще. :)
удобнее и проще - это и есть как надо
...
Рейтинг: 0 / 0
Принципиальный вопрос о многопоточности, кешах ЦП, конвеерах.
    #37650999
Системы завоза тонн плова
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Небольшой вопрос тем, кто серьёзно изучает современные процы и планировщики ОС.

Вот процессор с 1 ядром выполняет какой-то тяжёлый поток, который 100% времени ядра что-то считает. Как на этом потоке сказывается происходящее 1000 раз в секунду прерывание системного таймера с передачей управления на обработчик этого прерывания? Происходит ли какой-то неприятный сбой каких-то кешей и конвееров, потеря каких-нибудь предсказаний ветвлений, от которых потом ещё много тактов ощущаются последствия? Промахи всякие и т.п.

Вопрос вот к чему.

Представьте 4-х ядерный проц. На всех 4-х ядрах выполняются тяжёлые потоки, которые никогда не спят, считают. 250 раз в секунду возникает прерывание системного таймера, какие-то другие события редкие происходят. И все они выполняются, допустим, на каком-то ядре. Системный таймер - тот вообще наверное только на ядре номер 0 выполняется, как и все прочие аппаратные.

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

Теперь представьте, что запустили ещё 4 таких же тяжёлых потока с таким же приоритетом. На том самом ядре номер 2 начнётся ситуация разделения времени между двумя потоками поровну.

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

Подозреваю, что в первом случае быстрее. Но НА СКОЛЬКО будет замедление во втором случае? На время выполнения кода сохранения-восстановления содержимого регистров, многократно исполняющегося за время работы потоков? А скажутся ли какие-то сбивания конвееров и кешей и как именно, если да?

Ух...
...
Рейтинг: 0 / 0
Принципиальный вопрос о многопоточности, кешах ЦП, конвеерах.
    #37651025
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Системы завоза тонн пловаВот процессор с 1 ядром выполняет какой-то тяжёлый поток, который 100% времени ядра что-то считает. Как на этом потоке сказывается происходящее 1000 раз в секунду прерывание системного таймера с передачей управления на обработчик этого прерывания? Происходит ли какой-то неприятный сбой каких-то кешей и конвееров, потеря каких-нибудь предсказаний ветвлений, от которых потом ещё много тактов ощущаются последствия? Промахи всякие и т.п.Может быть, может не быть. Зависит от процессора и ОС.

Системы завоза тонн пловаПодозреваю, что в первом случае быстрее. Но НА СКОЛЬКО будет замедление во втором случае? На время выполнения кода сохранения-восстановления содержимого регистров, многократно исполняющегося за время работы потоков? А скажутся ли какие-то сбивания конвееров и кешей и как именно, если да?Да. Переключение между процессами даст некоторую задержку. Какую именно - зависит от ОС и процессора на который эта ОС рассчитана.
Если хочешь посчитать конкретно, то вот например идешь на http://www.kernel.org/pub/linux/kernel/
Выкачиваешь исходник кернела, находишь в нем \arch\x86\kernel\signal.c и смотришь как реализованы сигналы (и переключение контекстов) для x86-го процессора. Аналогичный путь и до других архитектур.
А чтобы точно предсказать на сколько будет замедление - придется посчитать сколько времени выполняется каждое случившееся прерывание, и каждый системный вызов. Кернел конечно выполняется в своем отдельном потоке и по идее не должен так уж замедлять пользовательское приложение (которое в нашей задаче вообще запущенно на другом процессоре), но приложение ждет пока кернел выполнит запрошенное, плюс оверхед на синхронизацию процессоров.
...
Рейтинг: 0 / 0
Принципиальный вопрос о многопоточности, кешах ЦП, конвеерах.
    #37651036
Системы завоза тонн плова
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlДа. Переключение между процессами даст некоторую задержку. Какую именно - зависит от ОС и процессора на который эта ОС рассчитана.
Мне кажется я пытаюсь задавать вопрос независимо от ОС, имея ввиду современные процы intel. Вопрос-то основной не в том, сколько времени конкретная ОС переключает задачи, а как это ощущает проц со всеми своими кешами, конвеерами, предсказаниями и т.п.
...
Рейтинг: 0 / 0
Принципиальный вопрос о многопоточности, кешах ЦП, конвеерах.
    #37651044
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Системы завоза тонн пловаWhite OwlДа. Переключение между процессами даст некоторую задержку. Какую именно - зависит от ОС и процессора на который эта ОС рассчитана.
Мне кажется я пытаюсь задавать вопрос независимо от ОС, имея ввиду современные процы intel.Задать вопрос - независимо от CPU/OS можно, а вот дать ответ независимо от них - невозможно.

Системы завоза тонн пловаВопрос-то основной не в том, сколько времени конкретная ОС переключает задачи, а как это ощущает проц со всеми своими кешами, конвеерами, предсказаниями и т.п.Какой из Intel'овских процессоров тебя интересует? Основная разница между всеми моделями интеловских CPU как раз в этих самых кешах и их поведении и заключается.
...
Рейтинг: 0 / 0
25 сообщений из 28, страница 1 из 2
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Принципиальный вопрос о многопоточности, кешах ЦП, конвеерах.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]