Het Gebruik van de Opdracht tijd op Linux

0
348
Fatmawati Achmad Zaenuri/Shutterstock.com

Wil je weten hoe lang een proces loopt en een hele hoop meer? De Linux-opdracht tijd terug time statistieken, waardoor je koel inzicht in de bronnen die worden gebruikt door uw programma ‘ s.

de tijd Heeft Veel Familieleden

Er zijn veel distributies van Linux en andere Unix-achtige operating systemen. Elk van deze heeft een standaard command shell. De meest voorkomende standaard shell in moderne Linux distributies is de bash-shell. Maar er zijn vele anderen, zoals de Z-shell (zsh) en de Korn shell (ksh).

Al deze schelpen nemen hun eigen opdracht tijd, hetzij als een built-in opdracht of als een gereserveerd woord. Wanneer u een type in een terminal venster het shell zal de uitvoering van de interne opdracht in plaats van de GNU tijd binaire die wordt verstrekt als onderdeel van uw Linux-distributie.

We willen gebruik maken van de GNU versie van de tijd, omdat het heeft meer opties en meer flexibel.

Die tijd Zal Lopen?

U kunt controleren welke versie wordt uitgevoerd met behulp van het type opdracht. type zal u laten weten of het shell omgaan met de instructie zelf, met zijn interne routines, of doorgeven aan de GNU binaire.

in een terminal-venster typ het woord typen, een spatie en dan het woord ‘tijd’ en druk op Enter.

typ tijd

We kunnen zien dat in de bash-shell-tijd is een gereserveerd woord is. Dit betekent Bash zal gebruik maken van haar internaltime routines standaard.

typ tijd

In de Z-shell (zsh) tijd is een gereserveerd woord, zodat de interne shell routines zullen worden standaard gebruikt.

typ tijd

In de Korn-shell-tijd is een sleutelwoord. Een interne routine zal worden gebruikt in plaats van de GNU time commando.

GERELATEERD: Wat is ZSH, en Waarom Zou Je Het Gebruiken in Plaats van Bash?

Het uitvoeren van de GNU time Commando

Als de shell op uw Linux-systeem heeft een interne tijd routine die je nodig hebt om duidelijk te zijn indien u gebruik wenst te maken van de GNU tijd binaire. U moet:

  • De hele weg de binaire bestanden, zoals /usr/bin/de tijd. Voer het die opdracht tijd te vinden voor dit pad.
  • Gebruik de opdracht tijd.
  • Gebruik een backslash ‘ ‘ als de tijd.

De die tijd opdracht geeft ons het pad naar het binaire bestand.

We kunnen dit testen door het gebruiken van /usr/bin/de tijd als een opdracht om de lancering van de GNU binaire. Dat werkt. We krijgen een reactie van de opdracht tijd vertellen ons dat we niet een opdracht regel parameters voor het aan het werk op.

Het typen van commando tijd werkt ook, en we krijgen dezelfde informatie over het gebruik van tijd. Het commando vertelt de shell om te negeren van het volgende commando, zodat het verwerkt buitenkant van de schelp.

Met behulp van een – teken voor de naam van de opdracht is dezelfde als opdracht voor de naam van de opdracht.

De eenvoudigste manier om ervoor te zorgen dat u gebruik maakt van de GNU tijd binair is om het gebruik van de backslash optie.

tijd
de tijd

de tijd roept de shell versie van de tijd. de tijd wordt de tijd binair.

Met behulp van De Opdracht tijd

Laten we de tijd een aantal programma ‘ s. We maken gebruik van twee programma ‘ s, genaamd loop1 en loop2. Ze zijn gemaakt van loop1.c en loop2.c. Ze doen niets nuttigs naast het aantonen van de effecten van een type van codering inefficiëntie.

Dit is loop1.c. De lengte van een string is verplicht binnen de twee geneste lussen. De lengte is verkregen van tevoren, buiten de twee geneste lussen.

#include “stdio.h”
#include “string.h”
#include “stdlib.h”

int main (int argc, char* argv[])
{
int i, j, len, count=0;
char szString[]=”hoe-te-geek-hoe-te-geek-hoe-te-geek-hoe-te-geek-hoe-te-geek-hoe-te-geek”;

// de lengte van de snaar een keer, buiten lussen
len = strlen( szString );

for (j=0; j<500000; j++) {

for (i=0; i < len; i++ ) {

als (szString[i] == ‘-‘)
count++;
}
}

printf(“Geteld %d koppeltekensn”, aantal);

exit (0);

} // einde van de

Dit is loop2.c. De lengte van de string is verkregen keer op keer voor elke cyclus van de buitenste lus. Deze inefficiëntie moet te zien zijn in de timing.

#include “stdio.h”
#include “string.h”
#include “stdlib.h”

int main (int argc, char* argv[])
{
int i, j, count=0;
char szString[]=”hoe-te-geek-hoe-te-geek-hoe-te-geek-hoe-te-geek-hoe-te-geek-hoe-te-geek”;

for (j=0; j<500000; j++) {

// aan de lengte van de string elke
// tijd dat de lussen trigger
for (i=0; i < strlen(szString); i++ ) {

als (szString[i] == ‘-‘)
count++;
}
}

printf(“Geteld %d koppeltekensn”, aantal);

exit (0);

} // einde van de

Laat het vuur van de loop1 programma en gebruik de tijd om het meten van de prestaties.

de tijd ./loop1

Laten we nu hetzelfde doen voor loop2.

de tijd ./loop2

Dat is ons gegeven twee sets van de resultaten, maar ze zijn in het echt een lelijk formaat. Kunnen We iets doen dat later, maar laten we kiezen een paar stukjes van de informatie uit de resultaten.

Wanneer programma ‘ s er zijn twee uitvoering modi dat ze zijn overgestapt heen en weer tussen. Dit zijn de zogenaamde user mode en de kernel-modus.

Kort gezegd, een proces in de user-mode kan niet rechtstreeks toegang tot de hardware of verwijzing geheugen buiten haar eigen verdeling. Om toegang te krijgen tot dergelijke middelen, het proces moet verzoeken aan de kernel. Als de kernel keurt het verzoek het proces voert de kernel-modus uitvoering tot de eis is voldaan. Het proces wordt dan overgeschakeld naar de modus user uitvoering.

De resultaten voor loop1 vertel ons dat loop1 besteed 0.09 seconden in de gebruiker-modus. Het bracht nul keer in de kernel-modus of de tijd in de kernel-modus is een te lage waarde te registreren zodra het is afgerond naar beneden. De totaal verstreken tijd is 0,1 seconden. loop1 werd bekroond met een gemiddelde van 89% van de CPU-tijd over de duur van de totale verstreken tijd.

De inefficiënte loop2 programma duurde drie keer langer om uit te voeren. De totaal verstreken tijd is 0,3 seconden. De duur van de verwerking van de tijd in de user-modus is 0.29 seconden. Niets is te registreren voor de kernel-modus. loop2 werd bekroond met een gemiddelde van 96% van de CPU-tijd voor de duur van de run.

De Opmaak Van De Output

U kunt de uitvoer van de tijd met behulp van een format string. De tekenreeks kan tekst bevatten en formaat specificatie. De lijst van formaat specificatie kan worden gevonden op de man pagina voor tijd. Elk formaat specificatie vormt een stuk van de informatie.

Wanneer de snaar wordt gedrukt formaat specificatie worden vervangen door de werkelijke waarden die ze vertegenwoordigen. Bijvoorbeeld, het format specifier voor het percentage van de CPU is de letter P . Om aan te geven naar de tijd dat een format specifier is niet zomaar een gewone brief, een percentage teken is, als %Blz . Laten we gebruik maken van het in een voorbeeld.

De -f (tekenreeks) optie wordt gebruikt om tijd te vertellen dat wat volgt is een format string.

Ons format string is afgedrukt, worden de tekens “Programma:” en de naam van het programma (en een opdracht regel parameters die u doorgeeft aan het programma). Het %C-format specifier staat voor “Naam en command-line argumenten van de opdracht worden vastgesteld”. De n oorzaken de uitgang te verplaatsen naar de volgende regel.

Er zijn een heleboel formaten voorschrijvers en ze zijn hoofdlettergevoelig, dus zorg ervoor dat u ze juist als je doet dit voor jezelf.

Volgende, we gaan voor het afdrukken van de tekens “Total time: “, gevolgd door de waarde van de totale verstreken tijd voor het uitvoeren van het programma (vertegenwoordigd door %E).

We gebruiken n om een andere nieuwe regel. We zullen vervolgens afdrukken van de tekens “Gebruiker-Modus (s) “, gevolgd door de waarde van de CPU-tijd doorgebracht in de user-mode, aangeduid door het %U.

We gebruiken n om een andere nieuwe regel. Deze keer zijn we de voorbereiding voor de kernel tijd waarde. Wij drukken de tekens “Kernel Mode (s) “, gevolgd door het format specifier voor de CPU-tijd doorgebracht in de kernel-modus, dat is %S.

Eindelijk, we gaan voor het afdrukken van de tekens “nCPU: “geef ons een nieuwe lijn en de titel voor deze gegevens zijn waarde. De %P formaat specificatie geeft het gemiddelde percentage van de CPU-tijd gebruikt door de getimed proces.

Het hele format string is verpakt in aanhalingstekens. We kunnen een aantal t tekens te plaatsen tabbladen in de uitvoer als we waren kieskeurig over de uitlijning van de waarden.

de tijd -f “Programma: %Cntotale tijd: %EnUser wijze (n) %UnKernel Modus (s) %SnCPU: %P” ./loop1

Het Verzenden Van De Uitvoer Naar Een Bestand

Het bijhouden van de tijden van de tests die u hebt uitgevoerd u kunt de uitvoer van de tijd naar een bestand. Om dit te doen gebruik je de-o (output) optie. De uitvoer van je programma wordt nog steeds weergegeven in het terminal-venster. Het is alleen de uitgang van de tijd die wordt omgeleid naar het bestand.

Kunnen We de test opnieuw uitvoeren en opslaan van de uitvoer naar de test_results.txt bestand als volgt:

de tijd -o test_results.txt -f “Programma: %Cntotale tijd: %EnUser wijze (n) %UnKernel Modus (s) %SnCPU: %P” ./loop1
kat test_results.txt

De loop1 programma-output is weergegeven in het terminal-venster en de resultaten van de tijd gaan naar de test_results.txt -bestand.

Als u wilt vastleggen van de resultaten in hetzelfde bestand, moet u de-a (toevoegen) de optie als volgt:

de tijd -o test_results.txt -a-f “Programma: %Cntotale tijd: %EnUser wijze (n) %UnKernel Modus (s) %SnCPU: %P” ./loop2
kat test_results.txt

Het moet nu duidelijk zijn waarom we met de %C-format specifier om de naam van het programma in de output van de format string.

En We zijn Uit de tijd

Waarschijnlijk het meest voor programmeurs en ontwikkelaars voor de fine-tuning van hun code, de opdracht tijd is ook nuttig voor iedereen die het ontdekken van een beetje meer over wat er onder de motorkap elke keer dat u start een programma.