Смущающий вывод времени

0

Эта команда получает некоторые данные из MySQL и затем манипулирует им. Почему "реальное" время намного выше, чем "пользовательское" время?

>time ./command.rb

real    45m45.457s
user    3m36.478s
sys     0m28.226s

Для пояснения - я понимаю разницу между реальным, пользовательским и sys-выходом. Однако я смущен тем, почему существует такая большая разница. Машина, на которой я запускаю эту операцию, практически ничего не использует CPU, и у меня нет нити в моей команде. Все, что он делает, это выборка данных. Может ли быть причиной такого пробела сложный оператор MySQL?

Теги:
time

4 ответа

2
Лучший ответ

пользователь и sys сообщают, сколько времени процессор занят. ЦП не будет занят, если он заблокирован ничем, например, сетевым или дисковым вводом/выводом. Попробуйте, например, "time sleep 1", или "time dd if =/dev/zero of =/dev/null bs = 1024 count = 1000000", чтобы увидеть различия. Первые просто блоки, второй будет включать в себя много использования процессора.

  • 0
    Таким образом, сетевой трафик может быть причиной этого? Если запрос занимает 200 мс от начала до конца, есть идеи, какая часть может быть процессором?
  • 1
    Сетевой трафик совсем не сильно загружает процессор. Если вы используете петлевой интерфейс (например, для общения с SQL-сервером на локальном хосте), он, вероятно, будет гораздо более привязан к ЦП, чем к вводу / выводу, но в противном случае использование ЦП, связанное с сетевым подключением, вероятно, будет минимален. Кроме того, вы только измеряете загрузку процессора вашим скриптом. Сервер SQL будет тратить некоторое время процессора (и дискового ввода-вывода), пытаясь ответить на ваш запрос, и вы не увидите этого в своих измерениях.
2

Система проводит большую часть своего времени, ожидая, когда диски начнут вращаться и начнут искать.

"Пользовательское" время - это время, затраченное на то, что процессоры могут хрустеть для вас.

1

"Реальное" время - это количество фактического времени настенных часов, которое прошло, где времена "пользователь" и "sys" - это количество процессорного времени, используемого для вашей работы в каждом классе обработки. Чтобы "реальное" время было намного выше, ваша работа, вероятно, потратила много времени на ожидание ресурсов или спать.

1

Просто догадайтесь, но если вы просматриваете результаты по ssh-соединению, возможно, большая часть вашего времени ждет, когда процессор зашифрует данные, которые будут отправлены на вашу удаленную консоль.

  • 0
    Я ценю понимание! Я вошел в систему через ssh, но выполняю локальный экран GNU, так что накладные расходы не будут включены в вывод time .

Ещё вопросы

Сообщество Overcoder
Наверх
Меню