Я нашел хороший ответ на SO, объясняющий различные поля:
Real is wall clock time - time from start to finish of the call. Это все прошедшее время, включая промежутки времени, используемые другими процессами, и время, которое процесс проводит заблокированным (например, если он ожидает завершения ввода-вывода).
User - количество процессорного времени, проведенного в коде пользовательского режима (вне ядра) в рамках процесса. Это только фактическое процессорное время, используемое при выполнении процесса. Другие процессы и время, проведенное процессом в заблокированном состоянии, не учитываются в этом показателе.
Sys - количество процессорного времени, проведенного в ядре в рамках процесса. Это означает время процессора, затраченное на системные вызовы в ядре, в отличие от библиотечного кода, который все еще выполняется в пространстве пользователя. Как и 'user', это только процессорное время, используемое процессом. Краткое описание режима ядра (также известного как режим "супервизора") и механизма системных вызовов см. ниже.
Итак, в вашем конкретном примере версия python быстрее с точки зрения фактического времени, которое требуется для завершения работы. Однако python-версия проводит больше времени в пространстве ядра, выполняя вызовы функций ядра. Команда bc
практически не проводит времени в пространстве ядра, а все свое время проводит в пространстве пользователя, предположительно выполняя внутренний код bc
.
Для вас это не имеет значения, единственная информация, которая вас действительно интересует, это real
- фактическое время, прошедшее между запуском команды и получением ее результата.
Вы также должны знать, что эти крошечные различия не являются стабильными, они также зависят от загрузки вашей системы и будут меняться каждый раз, когда вы запускаете команду:
$ for i in {1..10}; do ( time python test.py > /dev/null ) 2>&1; done | grep user
user 0m0.056s
user 0m0.052s
user 0m0.052s
user 0m0.052s
user 0m0.060s
user 0m0.052s
user 0m0.052s
user 0m0.056s
user 0m0.048s
user 0m0.056s
$ for i in {1..10}; do ( time echo 6^6^6 | bc > /dev/null ) 2>&1; done | grep user
user 0m0.188s
user 0m0.188s
user 0m0.176s
user 0m0.176s
user 0m0.172s
user 0m0.176s
user 0m0.180s
user 0m0.172s
user 0m0.172s
user 0m0.172s
Я подумал, что мне нужно ввести информацию об источнике в grub. То, что я сделал, очень просто, Я просто набираю Ctrl+X, затем добавляю selinux=0 к отредактированной выбранной версии ядра. Потрачено часов ищем решение и изучаем загрузчик, чтобы отредактировать grub.cfg. Извините, я новичок и не думаю, что selinux=0 просто добавит Ctrl+X.
Вы можете отключить SELinux, добавив параметр ядра
selinux=0
в командную строку ядра.
Если вы больше не можете загрузиться в свою систему из-за -скажем, -проблем с перемаркировкой SELinux, самое простое — временно добавить этот параметр в Grub, т. е. пока отображается меню Grub, выберите нужный пункт меню., войдите в режим редактирования ввода с помощью E , перейдите к строке параметров ядра, переместите курсор в конец, добавьте selinux=0
, а затем нажмите CtrlX , чтобы загрузить это измененное Вход.
После следующей успешной загрузки вы можете навсегда отключить SELinux, либо добавив selinux=0
в конфигурацию параметров ядра grub, либо установив SELINUX=disabled
в /etc/selinux/config
.
В CentOS 7 и более поздних версиях вы можете отредактировать параметры ядра в/etc/default/grub
(с помощью клавиши GRUB_CMDLINE_LINUX=
), а затем вам придется перегенерировать конфигурацию Grub следующим образом:
# grub2-editenv - unset kernelopts
# grub2-mkconfig -o /etc/grub2.cfg
# grub2-mkconfig -o /etc/grub2-efi.cfg