Почему ядра не загружены равномерно?

 
1 2 3 4 5 6
IL TheFreeMan #10.01.2012 22:08  @Wyvern-2#10.01.2012 21:51
+
-1
-
edit
 

TheFreeMan

втянувшийся

Scheduler Windows (и Linux тоже) не делает разницы между релаьными и виртуальными ядрами.
Строго говоря, когда влючен HT то реальных ядер вообще нет, есть только виртуальные.
Если отключить HT, то будут только реальные.

Насчет самого топика, напишите программу которая запускает 2 потока которые исполняют while(1).
Будут загружены 2 ядра из 4-х. Надо обьяснять почему ?
 16.0.912.7516.0.912.75
EE Татарин #10.01.2012 22:11  @TheFreeMan#10.01.2012 22:08
+
+2
-
edit
 

Татарин

координатор
★★★★☆
TheFreeMan> Scheduler Windows (и Linux тоже) не делает разницы между релаьными и виртуальными ядрами.
Уже делает.

TheFreeMan> Строго говоря, когда влючен HT то реальных ядер вообще нет, есть только виртуальные.
TheFreeMan> Если отключить HT, то будут только реальные.
Строго говоря, да. А нестрого говоря, невыгодно запускать два потока в НТ на одном ядре, если есть свободное ядро. Винда, не будь дурой, и не запускает.

TheFreeMan> Будут загружены 2 ядра из 4-х. Надо обьяснять почему ?
Вопрос в том, какие ядра будут загружены. У Сергея была налицо картинка с чередованием (а не первые четыре - заняты, следующие - пусты), откуда, НЯП, и возник вопрос.
...А неубитые медведи делили чьи-то шкуры с шумом. Боюсь, мы поздно осознали, к чему всё это приведёт.  9.0.19.0.1
+
-1
-
edit
 

Floyd

аксакал

TheFreeMan> Насчет самого топика, напишите программу которая запускает 2 потока которые исполняют while(1).
TheFreeMan> Будут загружены 2 ядра из 4-х. Надо обьяснять почему ?

Не плохо бы, а то тут много чего понаписали - но не для танкистов.
 16.0.912.7516.0.912.75
RU Balancer #10.01.2012 22:15  @TheFreeMan#10.01.2012 22:08
+
-
edit
 

Balancer

администратор
★★★★★
TheFreeMan> Насчет самого топика, напишите программу которая запускает 2 потока которые исполняют while(1).
TheFreeMan> Будут загружены 2 ядра из 4-х. Надо обьяснять почему ?

В Linux будут загружены 4 ядра. Я жи писал выше, что процессы перекидываются между ядрами. Одновременно будут работать два ядра из четырёх. Но работать (по-очереди, в т.ч. на HT) будут все четыре.
 
MD Wyvern-2 #10.01.2012 22:17  @Татарин#10.01.2012 22:03
+
-1
-
edit
 

Wyvern-2

координатор
★★★★★

Floyd>> Так почему же у Сергея отсутствует загрузка HT-ядер?
Татарин> Так сказано же уже. Потому что винда в первую очередь старается загрузить "реальные" ядра, а уж потом - по возможности - НТ.

Да не может Винда "отличить" "реальные" от НТ-ядер! Они все РЕАЛЬНЫЕ - с своим аппаратным обеспечением.
Жизнь коротка, путь искусства долог, удобный случай мимолетен, опыт обманчив.... Ἱπποκράτης  3.0.193.0.19
MD Wyvern-2 #10.01.2012 22:19  @Balancer#10.01.2012 22:15
+
-1
-
edit
 

Wyvern-2

координатор
★★★★★

TheFreeMan>> Будут загружены 2 ядра из 4-х. Надо обьяснять почему ?
Balancer> .... Одновременно будут работать два ядра из четырёх....
Но существует возможность написать такую прогу, при выполнении которой будут загруженны ВСЕ 4 ядра, в т.ч. и два "псевдо" одновременно. Так?
Жизнь коротка, путь искусства долог, удобный случай мимолетен, опыт обманчив.... Ἱπποκράτης  3.0.193.0.19
RU Balancer #10.01.2012 22:22  @Wyvern-2#10.01.2012 22:19
+
-
edit
 

Balancer

администратор
★★★★★
Wyvern-2> Но существует возможность написать такую прогу, при выполнении которой будут загруженны ВСЕ 4 ядра, в т.ч. и два "псевдо" Так?

Естественно. Более того, на реальных загрузка активных процессов более четырёх обычно бывает. Но речь именно про ситуацию, когда работает два потока на четырёх ядрах. То есть про то, будет ли каждый поток работать на одном ядре или будет перекидываться. Я своими глазами не раз видел, как перекидывается :)
 
+
+2
-
edit
 

Mishka

