[image]

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

 
1 2 3 4 5 6
US Mishka #09.01.2012 07:44  @Сергей-4030#08.01.2012 23:10
+
-
edit
 

Mishka

модератор
★★★
Сергей-4030> Не надо прикапываться к частностям. Для ОС у меня 8 ядер, а распределяет треды ОС.

Не, Церёг, там не настоящие ядра, а НТ. Поэтому железо решает, когда свбодно, а когда нет. Ну и счётчики обновляет оно же.
   5.05.0
+
-
edit
 

Mishka

модератор
★★★
Balancer> Кстати, забавно смотреть, когда систему грузит только один поток — он регулярно перекидывается с ядра на ядро. Видимо, чтобы грелось равномернее.
Это, в основном, естесственное поведение. И процессы, и готовые процы ставятся в очередь FIFO или циклическую с теми же принципами. Очереди с приоритетами тоже из тойже серии. Поэтому и получается так. А чтобы не получалось есть afinity.
   5.05.0
US Сергей-4030 #09.01.2012 08:56  @Mishka#09.01.2012 07:44
+
-
edit
 

Сергей-4030

исключающий третье
★★
Сергей-4030>> Не надо прикапываться к частностям. Для ОС у меня 8 ядер, а распределяет треды ОС.
Mishka> Не, Церёг, там не настоящие ядра, а НТ. Поэтому железо решает, когда свбодно, а когда нет. Ну и счётчики обновляет оно же.

Теперь уже понятно, но вроде как не всегда так было. И вроде как, пользовательская задачка не может узнать, какое ядро - настоящее.
   16.0.912.7516.0.912.75
+
-1
-
edit
 

Floyd

аксакал

Про HT уже написали, осталось рассмотреть тут задачу которая активно потребляет ЦП. Процессор переключает thread только при возникновении "долгих" операций ввода-вывода.
   16.0.912.7516.0.912.75
+
+2
-
edit
 

Mishka

модератор
★★★
Floyd> Про HT уже написали, осталось рассмотреть тут задачу которая активно потребляет ЦП. Процессор переключает thread только при возникновении "долгих" операций ввода-вывода.

Офигел, да? Про preemtive или timesharing ничего не слышал?
   7.0.17.0.1

Floyd

аксакал

Mishka> Офигел, да? Про preemtive или timesharing ничего не слышал?

Ничего
   16.0.912.7516.0.912.75
+
+1
-
edit
 

Mishka

модератор
★★★
Floyd> Ничего
Уже лет, как 30 это норма. Когда есть определённый кусочек времени, которое даётся задаче на исполнение. Есть специальный таймер. Как время закончилось, так проц отбирают и отдают другой задаче. Т.е. насильное переключение. Что не отменяет переключения по другим событиям, в том числе и ввода-вывода. Называлось это дело в OS/370 TSO Time Sharing Option. Ещё термины time slicing, preeemtive. В зависимости от величины размера "кванта времени" сейчас часто говорят о серверных настройках (длинный) и десктоп (короткий). Т.е. в зависимости от задач — если нет взаимодействия с человеком, то ставят длинный, т.к. переключение контекства занимает время и ресурсы и снижает общее КПД. А человек не может терпеть долго — некомфортно работать, если между нажатиями клавиши иногда возникает пауза более 0.3-0.5 секунды.

В системах реального времени таймеры выставляют с очень маленьким разрешением, ну и специально код пишут, чтобы обработка такого интервала была гарантирована (hard real time) или почти гарантирована (soft real time). Достигается разными способами, в том числе уходом с giant lockы в micro locks и очень тщательным вылизыванием подсистем на предмет переключения, блокировки и прочего. В том же лине или винде ни фига не гарантированно, т.к. есть непрерываемые операции, которые могут взять секунды. В частности возникают моменты, когда при интенсивном обмене и винда, и линь приседают.
   7.0.17.0.1

Floyd

аксакал

Floyd>> Ничего
Mishka> Уже лет, как 30 это норма.

Ах вот ты о чем. Я совсем не о диспетчеризации ос, а о методике переключения потоков в ядре процессора. Переключение потока ядром процессора происходит при условии что на исполнении находится команда занимающая значительное время (кол-во тактов), как пример операция чтения записи в память.

Возможно я в чем-то не точен,но искать инфу мне сейчас совсем не охото.
   16.0.912.7516.0.912.75
Это сообщение редактировалось 10.01.2012 в 00:04
+
-1
-
edit
 

Wyvern-2

координатор
★★★★★
Сергей-4030>> Не надо прикапываться к частностям. Для ОС у меня 8 ядер, а распределяет треды ОС.
Mishka> Не, Церёг, там не настоящие ядра, а НТ. Поэтому железо решает, когда свбодно, а когда нет. Ну и счётчики обновляет оно же.

