The UNIX and Linux Forums  


Go Back   UNIX og Linux Forums > Top Forums > High Level Programmering
.
google unix.com



High Level Programmering Post spørsmål om C, C + +, Java, SQL og andre programmeringsspråk her.

Mer UNIX og Linux Forum Emner Du kan finne nyttig
Tråd Tråd startet Forum Svar Siste innlegg
semaforen raguramtgr UNIX for Dummies Spørsmål og svar 7 06-15-2009 10:39
Semaforen Jaken Shell programmering og Skripting 2 04-04-2009 06:10
dmidecode, RAM hastighet \u003d "Nåværende Speed: Ukjent" Santi Filsystemer, disker og Minne 0 02-16-2006 06:16
Semaforen vjsony UNIX for Dummies Spørsmål og svar 3 04-07-2003 03:06
semaforen yls177 UNIX for Dummies Spørsmål og svar 1 10-09-2002 12:18

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øk i denne tråden Vurdering: Thread Rating: 1 votes, 4.00 average. Visningsmoduser
  #1 (permalink)  
Old 09-17-2008
migurus migurus is offline
Registrert bruker
  
 

Bli Dato: Sep 2008
Beliggenhet: USA
Innlegg: 49
semaforen tilgang hastighet

Jeg undersøkte litt låsing ordningen bruker semaphores. Å vurdere grunnleggende system fart kjører jeg en løkke til å få noen semaforen info og vise det:

mens:; gjøre. / semshow; gjort> res.txt

Jeg kjørte dette på 3 bokser - to lignende moderne HP Xeon bokser, en kjører SCO OpenServer 5, den andre er Fedora 2.6.9, og en gammel PIII boksen under moderne Linux (har ingen info).
Resultatene er svært counter intuitive:
H / W | OS | Gj.sn. antall kjører BER sec
---- | --- | -------------------------
Xeon | SCO | 1700
Xeon | Fedora | 500
PIII | Linux (siste distro, ukjent) | 900
Alle de tre maskinene var ganske mye inaktiv på test kjøring.

Jeg vil gjerne spørre, hva ville være faktorer som gjør gamle Unix til resultater moderne OSes også, hvordan komme PIII boksen enn moderne Xeon boksen under lignende OS. Eventuelle ponters ville være verdsatt.

Den semshow programmet er helt grunnleggende, se liste under:

Code:
 
#include <stdio.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include  <sys/timeb.h>
#include <time.h>
#include "semlib.h"
#define MODE_CREATE     0
#define MODE_REMOVE     1
key_t   IPCKEY;
main(int argc, char *argv[])
{
  int   sid, i;
  pid_t last_rpid, last_wpid;
  char  dbuf[80];
  union semun           arg;
  unsigned short        vals[NSEMS];
  struct timeb tb;
  struct tm *tp;
        if((IPCKEY = get_ipc_key()) == -1)
        {
                errexit("Can Not Obtain IPC Key");
        }
        if((sid = semget(IPCKEY, NSEMS, 0)) == -1)
        {
                errexit("Can Not Get Semaphore ID");
        }
        memset(vals, 0, sizeof(vals));
        arg.array = &vals[0];
        if(semctl(sid, NSEMS, GETALL, arg) == -1)
        {
                errexit("Can Not Get Semaphore Values");
        }
        if((last_rpid = semctl(sid, RDLOCK, GETPID)) == -1)
        {
                errexit("Can Not Get Semaphore R-Pid");
        }
        if((last_wpid = semctl(sid, WRLOCK, GETPID)) == -1)
        {
                errexit("Can Not Get Semaphore W-Pid");
        }
        ftime(&tb);
        tp = localtime(&tb.time);
        strftime(dbuf, sizeof(dbuf) - 1, "%T", tp);
        printf("%12li.%03i %s  RD:[%i]  WR:[%i] %i/%i\n",
                tb.time, tb.millitm, dbuf, 
                vals[RDLOCK], vals[WRLOCK],
                last_rpid, last_wpid);
        exit(0);
}

semlib.h har disse defs:

Code:
 
#define NSEMS   2
#define RDLOCK  0
#define WRLOCK  1
union   semun   {
        int             val;
        struct semid_ds *buf;
        unsigned short  *array;
};

  #2 (permalink)  
Old 09-18-2008
otheus's Avatar
otheus otheus is offline Forum Staff  
Moderator ala Mode
  
 

Bli Date: Feb 2007
Beliggenhet: Innsbruck, Østerrike
Innlegg: 1886
Her er ett svar: tidssoneinnstillingen målingen er vognen. Ser man på ftime () under Linux:

Sitat:
Denne funksjonen er foreldet. Ikke bruker den. Hvis tiden i sekunder tilstrekkelig, tid (2) kan
brukes; gettimeofday (2) gir microseconds; clock_gettime (3) gir nanoseconds men
er ennå ikke allment tilgjengelig.

Under libc4 og libc5 den millitm feltet er meningsfylt. Men tidlig glibc2 er vognen og
returnerer 0 der; glibc 2.1.1 er riktig igjen.
  #3 (permalink)  
