Како користити команду за време на Линуку

Желите да знате колико дуго траје процес и још много тога? Линук команда тиме враћа статистику времена, дајући вам сјајан увид у ресурсе које користе ваши програми.

време има много рођака

Постоји много Линук дистрибуција и различитих оперативних система сличних Уник-у. Сваки од њих има подразумевану командну шкољку. Најчешћа подразумевана шкољка у модерним Линук дистрибуцијама је басх схелл. Али постоје многе друге, као што су З шкољка (зсх) и Корн шкољка (ксх).

Све ове шкољке укључују сопствену команду времена, било као а уграђени команду или као а резервисана реч. Када унесете време у прозор терминала, љуска ће извршити своју интерну команду уместо да користи ГНУ бинарни програм времена који је обезбеђен као део ваше Линук дистрибуције.

Желимо да користимо ГНУ верзију времена јер има више Опције и флексибилнији је.

У које време ће потрчати?

Можете проверити која ће се верзија покренути помоћу команде типе. типе ће вас обавестити да ли ће љуска сама обрађивати вашу инструкцију, са својим интерним рутинама, или ће је проследити ГНУ бинарном систему.

у прозору терминала откуцајте тип речи, размак, а затим реч време и притисните Ентер.

type time

Можемо видети да је у басх схелл-у време резервисана реч. То значи да ће Басх подразумевано користити своје интерне рутине.

type time

У З љусци (зсх) време је резервисана реч, тако да ће се интерне схелл рутине користити подразумевано.

type time

У Корн љусци време је кључна реч. Уместо ГНУ временске команде користиће се интерна рутина.

Покретање ГНУ тиме команде

Ако љуска на вашем Линук систему има интерну временску рутину, мораћете да будете експлицитни ако желите да користите ГНУ временску бинарност. Морате или:

Наведите целу путању до бинарне датотеке, као што је /уср/бин/тиме. Покрените команду вхицх тиме да пронађете ову путању.
Користите време команде.
Користите обрнуту косу црту као време.

  11 најбоље оцењених апликација за фотографије за пасош за иПхоне да бисте рекли сир и путовали лако

Команда вхицх тиме нам даје пут до бинарне датотеке.

Ово можемо тестирати коришћењем /уср/бин/тиме као команде за покретање ГНУ бинарне датотеке. То ради. Добијамо одговор од команде времена која нам говори да нисмо дали никакве параметре командне линије на којима би радила.

Унос командног времена такође функционише, и добијамо исте информације о коришћењу од времена. Команда команде говори љусци да игнорише следећу команду тако да се она обрађује изван љуске.

Коришћење знака испред назива команде је исто као и коришћење команде испред назива команде.

Најједноставнији начин да се уверите да користите ГНУ временску бинарну датотеку је да користите опцију обрнуте косе црте.

time
time

време позива љуску верзију времена. време користи временску бинарност.

Коришћење команде за време

Хајде да одредимо време за неке програме. Користимо два програма која се зову лооп1 и лооп2. Направљени су од лооп1.ц и лооп2.ц. Они не раде ништа корисно осим што показују ефекте једне врсте неефикасности кодирања.

Ово је лооп1.ц. Дужина стринга је потребна унутар две угнежђене петље. Дужина се добија унапред, изван две угнежђене петље.

#include "stdio.h"
#include "string.h"
#include "stdlib.h"

