Я подстраивал код для сокращения обработки от 30 секунд менее чем до секунды в различных частях моей программы удара. Я испытываю затруднения при обертывании моего ума о как time
управляйте работами, когда это сообщит real
, user
и sys
переменные.
echo " "
echo "Time to build DirsNdxArr from DirsArr $DirsArrCnt elements:"
DirsArrCnt=${#DirsArr[@]}
time for (( i=1; i<$DirsArrCnt; i=i+$DaElementCnt )); do
DirsNdxArr["${DirsArr[$i]}"]=$i
AllItemSizes=$(( $AllItemSizes + ${DirsArr[$(( $i + $ColFileSizes - 1 ))]} ))
done
echo " "
echo "Time to build FilesNdxArr from FilesArr $FilesArrCnt elements:"
FilesArrCnt=${#FilesArr[@]}
time for (( i=0; i<$FilesArrCnt; i=i+$FaElementCnt )); do
FilesNdxArr["${FilesArr[$i]}"]=$i
AllTagSizes=$(( $AllTagSizes + ${FilesArr[$(( $i + $FaColFileSizes ))]} ))
done
Time to build DirsNdxArr from DirsArr 56700 elements:
real 0m0.149s
user 0m0.149s
sys 0m0.000s
Time to build FilesNdxArr from FilesArr 390 elements:
real 0m0.002s
user 0m0.002s
sys 0m0.000s
sys
нуль создания отчетов времени?Интерпретация вывода time
встроенная команда можно было бы принять систему, делает только, конечно, это не то, что происходит?
PS я знаю \n
может использоваться в качестве новой строки к echo
с -e
параметр. Моя привычка состоит в том, чтобы пожертвовать одной миловидностью лайнера и аргументами края в пользу удобочитаемости.
Короче говоря, это просто означает, что Ваша программа не запрашивала выполнить любые привилегированные задачи, следовательно ЦП имеет, не проводят времени в привилегированном (ядро) режим.
В первую очередь, существует несколько вещей, которые необходимо понять для интерпретации вывода time
правильно:
time
команда, которую Вы выполняете (потому что существуют несколько),Существует два типа time
команда. Существует встроенная оболочка и существует /usr/bin/time
. Оболочка встроила, тот, который Вы используете, и это принимает значение по умолчанию к показу 3 строк, real
, user
, и sys
. Руководство для time
также упоминания эта та же форма вывода:
-p, --portability Use the following format string, for conformance with POSIX standard 1003.2: real %e user %U sys %S
И если Вы проверяете раздел "FORMATTING THE OUTPUT", мы имеем:
E Elapsed real (wall clock) time used by the process, in [hours:]minutes:seconds. U Total number of CPU-seconds that the process used directly (in user mode), in seconds. S Total number of CPU-seconds used by the system on behalf of the process (in kernel mode), in seconds.
От всей этой информации мы можем заключить, что существует два режима, в которых ЦП может работать - непривилегированный режим и привилегированный режим, и time
управляйте дисплеями, сколько времени ЦП остается в данном режиме делать независимо от того, что Ваша программа/приложение попросила, чтобы ЦП сделал.
Хорошо, таким образом, мы понимаем, что различие - то, что существует непривилегированный режим и привилегированный режим, в котором может работать код. Мы уже можем полагать, что это в основном означает, что программа не использовала привилегированный режим для выполнения некоторых задач. Что это на самом деле означает?
Обратитесь к этому сообщению:
В Привилегированном режиме выполняющийся код имеет полный и неограниченный доступ к используемому оборудованию. Это может выполнить любую инструкцию ЦП и ссылку любой адрес памяти.
И из другого ответа на том же сообщении:
Переключатель от непривилегированного режима до привилегированного режима не сделан автоматически ЦП. ЦП прерван прерываниями (таймеры, клавиатура, ввод-вывод). Когда прерывание происходит, ЦП прекращает выполнять текущую под управлением программу, переключатель к привилегированному режиму, выполняет обработчика прерываний. Этот обработчик сохраняет состояние ЦП, выполняет его операции, восстановите состояние и возвраты к непривилегированному режиму.
Таким образом, это - то, что означает Ваш вывод - не было никакого переключателя к привилегированному режиму, и ЦП не получил прерываний от программы, чтобы сделать так. Это также означает, что Ваш код не имеет ничего, что потребовало бы поднятых полномочий от ЦП
Примечание: это, вероятно, должно быть перефразировано как "не было никакого длинного/примечательного переключателя в привилегированный режим", начиная с выделения памяти с чем-то как malloc()
функция в C потребовала бы переключения в привилегированный режим, но это микроскопические переключатели, которые мы должны были бы действительно исследовать с отладчиком или strace
команда.