Почему при использовании этого кода C происходит переключение в использовании ядра процессора? - PullRequest
2 голосов
/ 24 сентября 2010

Когда я запустил этот код с помощью gcc,

$ cat eatup.c
#include<stdio.h>
#include<stdlib.h>

int main() {
    int i = 0;
    while(1) {
        i++;
    }
}
$

график ЦП выглядел так:

alt text

Я не уверен, почему существуетскрестить использование ядра процессора.

  • Я начал прогон с подъема слева от отметки 40, затем первоначально использование core2 выросло до 100%, но через некоторое время был switch и использование core1 прошло на 100%.

  • Никакие последующие запуски не воспроизводили ситуацию.Все, что я получаю, это один рост alt text

Это может быть немного зависит от ОС (планирование процессов на ядрах), но есть что-нибудь, что может объяснить, почему коммутаторпроизошло (как показано на первом скриншоте)?Есть предположения?


Оказывается, эти переключатели не так уж редки.Вот скриншот системного монитора сразу после загрузки (Ubuntu 10.04)

Полный размер

alt text

Ответы [ 2 ]

3 голосов
/ 24 сентября 2010

Что могло случиться, так это то, что в ОС было два других процесса, которые нужно было запустить. Первому дали второе ядро ​​(потому что вы были на первом). Во-вторых, ваша программа потеряла ядро ​​процессора. Затем первый поток выпустил свое ядро, и ваша программа была ему назначена.

Я не гуру Linux, но обычно можно сказать ОС, что у вас есть предпочтительное ядро, на котором вы хотите работать.

0 голосов
/ 25 сентября 2010

Это зависит от ОС, но обычно ни одна ОС не дает вам гарантий, что ваш поток будет работать на одном и том же ядре все время, если вы не предпримете конкретные шаги, чтобы сделать это так.

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

...