|
|
|
Принципиальный вопрос о многопоточности, кешах ЦП, конвеерах.
|
|||
|---|---|---|---|
|
#18+
1. Что конкретно имеют ввиду под высокими накладными расходами при переключении потоков? Мне кажется, 250 раз в секунду перезаписывать содержимое всех регистров - это фигня полная при современных частотах в район 2-3 Ггц. Вероятно имеется ввиду удар по кешам? Только кеши "привыкли" к текущему потоку, как надо всё забывать и переориентироваться на другой. Это главный враг? 2. Правильно я понимаю, что при наличии 4 физических ядер и 4 (или менее) активных потоках (остальные спят - редко получают управление) современный планировщик linux/windows/другое постарается оставить каждый тред на своём ядре? 3. Верно ли, что установленные 250 Гц в конфиге ядра - это можно понимать как "как минимум 250 шансов переключения контекста в секунду"? Шансов - ибо если пришло очередное прерывание таймера и пора переключаться, шедулер не будет переключать контекст если в этот момент все остальные процессы/потоки спят (ждут i/o, таймеров...). То есть один что-то активно вычисляющий поток будет получать подряд много квантов? 4. Я тут выше за кеши переживал... Но ведь когда много раз в секунду шедулер получает управление из обработчика прерывания таймера, это ведь тоже переключение контекста (из текущей задачи в код обработчика таймера). Это ведь наверное тоже бьёт кешам по мозгам или как? Все эти вопросы связаны вот с чем. У меня есть 50 очередей из 100млн заданий и 4 ядра. Я могу запустить 50 потоков на каждую очередь, либо запустить 4 потока и давать им пачки заданий. Второй случай выглядит (интуитивно) лучше - меньше переключений между тяжёлыми потоками, каждый работает на своём ядре, кеш и конвееры не сбиваются. При 50 потоках, будет больше смен контекста в смысле смен состояний кеша и конвееров и прочих подобных вещей (извините, слабо понимаю все тонкости пока). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2012, 02:45 |
|
||
|
Принципиальный вопрос о многопоточности, кешах ЦП, конвеерах.
|
|||
|---|---|---|---|
|
#18+
Системы завоза тонн плова2. Правильно я понимаю, что при наличии 4 физических ядер и 4 (или менее) активных потоках (остальные спят - редко получают управление) современный планировщик linux/windows/другое постарается оставить каждый тред на своём ядре? моя винда так не делает. один и тот же поток, равномерно размазывает по ядрам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2012, 03:36 |
|
||
|
Принципиальный вопрос о многопоточности, кешах ЦП, конвеерах.
|
|||
|---|---|---|---|
|
#18+
Системы завоза тонн плова1. о еще вспомнил. если говорить про кши и поцессы(не потоки а именно процессы), то при переключении процесса - происходит подгрузка рабочего набора виртуальных страниц - в оперативку. что может очень бить по производительности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2012, 03:39 |
|
||
|
Принципиальный вопрос о многопоточности, кешах ЦП, конвеерах.
|
|||
|---|---|---|---|
|
#18+
Системы завоза тонн пловаУ меня есть 50 очередей из 100млн заданий и 4 ядра. Я могу запустить 50 потоков на каждую очередь, либо запустить 4 потока и давать им пачки заданий. Второй случай выглядит (интуитивно) лучше - меньше переключений между тяжёлыми потоками, каждый работает на своём ядре, кеш и конвееры не сбиваются. При 50 потоках, будет больше смен контекста в смысле смен состояний кеша и конвееров и прочих подобных вещей (извините, слабо понимаю все тонкости пока). а теперь мы подошли к самому глановму - проблема 50 потоков - не только в переключении контектста, но и ресурсах. 50 - еще не сильно много, вот если запустить 1000-чи потоков, то тачка сдохнет. решения два - пулл потокв либо зеленые потоки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2012, 03:41 |
|
||
|
Принципиальный вопрос о многопоточности, кешах ЦП, конвеерах.
|
|||
|---|---|---|---|
|
#18+
Системы завоза тонн плова2. Правильно я понимаю, что при наличии 4 физических ядер и 4 (или менее) активных потоках (остальные спят - редко получают управление) современный планировщик linux/windows/другое постарается оставить каждый тред на своём ядре? к сожалению, нет. но существует возможность явно указать ярдо (ядра) при наличии соответствующих прав у пользователя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2012, 08:29 |
|
||
|
Принципиальный вопрос о многопоточности, кешах ЦП, конвеерах.
|
|||
|---|---|---|---|
|
#18+
ZyK_BotaNСистемы завоза тонн плова1. о еще вспомнил. если говорить про кши и поцессы(не потоки а именно процессы), то при переключении процесса - происходит подгрузка рабочего набора виртуальных страниц - в оперативку. что может очень бить по производительности. Давайте думать для простоты, что свопа нет, а то мы дойдём до javascript-сервисов и их задержек ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2012, 13:00 |
|
||
|
Принципиальный вопрос о многопоточности, кешах ЦП, конвеерах.
|
|||
|---|---|---|---|
|
#18+
ZyK_BotaNСистемы завоза тонн плова2. Правильно я понимаю, что при наличии 4 физических ядер и 4 (или менее) активных потоках (остальные спят - редко получают управление) современный планировщик linux/windows/другое постарается оставить каждый тред на своём ядре? моя винда так не делает. один и тот же поток, равномерно размазывает по ядрам. eNoseСистемы завоза тонн плова2. Правильно я понимаю, что при наличии 4 физических ядер и 4 (или менее) активных потоках (остальные спят - редко получают управление) современный планировщик linux/windows/другое постарается оставить каждый тред на своём ядре? к сожалению, нет. но существует возможность явно указать ярдо (ядра) при наличии соответствующих прав у пользователя. Да, в винде сам наблюдаю размазывание. На linux.org.ru мне ответили, что современный линуксовый шедулер CFS "при не пределльной загрузке оставляет процессы/потоки на своих ядрах". Пытаюсь выяснить о чём речь. Ну там вообще хитро, куча разновидностей шедулеров... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2012, 13:02 |
|
||
|
Принципиальный вопрос о многопоточности, кешах ЦП, конвеерах.
|
|||
|---|---|---|---|
|
#18+
ZyK_BotaNСистемы завоза тонн пловаУ меня есть 50 очередей из 100млн заданий и 4 ядра. Я могу запустить 50 потоков на каждую очередь, либо запустить 4 потока и давать им пачки заданий. Второй случай выглядит (интуитивно) лучше - меньше переключений между тяжёлыми потоками, каждый работает на своём ядре, кеш и конвееры не сбиваются. При 50 потоках, будет больше смен контекста в смысле смен состояний кеша и конвееров и прочих подобных вещей (извините, слабо понимаю все тонкости пока). а теперь мы подошли к самому глановму - проблема 50 потоков - не только в переключении контектста, но и ресурсах. 50 - еще не сильно много, вот если запустить 1000-чи потоков, то тачка сдохнет. решения два - пулл потокв либо зеленые потоки Да, растёт потребление памяти на служебную информацию, но вопрос о тысячах потоков не стоит, - 50 максимум и затраты намяти на это - фигня, относительно имеющихся 32 гигов в сервере. Самое интересное в том, как само переключение контекста на 4-ядерной машине различается для 4 и для 50 потоков. В чём разница. Ведь если я поставил в настройках ядра linux частоту таймера = 250 Гц, то чаще потоки переключаться не будут, т.е. и 4 потока и 50 - будут переключаться с одинаковой частотой. Одна надежда - что при кол-ве потоков = кол-ву ядер, шедулер будет оставлять все потоки на своих ядрах, что, как выяснено выше, не гарантируется. Тогда какая разница между 4 и 50 тяжёлыми потоками, при отсутствии свопа и огромной RAM и 4-х ядрах? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2012, 13:07 |
|
||
|
Принципиальный вопрос о многопоточности, кешах ЦП, конвеерах.
|
|||
|---|---|---|---|
|
#18+
Системы завоза тонн пловаZyK_BotaNпропущено... а теперь мы подошли к самому глановму - проблема 50 потоков - не только в переключении контектста, но и ресурсах. 50 - еще не сильно много, вот если запустить 1000-чи потоков, то тачка сдохнет. решения два - пулл потокв либо зеленые потоки Да, растёт потребление памяти на служебную информацию, но вопрос о тысячах потоков не стоит, - 50 максимум и затраты намяти на это - фигня, относительно имеющихся 32 гигов в сервере. Самое интересное в том, как само переключение контекста на 4-ядерной машине различается для 4 и для 50 потоков. В чём разница. Ведь если я поставил в настройках ядра linux частоту таймера = 250 Гц, то чаще потоки переключаться не будут, т.е. и 4 потока и 50 - будут переключаться с одинаковой частотой. Одна надежда - что при кол-ве потоков = кол-ву ядер, шедулер будет оставлять все потоки на своих ядрах, что, как выяснено выше, не гарантируется. Тогда какая разница между 4 и 50 тяжёлыми потоками, при отсутствии свопа и огромной RAM и 4-х ядрах? 1. кол-ве потоков = кол-ву ядер работает только в случае если твои потоки ничего не ждут, иначе и 50 может быть мало. 2. при наличии кэша третьего уровня 4 или 50 потоков разницы практически нет и привязка к ядрам уже не актуальна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2012, 15:38 |
|
||
|
Принципиальный вопрос о многопоточности, кешах ЦП, конвеерах.
|
|||
|---|---|---|---|
|
#18+
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, конвееры (и что там ещё) будут меньше сбиваться? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2012, 17:15 |
|
||
|
Принципиальный вопрос о многопоточности, кешах ЦП, конвеерах.
|
|||
|---|---|---|---|
|
#18+
Системы завоза тонн пловаУ меня есть 50 очередей из 100млн заданий и 4 ядра. Я могу запустить 50 потоков на каждую очередь, либо запустить 4 потока и давать им пачки заданий Это реальная задача или вымышленная? Что мешает взять и поставить тест? Системы завоза тонн плова1. Да, мои потоки ничего не ждут, я об этом по-моему постоянно пишу. Никакого ввода-вывода, блокирования, сна... Так что мешает поставить тест? Ну кроме отсуствия этих самых 100млн заданий и реальзой (хоть кому-то нужной) задачи, как таковой? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2012, 21:00 |
|
||
|
Принципиальный вопрос о многопоточности, кешах ЦП, конвеерах.
|
|||
|---|---|---|---|
|
#18+
Системы завоза тонн пловапропущено... 1. Да, мои потоки ничего не ждут, я об этом по-моему постоянно пишу. Никакого ввода-вывода, блокирования, сна... 2. Получается 4 и 50 тяжёлых потоков - один хрен? Но как же так? Ведь если каждый выполняется на своём ядре долгое время, то кеши L1, L2, конвееры (и что там ещё) будут меньше сбиваться? 1. Тогда зачем тебе 50 тредов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2012, 19:01 |
|
||
|
Принципиальный вопрос о многопоточности, кешах ЦП, конвеерах.
|
|||
|---|---|---|---|
|
#18+
ZyK_BotaN...вот если запустить 1000-чи потоков, то тачка сдохнет... ерунду несёте. насколько мне не изменяет память(из практики, когда то проводился тест) отжирает (сам поток) ресурсы в момент запуска. сколько тысяч вы будете запускать в рамках своего процесса - определяет лишь размерность хэндлера форточек. времена когда их было всего 65 тысяч - давно прошли. или другое имелось ввиду? (круглый) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2012, 21:40 |
|
||
|
Принципиальный вопрос о многопоточности, кешах ЦП, конвеерах.
|
|||
|---|---|---|---|
|
#18+
kolobok0ZyK_BotaN...вот если запустить 1000-чи потоков, то тачка сдохнет... ерунду несёте. насколько мне не изменяет память(из практики, когда то проводился тест) отжирает (сам поток) ресурсы в момент запуска. сколько тысяч вы будете запускать в рамках своего процесса - определяет лишь размерность хэндлера форточек. времена когда их было всего 65 тысяч - давно прошли. или другое имелось ввиду? (круглый) По видимому другое. То от чего этот хэндлер. И ресурсы ядра которое все это разгребает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2012, 22:13 |
|
||
|
Принципиальный вопрос о многопоточности, кешах ЦП, конвеерах.
|
|||
|---|---|---|---|
|
#18+
OoCcСистемы завоза тонн пловапропущено... 1. Да, мои потоки ничего не ждут, я об этом по-моему постоянно пишу. Никакого ввода-вывода, блокирования, сна... 2. Получается 4 и 50 тяжёлых потоков - один хрен? Но как же так? Ведь если каждый выполняется на своём ядре долгое время, то кеши L1, L2, конвееры (и что там ещё) будут меньше сбиваться? 1. Тогда зачем тебе 50 тредов? Проще код. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2012, 22:13 |
|
||
|
Принципиальный вопрос о многопоточности, кешах ЦП, конвеерах.
|
|||
|---|---|---|---|
|
#18+
Системы завоза тонн пловаOoCcпропущено... 1. Тогда зачем тебе 50 тредов? Проще код. Вот так всегда. Эти программеры вместо того чтобы делать как надо - делают как им удобнее и проще. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2012, 22:29 |
|
||
|
Принципиальный вопрос о многопоточности, кешах ЦП, конвеерах.
|
|||
|---|---|---|---|
|
#18+
Системы завоза тонн пловаOoCcпропущено... 1. Тогда зачем тебе 50 тредов? Проще код. если тебе так проще писать - то юзай эрланг, там хоть процессы легковесные ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2012, 22:31 |
|
||
|
Принципиальный вопрос о многопоточности, кешах ЦП, конвеерах.
|
|||
|---|---|---|---|
|
#18+
OoCc делают как им удобнее и проще. :) если при этом не возникает проблем - то так и нужно. но не думаю, что 50 потоков - это не проблема. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2012, 22:31 |
|
||
|
Принципиальный вопрос о многопоточности, кешах ЦП, конвеерах.
|
|||
|---|---|---|---|
|
#18+
50 потоков перед которыми стоит очередь из 100 миллионов сферических задач в вакууме . Системы завоза тонн пловаOoCcпропущено... 1. Тогда зачем тебе 50 тредов? Проще код. Доктор Клифф Клик, перелогиньтесь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2012, 23:18 |
|
||
|
Принципиальный вопрос о многопоточности, кешах ЦП, конвеерах.
|
|||
|---|---|---|---|
|
#18+
Системы завоза тонн пловаВедь если я поставил в настройках ядра linux частоту таймера = 250 Гц, то чаще потоки переключаться не будут, не только прерывания от таймера, но и от периферии, а так же системные вызовы могут вызвать переключение потоков ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2012, 00:07 |
|
||
|
Принципиальный вопрос о многопоточности, кешах ЦП, конвеерах.
|
|||
|---|---|---|---|
|
#18+
OoCcЭти программеры вместо того чтобы делать как надо - делают как им удобнее и проще. :) удобнее и проще - это и есть как надо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2012, 00:08 |
|
||
|
Принципиальный вопрос о многопоточности, кешах ЦП, конвеерах.
|
|||
|---|---|---|---|
|
#18+
Небольшой вопрос тем, кто серьёзно изучает современные процы и планировщики ОС. Вот процессор с 1 ядром выполняет какой-то тяжёлый поток, который 100% времени ядра что-то считает. Как на этом потоке сказывается происходящее 1000 раз в секунду прерывание системного таймера с передачей управления на обработчик этого прерывания? Происходит ли какой-то неприятный сбой каких-то кешей и конвееров, потеря каких-нибудь предсказаний ветвлений, от которых потом ещё много тактов ощущаются последствия? Промахи всякие и т.п. Вопрос вот к чему. Представьте 4-х ядерный проц. На всех 4-х ядрах выполняются тяжёлые потоки, которые никогда не спят, считают. 250 раз в секунду возникает прерывание системного таймера, какие-то другие события редкие происходят. И все они выполняются, допустим, на каком-то ядре. Системный таймер - тот вообще наверное только на ядре номер 0 выполняется, как и все прочие аппаратные. В такой схеме на каком-нибудь ядре номер 2 долгое время может быть ситуация, когда непрерывно выполняется один поток, ибо шедулеру больше нечего туда шедулить, больше тяжёлых потоков нет, вся мелочёвка выполняется периодически на разных ядрах, все системные обработчики - на ядре 0. Теперь представьте, что запустили ещё 4 таких же тяжёлых потока с таким же приоритетом. На том самом ядре номер 2 начнётся ситуация разделения времени между двумя потоками поровну. Вопрос: как 2 потока быстрее выполнят общий объём работы A: если сначала непрерывно отработает один поток, потом непрерывно второй, или когда они будут переключаться 250 раз в секунду? Подозреваю, что в первом случае быстрее. Но НА СКОЛЬКО будет замедление во втором случае? На время выполнения кода сохранения-восстановления содержимого регистров, многократно исполняющегося за время работы потоков? А скажутся ли какие-то сбивания конвееров и кешей и как именно, если да? Ух... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2012, 00:20 |
|
||
|
Принципиальный вопрос о многопоточности, кешах ЦП, конвеерах.
|
|||
|---|---|---|---|
|
#18+
Системы завоза тонн пловаВот процессор с 1 ядром выполняет какой-то тяжёлый поток, который 100% времени ядра что-то считает. Как на этом потоке сказывается происходящее 1000 раз в секунду прерывание системного таймера с передачей управления на обработчик этого прерывания? Происходит ли какой-то неприятный сбой каких-то кешей и конвееров, потеря каких-нибудь предсказаний ветвлений, от которых потом ещё много тактов ощущаются последствия? Промахи всякие и т.п.Может быть, может не быть. Зависит от процессора и ОС. Системы завоза тонн пловаПодозреваю, что в первом случае быстрее. Но НА СКОЛЬКО будет замедление во втором случае? На время выполнения кода сохранения-восстановления содержимого регистров, многократно исполняющегося за время работы потоков? А скажутся ли какие-то сбивания конвееров и кешей и как именно, если да?Да. Переключение между процессами даст некоторую задержку. Какую именно - зависит от ОС и процессора на который эта ОС рассчитана. Если хочешь посчитать конкретно, то вот например идешь на http://www.kernel.org/pub/linux/kernel/ Выкачиваешь исходник кернела, находишь в нем \arch\x86\kernel\signal.c и смотришь как реализованы сигналы (и переключение контекстов) для x86-го процессора. Аналогичный путь и до других архитектур. А чтобы точно предсказать на сколько будет замедление - придется посчитать сколько времени выполняется каждое случившееся прерывание, и каждый системный вызов. Кернел конечно выполняется в своем отдельном потоке и по идее не должен так уж замедлять пользовательское приложение (которое в нашей задаче вообще запущенно на другом процессоре), но приложение ждет пока кернел выполнит запрошенное, плюс оверхед на синхронизацию процессоров. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2012, 01:09 |
|
||
|
Принципиальный вопрос о многопоточности, кешах ЦП, конвеерах.
|
|||
|---|---|---|---|
|
#18+
White OwlДа. Переключение между процессами даст некоторую задержку. Какую именно - зависит от ОС и процессора на который эта ОС рассчитана. Мне кажется я пытаюсь задавать вопрос независимо от ОС, имея ввиду современные процы intel. Вопрос-то основной не в том, сколько времени конкретная ОС переключает задачи, а как это ощущает проц со всеми своими кешами, конвеерами, предсказаниями и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2012, 01:24 |
|
||
|
Принципиальный вопрос о многопоточности, кешах ЦП, конвеерах.
|
|||
|---|---|---|---|
|
#18+
Системы завоза тонн пловаWhite OwlДа. Переключение между процессами даст некоторую задержку. Какую именно - зависит от ОС и процессора на который эта ОС рассчитана. Мне кажется я пытаюсь задавать вопрос независимо от ОС, имея ввиду современные процы intel.Задать вопрос - независимо от CPU/OS можно, а вот дать ответ независимо от них - невозможно. Системы завоза тонн пловаВопрос-то основной не в том, сколько времени конкретная ОС переключает задачи, а как это ощущает проц со всеми своими кешами, конвеерами, предсказаниями и т.п.Какой из Intel'овских процессоров тебя интересует? Основная разница между всеми моделями интеловских CPU как раз в этих самых кешах и их поведении и заключается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2012, 01:42 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=37648071&tid=1342460]: |
0ms |
get settings: |
11ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
229ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
63ms |
get tp. blocked users: |
1ms |
| others: | 251ms |
| total: | 594ms |

| 0 / 0 |