int main (int argc, char* argv[])
{
 int i, j, len, count=0;
 char szString[]="how-to-geek-how-to-geek-how-to-geek-how-to-geek-how-to-geek-how-to-geek";

 // get length of string once, outside of loops
 len = strlen( szString );  

 for (j=0; j

This is loop2.c. The length of the string is obtained time after time for every cycle of the outer loop. This inefficiency ought to show up in the timings.

#include "stdio.h"
#include "string.h"
#include "stdlib.h"

int main (int argc, char* argv[])
{
 int i, j, count=0;
 char szString[]="how-to-geek-how-to-geek-how-to-geek-how-to-geek-how-to-geek-how-to-geek";

 for (j=0; j

Let’s fire up the loop1 program and use time to measure its performance.

time ./loop1

Сада урадимо исто за петљу2.

time ./loop2

То нам је дало два скупа резултата, али они су у заиста ружном формату. Можемо нешто да урадимо поводом тога касније, али хајде да изаберемо неколико делова информација из резултата.

Када се програми покрећу, постоје два начина извршавања између којих се пребацују напред и назад. Они се зову кориснички режим и режим кернела.

Укратко речено, процес у корисничком режиму не може директно да приступи хардверу или референтној меморији ван своје сопствене алокације. Да би добио приступ таквим ресурсима, процес мора да упути захтеве кернелу. Ако кернел одобри захтев, процес улази у извршење у режиму кернела све док захтев није задовољен. Процес се затим враћа на извршавање корисничког режима.

Резултати за петљу1 нам говоре да је петља 1 провела 0,09 секунди у корисничком режиму. Или је провео нула времена у режиму језгра или је време у режиму кернела прениска вредност да би се регистровала када се заокружи наниже. Укупно протекло време је 0,1 секунду. петљи1 је додељено у просеку 89% ЦПУ времена током трајања свог укупног протеклог времена.

Неефикасном програму лооп2 било је потребно три пута дуже да се изврши. Његово укупно протекло време је 0,3 секунде. Трајање времена обраде у корисничком режиму је 0,29 секунди. Ништа се не региструје за режим кернела. лооп2 је добио у просеку 96% ЦПУ времена за време свог рада.

Форматирање излаза

Можете да прилагодите излаз из времена користећи низ формата. Низ формата може да садржи текст и спецификације формата. Листа спецификација формата може бити налази на ман страници за време. Сваки од спецификација формата представља део информације.

Када се стринг одштампа, спецификације формата се замењују стварним вредностима које представљају. На пример, спецификација формата за проценат ЦПУ-а је слово П. Да бисте указали на време да спецификација формата није само обично слово, додајте му знак процента, као %П. Хајде да га употребимо на примеру.

Опција -ф (стринг формата) се користи да каже времену да је оно што следи низ формата.

Наш низ формата ће одштампати знакове „Програм:“ и назив програма (и све параметре командне линије које проследите програму). Спецификатор %Ц формата је скраћеница за „Име и аргументи командне линије команде која се временски одређује“. н доводи до померања излаза у следећи ред.

Постоји много спецификација формата и они су осетљиви на велика и мала слова, па се уверите да их уносите исправно када ово радите за себе.

Затим ћемо одштампати знакове „Укупно време:“ праћене вредношћу укупног протеклог времена за ово покретање програма (представљено са %Е).

Користимо н да дамо још једну нову линију. Затим ћемо одштампати знакове „Кориснички режим (с)“, након чега следи вредност ЦПУ времена проведеног у корисничком режиму, означено са %У.

Користимо н да дамо још једну нову линију. Овог пута се припремамо за вредност времена кернела. Штампамо знакове „Кернел Моде(с)“, након чега следи спецификација формата за ЦПУ време проведено у режиму кернела, а то је %С.

Коначно, одштампаћемо знакове „нЦПУ: ” да бисмо добили нови ред и наслов за ову вредност података. Спецификатор формата %П ће дати просечан проценат ЦПУ времена које користи временски ограничени процес.

Цео низ формата је умотан у наводнике. Могли смо да укључимо неке т знакове да бисмо поставили табулаторе у излаз да смо били забринути око поравнања вредности.

time -f "Program: %CnTotal time: %EnUser Mode (s) %UnKernel Mode (s) %SnCPU: %P" ./loop1

Слање излаза у датотеку

Да бисте водили евиденцију о временима тестова које сте спровели, можете повремено послати излаз у датотеку. Да бисте то урадили, користите опцију -о (излаз). Излаз из вашег програма ће и даље бити приказан у прозору терминала. То је само излаз из времена који се преусмерава на датотеку.

Можемо поново да покренемо тест и сачувамо излаз у датотеци тест_ресултс.ткт на следећи начин:

time -o test_results.txt -f "Program: %CnTotal time: %EnUser Mode (s) %UnKernel Mode (s) %SnCPU: %P" ./loop1
cat test_results.txt

Излаз програма лооп1 се приказује у прозору терминала, а резултати од времена иду у датотеку тест_ресултс.ткт.

Ако желите да снимите следећи скуп резултата у истој датотеци, морате користити опцију -а (додати) на следећи начин:

time -o test_results.txt -a -f "Program: %CnTotal time: %EnUser Mode (s) %UnKernel Mode (s) %SnCPU: %P" ./loop2
cat test_results.txt

Сада би требало да буде јасно зашто смо користили спецификацију формата %Ц да бисмо укључили име програма у излаз из низа формата.

И истекло нам је време

Вероватно од највише користи програмерима и програмерима за фино подешавање свог кода, команда тиме је такође корисна за свакога ко жели да открије нешто више о томе шта се дешава испод хаубе сваки пут када покренете програм.