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

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

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

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

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

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

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

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

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

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

Да, в винде сам наблюдаю размазывание. На linux.org.ru мне ответили, что современный линуксовый шедулер CFS "при не пределльной загрузке оставляет процессы/потоки на своих ядрах". Пытаюсь выяснить о чём речь. Ну там вообще хитро, куча разновидностей шедулеров...
...
Рейтинг: 0 / 0
06.02.2012, 13:07
    #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
06.02.2012, 15:38
    #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
06.02.2012, 17:15
    #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
06.02.2012, 21:00
    #37649314
Принципиальный вопрос о многопоточности, кешах ЦП, конвеерах.
Системы завоза тонн пловаУ меня есть 50 очередей из 100млн заданий и 4 ядра. Я могу запустить 50 потоков на каждую очередь, либо запустить 4 потока и давать им пачки заданий

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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