модератор
★★★
Wyvern-2> Да не может Винда "отличить" "реальные" от НТ-ядер! Они все РЕАЛЬНЫЕ - с своим аппаратным обеспечением.
Да может и отличает. :)
 7.0.17.0.1
IL TheFreeMan #10.01.2012 22:24  @Татарин#10.01.2012 22:11
+
-
edit
 

TheFreeMan

втянувшийся

Татарин> Уже делает.
Не совсем, я говорил о случае когда есть только одно физическое ядро.

Татарин> Строго говоря, да. А нестрого говоря, невыгодно запускать два потока в НТ на одном ядре, если есть свободное ядро. Винда, не будь дурой, и не запускает.

Когда есть несколько, то ОС "знает" какие виртуальные сидят на одном реальном и распределяет соответственно.
Допустим у нас есть 2 ядра + HT, тогда OS видит 4 CPU (1 2 3 4)и будет запускать по кругу на всех, но 1 и 3 это один core, а 2 и 4 другой.

Татарин> Вопрос в том, какие ядра будут загружены. У Сергея была налицо картинка с чередованием (а не первые четыре - заняты, следующие - пусты), откуда, НЯП, и возник вопрос.

А как Сергей точно знает какие виртуальные сидят на каких реальных ?
 16.0.912.7516.0.912.75
+
-
edit
 

Mishka

модератор
★★★
Wyvern-2> Но существует возможность написать такую прогу, при выполнении которой будут загруженны ВСЕ 4 ядра, в т.ч. и два "псевдо" одновременно. Так?

И существует возможность написать программу, когда будет загруженно всегда одно и то же ядро:
man sched_getaffinity
или
man sched_setaffinity
 7.0.17.0.1
+
-1
-
edit
 

Wyvern-2

координатор
★★★★★

Wyvern-2>> Да не может Винда "отличить" "реальные" от НТ-ядер! Они все РЕАЛЬНЫЕ - с своим аппаратным обеспечением.
Mishka> Да может и отличает. :)

КАК!? Винда может "знать" включен режим НТ или нет. Т.е. работает она с реальным ядром, или это ядро эмулирует АППАРАТНО два ядра. А как она ОТЛИЧИТ одно от другого, то чего нельзя отличить? ЖР
Жизнь коротка, путь искусства долог, удобный случай мимолетен, опыт обманчив.... Ἱπποκράτης  3.0.193.0.19
US Mishka #10.01.2012 22:34  @TheFreeMan#10.01.2012 22:24
+
-
edit
 

Mishka

модератор
★★★
TheFreeMan> Не совсем, я говорил о случае когда есть только одно физическое ядро.

А какая разница? Если HT врублен, то одно будет использоваться, как реальное, а другое, как дополнение. Можно наоборот. Суть в том, что на данный момент ОС знает, что эта пара связана. И что полноценная загрузка всех ресурсов возможна только в специальных случаях. Поэтому, одно из пары будет грузится полностью, а другое частично. Но это новые винды. Какой из пары будет считаться реальным — не важно.

TheFreeMan> Когда есть несколько, то ОС "знает" какие виртуальные сидят на одном реальном и распределяет соответственно.

Даже на одном она знает. И старается это использовать. Но два виртуальных лучше. И избытка ресурсов нет, вот и пользуется двумя. Хотя те же рендеры, которые написаны специально для многопроцессорных система на HT работают медленнее, чем, когда HT выключен.

TheFreeMan> Допустим у нас есть 2 ядра + HT, тогда OS видит 4 CPU (1 2 3 4)и будет запускать по кругу на всех, но 1 и 3 это один core, а 2 и 4 другой.

При этом она будет пытаться запустить в первую очередь на 1 и 2, а, если не хватает, то использовать 2 и 4. Что и видно у Сергея.

TheFreeMan> А как Сергей точно знает какие виртуальные сидят на каких реальных ?

Винда знает. :)
 7.0.17.0.1
IL TheFreeMan #10.01.2012 22:34  @Balancer#10.01.2012 22:15
+
-
edit
 

TheFreeMan

втянувшийся

TheFreeMan>> Насчет самого топика, напишите программу которая запускает 2 потока которые исполняют while(1).
TheFreeMan>> Будут загружены 2 ядра из 4-х. Надо обьяснять почему ?
Balancer> В Linux будут загружены 4 ядра. Я жи писал выше, что процессы перекидываются между ядрами. Одновременно будут работать два ядра из четырёх. Но работать (по-очереди, в т.ч. на HT) будут все четыре.

На самом деле непонятно зачем... (если CPU idle)...