Собственно наличие пары регистров-счетчиков, вместо одного и есть технология НТ :)
Но оказалось, что неправы оба-три :D
С одной стороны Винда действительно не может различить "реальный" процессор от "виртуального" потому что на уровне абстракции Винды они все реальные - с реальными счетчиками. С другой - еще в АПИ ВинХрю есть приблуда Win32_ComputerSystem класс Win32_Processor которая "считает" процессорные ядра и косвенно может отличить когда реальные ядра, а когда гипертрединг. Собственно сами микромягкие пишут:
Win32_Processor
  • В NumberOfLogicalProcessors свойство возвращает число логических процессоров на текущий экземпляр.
  • В NumberOfCores свойство возвращает число ядер на текущий экземпляр.
  • Количество Win32_Processor экземпляры, которые возвращаются число физических процессоров, доступных в системе.
  • Чтобы определить, включена ли технология Hyper-Threading процессор, сравните значение NumberOfCores значение этого свойства NumberOfLogicalProcessors свойство. Если технология Hyper-Threading включена в базовой системе ввода вывода (BIOS) для процессора, значение NumberOfCores свойство меньше, чем значение NumberOfLogicalProcessors свойство.
    Например предположим, что Двухпроцессорные системы содержит два процессора, подключенных друг технология Hyper-Threading. Это позволяет выполнять четыре потока или четыре программы одновременно. В данном случае — значение NumberOfCores свойство равно 2, а значение NumberOfLogicalProcessors свойство равно 4.
     
       3.0.193.0.19
    Это сообщение редактировалось 09.01.2012 в 23:57

    Mishka

    модератор
    ★★★
    Floyd> Ах вот ты о чем. Я совсем не о диспетчеризации ос, а о методике переключения потоков в ядре процессора. Переключение потока ядром процессора происходит при условии что на исполнении находится команда занимающая значительное время (кол-во тактов), как пример операция чтения записи в память.

    Переключение потоков в ядре процессора? Ты имеешь ввиду HT? Потому, как обычным переключением потоков занимается ОС. А проц сам особо не переключает.
       7.0.17.0.1

    Floyd

    аксакал

    Mishka> Переключение потоков в ядре процессора? Ты имеешь ввиду HT? Потому, как обычным переключением потоков занимается ОС. А проц сам особо не переключает.

    Кусок из вики, несколько не явно, но смотри на выделенное - это условие переключения потоков в ядре
    When execution resources would not be used by the current task in a processor without hyper-threading, and especially when the processor is stalled, a hyper-threading equipped processor can use those execution resources to execute another scheduled task. (The processor may stall due to a cache miss, branch misprediction, or data dependency.)
    This technology is transparent to operating systems and programs. The minimum that is required to take advantage of hyper-threading is symmetric multiprocessing (SMP) support in the operating system, as the logical processors appear as standard separate processors.
       16.0.912.7516.0.912.75
    +
    +1
    -
    edit
     

    Mishka

    модератор
    ★★★
    Wyvern-2> Собственно наличие пары регистров-счетчиков, вместо одного и есть технология НТ :)

    Не, там ещё много чего есть. :)

    Wyvern-2> Но оказалось, что неправы оба-три :D
    Wyvern-2> С одной стороны Винда действительно не может различить "реальный" процессор от "виртуального" потому что на уровне абстракции Винды они все реальные - с реальными счетчиками. С другой - еще в АПИ ВинХрю есть приблуда Win32_ComputerSystem класс Win32_Processor которая "считает" процессорные ядра и косвенно может отличить когда реальные ядра, а когда гипертрединг. Собственно сами микромягкие пишут:
    Тут надо отличать ядро системы и прикладной API. Ядро системы таки может много сотворить с процем, в том числе и померить просто. Примерно, как меряли глубину водопровода. А может просто иметь маленькую БД по CPUID и знать заранее, сколько реальных, а сколько виртуальных. Поскольку ядро обладает способностью к afinity, то можно даже посчитать количество избыточной аппаратуры.
       7.0.17.0.1

    Mishka

    модератор
    ★★★
    Floyd> When execution resources would not be used by the current task in a processor without hyper-threading

    Это менее интересно. Для HT как раз интересно избыточное количество тех же целочисленных блоков, или с плавающей точкой, или ... Кроме того, разные кэши можно отключать. Ну есть много разных команд занимающих много тактов на сегодня. В том же интеле сдвиг регистра на некоторое количество бит вправо или влево неоднотактовая операция, в отличии от амд. На чём те же распределённые вычисления по взлому DES и выигрывали на АМД. Но у Интела есть свои команды, которые быстрее, чем на АМД. Кроме того, современные компиляторы (от того же интела) уже настолько местами умны, что формируют команды так в режиме оптимизации, что они занимают часто всю аппаратуру. Но эти оптимизации аппаратно-зависимые.


    Floyd> This technology is transparent to operating systems and programs. The minimum that is required to take advantage of hyper-threading is symmetric multiprocessing (SMP) support in the operating system, as the logical processors appear as standard separate processors.

    Хрен там. :) Т.е., если ничего не делать, то и прозрачны. Но хватает побочных эффектов, чтобы вычислить даже пары HT на ядре. :F
       7.0.17.0.1
    +
    -
    edit
     

    Wyvern-2

    координатор
    ★★★★★
    Wyvern-2>> Собственно наличие пары регистров-счетчиков, вместо одного и есть технология НТ :)
    Mishka> Не, там ещё много чего есть. :)
    Wyvern-2>> Но оказалось, что неправы оба-три :D

    Естественно - но дополнительные регистры-счетчики это альфа и омега, то с чего эта технология (имеется ввиду не НТ, а SMT вообще) начинается :)
       3.0.193.0.19
    +
    -1
    -
    edit
     

    Floyd

    аксакал

    Mishka> Хрен там. :) Т.е., если ничего не делать, то и прозрачны. Но хватает побочных эффектов, чтобы вычислить даже пары HT на ядре. :F

    Иными словами шедуллер должен быть интеллекуален в работе с HT и распределять задачи в зависимости от времени нахождения на виртуальном проце. Иначе, в прозрачном варианте, имеем просадку производительности на определенных задачах, к примеру архивация.
       16.0.912.7516.0.912.75
    +
    -
    edit
     

    Mishka

    модератор
    ★★★
    Wyvern-2> Естественно - но дополнительные регистры-счетчики это альфа и омега, то с чего эта технология (имеется ввиду не НТ, а SMT вообще) начинается :)
    Ник, ну какая альфа и омега? :) Вот возьми ты HP-PA процы. Разных версий. Они же там не случайно VLIW сделали и положили использование аппаратуры на программистов. Точнее на компилятор, хотя на ассемблере можно было упаковывать. Мы ещё в 1988 году пытались извращаться (несколько аспирантов и студентов) и типа HT организовать на этих процах — просто хохмы ради. Точно так же один студент (Денис) пытался делать полную эммуляцию 8086 на дебагерном прерывании. :F Дурка только там состояла в том, что, ежели зафитилишь в одну команду пару, которые изпользуют одинаковые рессурсы, то такой мусор выходил, что прямо загляденье. :F Поэтому чуток добавить и получилось маркетинговое чудо.
       7.0.17.0.1

    Mishka

    модератор
    ★★★
    Floyd> Иными словами шедуллер должен быть интеллекуален в работе с HT и распределять задачи в зависимости от времени нахождения на виртуальном проце. Иначе, в прозрачном варианте, имеем просадку производительности на определенных задачах, к примеру архивация.

    Да там уже софт начинает определять. :F Который внутрях — микропрограммы. :F Ну и обычно всё просто было вначале. Иначе отлаживаться затрахаешься. А просадку производительности на определённых задачах имеем — факт. Потому для ряда задач, которые хорошо параллеляться и используют одну и ту же аппаратуру рекомендуют HT отключать. Получается дольше с HT.
       7.0.17.0.1

    Floyd

    аксакал

    Mishka> Который внутрях — микропрограммы. :F
    Это ты o какой микропрограмме, процессора (PAL)?
       16.0.912.7516.0.912.75

    Mishka

    модератор
    ★★★
    Floyd> Это ты o какой микропрограмме, процессора (PAL)?
    Да обо всех сразу. :F Тот же Интел или АМД — они же существенно микропрограммные.
       7.0.17.0.1
    +
    -
    edit
     

    Wyvern-2

    координатор
    ★★★★★
    Mishka> ....Дурка только там состояла в том, что, ежели зафитилишь в одну команду пару, которые изпользуют одинаковые рессурсы, то такой мусор выходил, что прямо загляденье. :F
    И способ этого избежать? Двойной набор регистров начиная с счетчика :D Ну и механизм разрешения конфликтов.
       3.0.193.0.19
    +
    -
    edit
     

    Mishka

    модератор
    ★★★
    Wyvern-2> И способ этого избежать? Двойной набор регистров начиная с счетчика :D Ну и механизм разрешения конфликтов.
    Либо на компилятор надеятся, либо механизм борьбы за те же ресурсы. Второй счётчик сам по себе не помогает.
       7.0.17.0.1

    AXT

    инженер вольнодумец
    ★☆
    Wyvern-2> Двойной набор регистров начиная с счетчика :D

    Ну вот у Интела в процессорах с HT так и сделано — на каждый виртуальный процессор своя карта трансляции логических регистров в физические, плюс достаточное количество физических регистров, чтобы виртуальные процессоры не могли за них конфликтовать. В длинноконвейерном P4 их было аж 128 штук!
       8.0.18.0.1
    +
    -1
    -
    edit
     

    Floyd

    аксакал

    Так почему же у Сергея отсутствует загрузка HT-ядер?
       16.0.912.7516.0.912.75
    +
    -1
    -
    edit
     

    Wyvern-2

    координатор
    ★★★★★
    Floyd> Так почему же у Сергея отсутствует загрузка HT-ядер?

    Думается, потому что на "панели приборов" нет разницы между "настоящими" и "виртуальными" ядрами, а последние загружаются равномерно только на весьма специфических смесях команд.
    Счас придет Миша и все объяснит :)
       3.0.193.0.19
    EE Татарин #10.01.2012 22:03  @Floyd#10.01.2012 21:39
    +
    +2
    -
    edit
     

    Татарин

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

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