Почему существует разница в скорости выполнения кода между пользовательским пространством Linux и пространством ядра? - PullRequest
1 голос
/ 27 декабря 2011

Когда я запускаю простой код цикла while в пространстве пользователя linux и в пространстве ядра и измеряю прошедшее время, я могу получить разницу.

тестовый код - это доступ к некоторым аппаратным регистрам в чипе Arm Cortex SoC.

for(k = 0; k < 100000; k++)
{   //I tested this code in user space and kernel space with IOCTL.
    for(i = 0; i < 1000; i++)  
    {  
        tv2 = *(volatile UInt32 *)(0xfe110080);  
        *(volatile UInt32 *)(0xfe628024) = i + tv2 ;  
    }
}

Результат
Уровень пользователя: 52002,16 мс
Уровень ядра: 32650,53 мс

Уровень ядра был в 1,6 раза быстрее, чем уровень пользователя.

1 Ответ

3 голосов
/ 27 декабря 2011

В общем случае уровень пользователя занимает больше времени, поскольку он выполняет несколько дополнительных вызовов для завершения задачи.

Например, возьмем пример чтения файла.чтобы прочитать файл из пользовательского уровня, мы вызываем read (имя_файла).Этот вызов чтения внутренне вызывает вызов чтения ядра, который обращается к драйверу устройства диска и получает данные.

Следовательно, уровень ядра работает лучше из-за уменьшения количества вызовов.

...