Each thread has two CPU numbers stored in the kernel thread block:
1)Ideal processor, or the preferred processor that this thread should run on
2)Last processor, or the processor on which the thread last ran
The ideal processor is chosen randomly when a thread is created, based on a seed in the process block. The seed is incremented each time a thread is created so that the ideal processor for each new thread in the process will rotate through the available processors on the system. Kernel doesn't change the ideal processor once the thread is created; however, an application can change the ideal processor value for a thread.

When a thread becomes ready to run, kernel first tries to schedule the thread to run on an idle processor. If there is a choice of idle processors, preference is given first to the thread's ideal processor, then to the thread's last processor, and then to the currently executing processor (that is, the CPU on which the scheduling code is running). If none of these CPUs are idle, scheduler picks the first available idle processor by scanning the idle processor mask from highest to lowest CPU number.
 16.0.912.7516.0.912.75
+
-1
-
edit
 

Wyvern-2

координатор
★★★★★

Wyvern-2>>> Да не может Винда "отличить" "реальные" от НТ-ядер! Они все РЕАЛЬНЫЕ - с своим аппаратным обеспечением.
Mishka1>> Да может и отличает. :)
.....
Mishka2> А какая разница? .... Какой из пары будет считаться реальным — не важно.

Тебе не кажется, что Mishka1 спорит с Mishka2 а не со мной? :D
Жизнь коротка, путь искусства долог, удобный случай мимолетен, опыт обманчив.... Ἱπποκράτης  3.0.193.0.19
IL TheFreeMan #10.01.2012 22:57  @Mishka#10.01.2012 22:34
+
-1
-
edit
 

TheFreeMan

втянувшийся

Mishka> А какая разница? Если HT врублен, то одно будет использоваться, как реальное, а другое, как дополнение. Можно наоборот.

Нет, не будет. Будет использовать как 2 равнозначных.

Mishka> Даже на одном она знает. И старается это использовать. Но два виртуальных лучше. И избытка ресурсов нет, вот и пользуется двумя.

Нет, не знает, потому как для неё они равны.
 16.0.912.7516.0.912.75
EE Татарин #10.01.2012 22:57  @Wyvern-2#10.01.2012 22:17
+
-
edit
 

Татарин

координатор
★★★★☆
Wyvern-2> Да не может Винда "отличить" "реальные" от НТ-ядер! Они все РЕАЛЬНЫЕ - с своим аппаратным обеспечением.
Может. И отличает.
То есть, старается в первую очередь рассовать потоки по разным ядрам, и вот только когда свободные ядра уже забиты, Винда будет использовать возможности НТ.
...А неубитые медведи делили чьи-то шкуры с шумом. Боюсь, мы поздно осознали, к чему всё это приведёт.  9.0.19.0.1
EE Татарин #10.01.2012 23:01  @TheFreeMan#10.01.2012 22:24
+
-
edit
 

Татарин

координатор
★★★★☆
Татарин>> Уже делает.
TheFreeMan> Не совсем, я говорил о случае когда есть только одно физическое ядро.
А, ну тогда да.

TheFreeMan> Допустим у нас есть 2 ядра + HT, тогда OS видит 4 CPU (1 2 3 4)и будет запускать по кругу на всех, но 1 и 3 это один core, а 2 и 4 другой.
Ну да.

TheFreeMan> А как Сергей точно знает какие виртуальные сидят на каких реальных ?
А он, НЯП, и не знает. :) Это отдельно интересоваться надо.
...А неубитые медведи делили чьи-то шкуры с шумом. Боюсь, мы поздно осознали, к чему всё это приведёт.  9.0.19.0.1
EE Татарин #10.01.2012 23:03  @Wyvern-2#10.01.2012 22:30
+
+1
-
edit
 

Татарин

координатор
★★★★☆
Wyvern-2> КАК!? Винда может "знать" включен режим НТ или нет. Т.е. работает она с реальным ядром, или это ядро эмулирует АППАРАТНО два ядра. А как она ОТЛИЧИТ одно от другого, то чего нельзя отличить? ЖР
Она знает, какие НТ-"процессоры" принадлежат какому ядру. Это знание может получить даже прикладная программа. Далее - она старается загружать по одному НТ-"процессору" из каждого реального.

По-моему, проще некуда. :)
...А неубитые медведи делили чьи-то шкуры с шумом. Боюсь, мы поздно осознали, к чему всё это приведёт.  9.0.19.0.1
IL TheFreeMan #10.01.2012 23:09  @Татарин#10.01.2012 22:57
+
-1
-
edit
 

TheFreeMan

втянувшийся

Wyvern-2>> Да не может Винда "отличить" "реальные" от НТ-ядер! Они все РЕАЛЬНЫЕ - с своим аппаратным обеспечением.
Татарин> Может. И отличает.

Придиразм: нет не отличает, а знает к какому физическому ядру данный логический процессор принадлежит.

