The UNIX and Linux Forums  


Go Back   Les systèmes UNIX et Linux Forums > Top Forums > High Level Programming
.
google unix.com



High Level Programming Posez vos questions à propos de C, C + +, Java, SQL, et d'autres langages de programmation ici.

Plus d'UNIX et Linux Forum Sujets Vous trouverez peut-être utile
Fil Thread Starter Forum Réponses Last Post
sémaphore raguramtgr UNIX pour les nuls Questions et réponses 7 06-15-2009 10:39 AM
Sémaphore Jaken De programmation et de script Shell 2 04-04-2009 06:10 PM
dmidecode, RAM vitesse \u003d "Current Speed: Unknown" Santi Systèmes de fichiers, disques et mémoire 0 02-16-2006 06:16 AM
Sémaphore vjsony UNIX pour les nuls Questions et réponses 3 04-07-2003 03:06 PM
sémaphore yls177 UNIX pour les nuls Questions et réponses 1 10-09-2002 12:18 AM

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 Recherche sur ce Thread Rating: Thread Rating: 1 votes, 4.00 average. Modes d'affichage
  #1 (permalink)  
Old 09-17-2008
migurus migurus is offline
Registered User
  
 

Join Date: Sep 2008
Lieu: États-Unis
Posts: 49
sémaphore la vitesse d'accès

Je suis une enquête système de verrouillage utilisant des sémaphores. Pour évaluer la vitesse de base du système-je effectuer une boucle d'obtenir certaines informations sur la sémaphore et de l'afficher:

while:; faire. / semshow; done> res.txt

J'ai couru le 3 boîtes - deux analogues modernes HP Xeon boîtes, une course SCO OpenServer 5, l'autre est Fedora 2.6.9, et un vieux PIII boîte moderne sous Linux (ont pas d'info).
Les résultats sont très contre-intuitives:
H / W | OS | avg nombre de pistes bre sec
---- | --- | -------------------------
Xeon | SCO | 1700
Xeon | Fedora | 500
PIII | Linux (distribution récente, inconnu) | 900
Les trois systèmes sont à peu près au ralenti à l'essai du temps.

Je voudrais vous demander, quels seraient les facteurs qui ont fait de surperformer ancienne Unix OS modernes, également, comment se surpasser moderne boîte PIII Xeon boîte dans les mêmes OS. Toute ponters serait appréciée.

Semshow Le programme est très basique, voir la liste ci-dessous:

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 a ces 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  
Modérateur ala mode
  
 

Join Date: Feb 2007
Lieu: Innsbruck, Autriche
Posts: 1886
Voici une réponse: le temps de mesure est bogué. Voir l'homme sur ftime () sous Linux:

Citation:
Cette fonction est obsolète. Ne l'utilisez pas. Si le temps en secondes suffisent, le temps (2) peut
être utilisé; gettimeofday (2) donne microsecondes; clock_gettime (3) donne nanosecondes, mais
n'est pas encore largement disponible.

En vertu de libc4 et libc5 la millitm domaine est significative. Mais au début est buggy et glibc2
il retourne 0; glibc 2.1.1 est de nouveau correct.
  #3 (permalink)  
Old 09-18-2008
migurus migurus is offline
Registered User
  
 

Join Date: Sep 2008
Lieu: États-Unis
Posts: 49
La boîte a Fedora
/lib/tls/libc.so.6 -> libc-2.3.5.so
oui, je suppose que la version 2.3.5.

Mais cela est d'ailleurs le point.

Le nombre de fois pur système d'exécution du programme au sein d'une seconde d'indiquer l'ensemble du système de pouvoir, pour ainsi dire. À mon grand étonnement PIII sous Linux a réussi à fonctionner presque deux fois plus de cycles d'une seconde que withi Xeon cadencé à 3,2 GHz sous Linux. Ensuite, la même Xeon h / w sous de vieux SCO OSR courir deux fois plus vite que PIII boîte.
  #4 (permalink)  
Old 09-18-2008
otheus's Avatar
otheus otheus is offline Forum Staff  
Modérateur ala mode
  
 

Join Date: Feb 2007
Lieu: Innsbruck, Autriche
Posts: 1886
Mais Problème # 1 est que l'on mesure ce la bonne façon. Vous avez un trop grand nombre de dépendances de la bibliothèque, les appels qui n'ont rien à ce que vous essayez de mesure. Prendre toutes les sémaphore code, re-test, et voir ce que vous obtenez fois. Ou de lancer une boucle autour de 10000 x sémaphore. Ensuite, réduire à la seconde près afin que les micro-mistimings ne viennent pas en jouer.

Problème n ° 2 est que les sémaphores exiger l'accès et le bus sont relativement indépendantes de la vitesse du processeur.
  #5 (permalink)  
Old 09-18-2008
migurus migurus is offline
Registered User
  
 

Join Date: Sep 2008
Lieu: États-Unis
Posts: 49
J'ai remplacé les ftime avec gettimeofday et de ré-exécuter, les résultats sont les mêmes.

Pour résumer,
même h / w:
programme sous SCO va 3 fois plus rapide que sous Linux,
même système d'exploitation:
programme fonctionne 2 fois plus rapide que sur de vieux PIII Xeon modernes

Les raisons? des idées?
  #6 (permalink)  
Old 09-18-2008
otheus's Avatar
otheus otheus is offline Forum Staff  
Modérateur ala mode
  
 

Join Date: Feb 2007
Lieu: Innsbruck, Autriche
Posts: 1886
Je suis désolé, mais vous n'avez toujours pas éliminé toutes les "variables loose". Mais votre code sémaphore dans une boucle de 1000 environ et banc de nouveau.
  #7 (permalink)  
Old 09-18-2008
migurus migurus is offline
Registered User
  
 

Join Date: Sep 2008
Lieu: États-Unis
Posts: 49
J'ai simplifié mon programme à la base minimum, il est ipc clé, id est sémaphore et lit les valeurs des sémaphores et puis il affiche sur la ligne (en temps et en sémaphore valeurs). C'est tout ce qu'il fait.

Puis-je exécuter en manière suivante:
$ While:; ne tstshow; done> x.txt
et je frappe clés interrompre après avoir attendu un certain temps.

échantillon de la x.txt contenu du fichier:
1221785538 [1,99]
1221785538 [1,99]
1221785538 [1,99]


Ensuite, pour voir combien de fois a été capable de le faire fonctionner que je fais:
$ Cut-c-12 x.txt | uniq-c

échantillon de la sortie:
616 1221785538
615 1221785539
612 1221785540

Tels que moi, le système est capable d'exécuter ce processus simple à seulement environ 600 fois par seconde.

Juste pour être cohérent, je le répète, les résultats ici:
PIII sous Linux -- 900 fois / sec
Xeon 3.2 sous Linux -- 600 fois / sec
Xeon 3.2 SCO -- 1800 fois / sec
Les systèmes sont inactifs au moment du test.
Comment expliquez-vous les résultats obtenus? J'essaie de trouver un goulet d'étranglement sur l'modernes h / w sous Linux.

S'il vous plaît voir mon nouveau code simplifié ci-dessous:


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

Bookmarks

Thread Tools Recherche sur ce Thread
Recherche sur ce Thread:

Recherche avancée
Modes d'affichage Rate this thread
Rate this thread:

Règles de messages
Tu mai pas de nouvelles discussions: nonoui
Tu mai pas envoyer des réponses:
Tu mai pas envoyer des pièces jointes
Tu mai pas modifier vos messages

BB code est Sur
Smilies sont Sur
[IMG] code est Sur
Le code HTML est Hors tension
Trackbacks sont Sur
Pingbacks sont Sur
Refbacks sont Sur




Toutes les heures sont au format GMT -4. Le temps est maintenant 07:49 PM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Traductions Langue Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
Les systèmes UNIX et Linux Forums Content Copyright © 1993-2009. Tous droits Reserved.Ad de gestion par RedTyger

Content Relevant URLs par vBSEO 3.2.0