Old 09-18-2008
migurus migurus is offline
Registrert bruker
  
 

Bli Dato: Sep 2008
Beliggenhet: USA
Innlegg: 49
The Fedora boksen har
/lib/tls/libc.so.6 -> libc-2.3.5.so
så jeg antar det versjon 2.3.5.

Men det er i tillegg til punktet.

Ren rekke ganger system kjørte programmet innen andre skulle tilsi totale systemets makt, så å si. Til min astonishment PIII under linux klarte å kjøre nesten dobbelt så mange sykluser withi et sekund enn Xeon 3.2GHz under linux. Deretter samme Xeon h / w under gamle SCO OSR løpe dobbelt så fort som PIII boksen.
  #4 (permalink)  
Old 09-18-2008
otheus's Avatar
otheus otheus is offline Forum Staff  
Moderator ala Mode
  
 

Bli Date: Feb 2007
Beliggenhet: Innsbruck, Østerrike
Innlegg: 1886
Men Problem nr. 1 er at du måle dette på feil måte. Du har for mange avhengigheter på biblioteket samtaler som er irrelevant i forhold til hva du prøver å måle. Ta ut alle semaforen koden, re-test, og se hva tid du får. Eller kjøre en 10.000 x løkke rundt semaforen. Deretter skalere ned til nærmeste andre slik at microseconds mistimings ikke komme i lek.

Problem nr. 2 er at semaphores krever buss-tilgang og er relativt uavhengig av prosessorhastigheten.
  #5 (permalink)  
Old 09-18-2008
migurus migurus is offline
Registrert bruker
  
 

Bli Dato: Sep 2008
Beliggenhet: USA
Innlegg: 49
Jeg erstattet ftime med gettimeofday og kjør, resultatene er de samme.

For å oppsummere igjen
samme t / m:
program under SCO kjører 3 ganger raskere enn under Linux,
samme OS:
Programmet kjøres 2 ganger raskere på gamle PIII enn på moderne Xeon

Noen grunner? noen ideer?
  #6 (permalink)  
Old 09-18-2008
otheus's Avatar
otheus otheus is offline Forum Staff  
Moderator ala Mode
  
 

Bli Date: Feb 2007
Beliggenhet: Innsbruck, Østerrike
Innlegg: 1886
Jeg beklager, men du fortsatt ikke har eliminert alle "løs variabler". Men semaforen koden i en sløyfe på 1000 eller så og benken igjen.
  #7 (permalink)  
Old 09-18-2008
migurus migurus is offline
Registrert bruker
  
 

Bli Dato: Sep 2008
Beliggenhet: USA
Innlegg: 49
Jeg forenklet min programmet til helt grunnleggende minimum, det blir IPC tasten, får semaforen id og leser verdier av semaphores og så utganger på linje (tid og semaforen verdier). Det er alt den gjør.

Da kjører jeg det på følgende måte:
$ Mens:; gjøre tstshow; gjort> x.txt
og jeg traff avbruddsordrelinje tasten etter å vente i noen tid.

utvalg av x.txt fil innhold:
1221785538 [1,99]
1221785538 [1,99]
1221785538 [1,99]


Så å se hvor mange ganger systemet var i stand til å kjøre det jeg gjør:
$ Cut-c-12 x.txt | Unike-c

eksempel på utdataene:
616 1221785538
615 1221785539
612 1221785540

Det tels meg systemet er i stand til å kjøre denne enkle prosessen bare omtrent 600 ganger per sekund.

For å være konsekvente ville jeg gjenta resultatene her:
PIII under Linux -- 900 ganger / sek
Xeon 3.2 Linux -- 600 ganger / sek
Xeon 3.2 SCO -- 1800 ganger / sek
Er inaktiv på tidspunktet for test.
Hvordan vil du forklare resultatene jeg fikk? Jeg prøver å finne en flaskehals på moderne h / w kjører Linux.

Se mine nye forenklet koden under:


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[])
{
  int           sid;
  ushort        vals[NSEMS] = {0, 0};
        if((sid = semget(get_ipc_key(), NSEMS, 0)) == -1)
        {
                errexit("Can Not Get Semaphore ID");
        }
        if(semctl(sid, NSEMS, GETALL, vals) == -1)
        {
                errexit("Can Not Get Semaphore Values");
        }
        printf("%12li [%i,%i]\n", time(NULL), vals[0], vals[1]);
        exit(0);
}

Closed Thread

Hugseliste

Thread Tools Søk i denne tråden
Søk i denne tråden:

Avansert søk
Visningsmoduser Ranger denne tråden
Ranger denne tråden:

Innleggsaktivitet Regler
Du kanskje ikke poste nye tråder
Du kanskje ikke poste svar
Du kanskje ikke post vedlegg
Du kanskje ikke redigere innleggene dine

BB-kode er
Smilefjes er
[IMG] koden
HTML-koden Av
Pingbacks er
Refbacks er




Alle klokkeslett er GMT -4. Nå er klokken 02:13.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Language Translations Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX og Linux Forums Content Copyright © 1993-2009. All Rights Reserved.Ad Management by RedTyger

Content Relevant nettadresser av vBSEO 3.2.0