Татарин> То есть, старается в первую очередь рассовать потоки по разным ядрам, и вот только когда свободные ядра уже забиты, Винда будет использовать возможности НТ.

и опять придиразм: HT используется by default так как распределение идет по всем логическим процессорам, единственное отличие от "настоящей" мултипроцессорности это порядок распределения.
 16.0.912.7516.0.912.75
+
+1
-
edit
 

Mishka

модератор
★★★
Wyvern-2> КАК!? Винда может "знать" включен режим НТ или нет. Т.е. работает она с реальным ядром, или это ядро эмулирует АППАРАТНО два ядра. А как она ОТЛИЧИТ одно от другого, то чего нельзя отличить? ЖР

Как ты думаешь, как биос включает и выключает HT режим? :) Правильно BIOS. И BIOS знает. :) Что мешает ОС провернуть ещё раз такое же?

http://download.intel.com/design/processor/manuals/253665.pdf — 2.2.7 и 2.2.8
http://www.intel.com/Assets/ja_JP/PDF/manual/253668.pdf — здесь много надо читать.
http://download.intel.com/design/archives/.../pro/docs/24201606.pdf — это как инициализируют HT — наравне с много ядерными.

Ну и есть такая утилитка CPUID - System & hardware benchmark, monitoring, reporting — знает количество ядер и количество ниток.

Гы, DEC, оказывается на Alphe был первым — Intel hyperthreading shows Digital roots - CNET News
 7.0.17.0.1
+
+1
-
edit
 

Mishka

модератор
★★★
Wyvern-2>> КАК!? Винда может "знать" включен режим НТ или нет. Т.е. работает она с реальным ядром, или это ядро эмулирует АППАРАТНО два ядра. А как она ОТЛИЧИТ одно от другого, то чего нельзя отличить? ЖР
Ник, чтобы тебе совсем поплохело... :F


acpi=          [HW,ACPI] Advanced Configuration and Power Interface
                       Format: { force | off | ht | strict | noirq }
                       force — enable ACPI if default was off
                       off — disable ACPI if default was on
                       noirq — do not use ACPI for IRQ routing
                       ht — run only enough ACPI to enable Hyper Threading
                       strict — Be less tolerant of platforms that are not
                               strictly ACPI specification compliant.

                       See also Documentation/pm.txt, pci=noacpi



Знаешь что это такое? Это параметр ядра линя.
 7.0.17.0.1
IL TheFreeMan #10.01.2012 23:20  @Mishka#10.01.2012 23:10
+
-1
-
edit
 

TheFreeMan

втянувшийся

Mishka> Intel® Hyper-Threading Technology: Your Questions Answered - Intel® Software Network ....

К чему это всё ?
Можно например увидеть где там идет речь о "Если HT врублен, то одно будет использоваться, как реальное, а другое, как дополнение".

с точки зреня софта, когда включен HT, то два "hardware threads" на одном ядре абсолютно равнозначны.
 16.0.912.7516.0.912.75
+
-
edit
 

Mishka

модератор
★★★
Wyvern-2> Тебе не кажется, что Mishka1 спорит с Mishka2 а не со мной? :D
Я гляжу у тебя симметричные алгебраические отношения вызывают панику. :)
Не важно, кто в паре будет считаться реальным, а кто виртуальным. Можно любого принять. Важно то, что отношение в паре есть. Всё. Это отношение определяет пару. Один пойдёт с полной загрузкой, другой нет. Отношение симметрично. Аппаратура так устроена.
 7.0.17.0.1
US Mishka #10.01.2012 23:21  @TheFreeMan#10.01.2012 22:57
+
+1
-
edit
 

Mishka

модератор
★★★
TheFreeMan> Нет, не будет. Будет использовать как 2 равнозначных.
Нет. Если есть поддержка HT в ОС, то не будет.

TheFreeMan> Нет, не знает, потому как для неё они равны.
Тоже проблемы с реляциями?
 7.0.17.0.1
US Mishka #10.01.2012 23:24  @TheFreeMan#10.01.2012 23:09
+
+1
-
edit
 

Mishka

модератор
★★★
TheFreeMan> Придиразм: нет не отличает, а знает к какому физическому ядру данный логический процессор принадлежит.

Да, это и есть отличие. HT пока сделана так, что выбрать можно любую нить. Они симметричны в смысле возможностей.

TheFreeMan> и опять придиразм: HT используется by default так как распределение идет по всем логическим процессорам, единственное отличие от "настоящей" мултипроцессорности это порядок распределения.

Там, насколько я понимаю, очереди с приоритетами. Если два потока принадлежат одному ядру, то одному присваивается приоритет повыше, а другому пониже. Ядра всегда сначала беруться из очереди с более высоким приоритетом. И обход очередей не включает "формулу справедливости".
 7.0.17.0.1
1 2 3 4 5 6

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru