The UNIX and Linux Forums  
Hej og Velkommen fra USA til UNIX og Linux Forums! Tak for dit besøg og deltager i vores globale samfund.

Go Back   UNIX og Linux Forums > Top Forums > Højtstående Programmering
.
google unix.com



Højtstående Programmering Post spørgsmål om C, C + +, Java, SQL, og andre programmerings sprog her.

Mere UNIX og Linux Forum Emner du måske kan finde Helpful
Tråd Thread Starter Forum Svar Last Post
Semaforens raguramtgr UNIX for dummyer Spørgsmål & svar 7 06-15-2009 09:39 AM
Semaforens Jaken Shell Programmering og Scripting 2 04-04-2009 05:10 PM
dmidecode, RAM hastighed \u003d "Nuværende Hastighed: Ukendt" Santi Filsystemer, disketter og Hukommelse 0 02-16-2006 06:16 AM
Semaforens vjsony UNIX for dummyer Spørgsmål & svar 3 04-07-2003 02:06 PM
Semaforens yls177 UNIX for dummyer Spørgsmål & svar 1 10-08-2002 11:18 PM

Closed Thread
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
LinkBack Thread Tools Søg denne tråd Karakter: Thread Rating: 1 votes, 4.00 average. Display Modes
  #1 (permalink)  
Old 09-18-2008
otheus's Avatar
otheus otheus is offline Forum Staff  
Redaktør ala Mode
  
 

Join Date: Feb 2007
Sted: Innsbruck, Østrig
Posts: 1.886
Da du ikke synes at følge instruktionerne, jeg forventer ikke, at De benchmark følgende kode. Hvis du gør, og dine resultater er generelt meget uventet, skal du gøre et notat om det her.

Code:
#include <stdio.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <time.h>
#define NSEMS   2
main(int argc, char *argv[])
{
    time_t start,stop;
    long int i;
    int sid;
    key_t key;
    ushort vals[NSEMS] = { 0, 0 };

    key = ftok("/tmp",99);
    start=time(NULL);
    for (i = 0; i < 5000000; i++) {
      if ((sid = semget(key, NSEMS, IPC_CREAT | 0777)) == -1) {
          perror("Can Not Get Semaphore ID");
      }
      if (semctl(sid, NSEMS, GETALL, vals) == -1) {
          perror("Can Not Get Semaphore Values");
      }
    }
    stop=time(NULL);
    printf("%.2f semop/s [%i,%i]\n", (double)i/(stop-start), vals[0], vals[1]);
}
  #2 (permalink)  
Old 09-19-2008
epoke era is offline Forum Advisor  
Herder af Useless Cats (On Sabbatical)
  
 

Join Date: Mar 2008
Location: / der / er / kun / bin / sh
Stillinger: 3652
Bare for vægt, dine resultater omfatter overhead ved at oprette en lang række processer, og i hver af dem, trykning en linje med tekst til en bufferfunktion blok enhed, og udsejlingsdato processen. Flaskehalse i nogen af disse operationer er meget mere tilbøjelige til at forklare de resultater, end de ting, du forsøger at teste.
  #3 (permalink)  
Old 09-19-2008
migurus migurus is offline
Registreret Bruger
  
 

Join Date: Sep 2008
Beliggenhed: USA
Stillinger: 49
Jeg kompileret og køre loop afprøvningsregler Indsendt af Otheus.

Xeon / SCO resultater: 555.555,56 semop / s [0,0]
Xeon / Linux resultater: 128.205,13 semop / s [0,0]

Jeg har ikke adgang til PIII kassen lige nu, men da resultaterne er samme (proportionalberegning) som det, jeg så i min test Jeg tror det ikke er afgørende ikke at have PIII resultater her.

Så vidt overhead nævnt af Era - Jeg er klar over det, da den er tæt ligner situationen, at jeg evaluering, så det en gyldig test og ikke en forglemmelse.

Så Er der nogen har en idé om, hvad den flaskehals, kan være? eller hvor kan man se? Jeg virkelig sætter pris på din tålmodighed med mig og din vedholdenhed med at komme til bunds i det.
  #4 (permalink)  
Old 09-19-2008
jim McNamara jim mcnamara is offline Forum Staff  
...@...
  
 

Join Date: Feb 2004
Beliggenhed: NM
Indlæg: 5.748
Adgang til en Semaforens - hvis der ikke er nogen dødvande - det er en Direct Memory Access operation, der tilføjer en hel side eller multipla at behandle hukommelse har overhead. Det kan medføre en dyrere opkald: brk (), hvis ingen hukommelse er der allerede.

Det afhænger af, hvad
Code:
size mycode
siger i alt, der rundes op til et minimum af PAGE_SIZE (mutiple) grænseforholdene (stack frame grænseforholdene normalt), som kan efterlade ekstra flere sider i hukommelsen. Ser på, hvad der viser, der skal afsættes til bunke. Som en begyndelse. Du kan ringe sbrk (0) at finde i slutningen af processen hukommelse.

shmget tildeler fra bunke i de fleste implementeringer: / proc / sys / kernel / sh * proc abonnentfortegnelser har delt hukommelse oplysninger. kerne-indstillinger kontrol delt hukommelse operationer.

prøv dette:
Code:
gcc -p -g -o otherus otheus.c
otheus.c
grpof otheus
Det vil vise cum tid + # opfordrer til hver af funktionen opkald. Du kan se, om / hvor der er et problem. Hvis der er ét med semaforer derefter semget bliver dit mest sandsynlige problem - tildeling af sider i hukommelsen.
  #5 (permalink)  
Old 09-19-2008
jim McNamara jim mcnamara is offline Forum Staff  
...@...
  
 

Join Date: Feb 2004
Beliggenhed: NM
Indlæg: 5.748
PS opkald utimes (struct TMS *) til de faktiske tidspunkter, plus granularitetskravene er CLK_TCK, normalt måde bedre end tid ().

gettimeofday kan bruges til at få væggen tid endnu mere præcist som godt. utimes () returnerer clock_t væg tid.
  #6 (permalink)  
Old 09-20-2008
otheus's Avatar
otheus otheus is offline Forum Staff  
Redaktør ala Mode
  
 

Join Date: Feb 2007
Sted: Innsbruck, Østrig
Posts: 1.886
Citat:
Oprindeligt Indsendt af jim McNamara View Post
PS opkald utimes (struct TMS *) til de faktiske tidspunkter, plus granularitetskravene er CLK_TCK, normalt måde bedre end tid ().

gettimeofday kan bruges til at få væggen tid endnu mere præcist som godt. utimes () returnerer clock_t væg tid.
Jim, utimes () ikke gør, hvad du tror, at det gør. Gettimeofday er mere korrekt, men derefter koden er en smule mere kompliceret. Microsecond forskelle vil ikke producere forskelle i resultater, han ser.
  #7 (permalink)  
Old 09-19-2008
migurus migurus is offline
Registreret Bruger
  
 

Join Date: Sep 2008
Beliggenhed: USA
Stillinger: 49
Jim,
Jeg har aldrig prøvet profilering før, så jeg løb ind i nogle problemer her:
$ Gcc-pg-o tstloop tstloop.c
$ Tstloop
128.205,13 semop / s [0,0]
$ Gprof tstloop
gprof: gmon.out fil mangler call-graf data

Nogen idéer?

Hvad angår brugen af tid vs gettimeofday (som i virkeligheden jeg gjorde brug) er helt irrelevant, jeg forsøger at se, hvor mange gange i sekundet system er i stand til at skabe en proces, som blot ville læse en Semaforens.

Tak.
Closed Thread

Bogmærker

Thread Tools Søg denne tråd
Søg denne tråd:

Avanceret søgning
Display Modes Bedøm denne tråd
Bedøm denne tråd:

Udstationering Regler
Du kan ikke post nye tråde
Du kan ikke post svar
Du kan ikke post vedhæftede filer
Du kan ikke redigere dine indlæg

BB-kode er
Smilies er
[IMG] koden er
HTML-koden er Slukket
Trackbacks er
Pingbacks er
Refbacks er




Alle tidspunkter er GMT -4. Den tid er nu 03:34 AM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Oversættelser Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX og Linux Forums Content Copyright © 1993-2009. Alle rettigheder Reserved.Ad Management ved RedTyger

Content Relevant webadresser ved vBSEO 3.2.0