The UNIX and Linux Forums  
Hallo und herzlich Willkommen aus den Vereinigten Staaten, die UNIX-und Linux-Foren! Vielen Dank für Ihren Besuch und die Teilnahme an unserem Global Community.

Go Back   Die UNIX-und Linux-Foren > Top Foren > High-Level-Programmierung
.
Google unix.com



High-Level-Programmierung Post Fragen zu C, C + +, Java, SQL, und andere Programmiersprachen hier.

Mehr UNIX-und Linux-Forum Themen Vielleicht finden Sie hilfreiche
Faden Thread Starter Forum Antworten Last Post
Semaphore raguramtgr UNIX for Dummies Questions & Answers 7 06-15-2009 09:39 AM
Semaphore Jaken Shell Programmierung und Scripting 2 04-04-2009 05:10 PM
dmidecode, RAM-Geschwindigkeit \u003d "Aktuelle Geschwindigkeit: Unbekannt" Santi Dateisysteme, Festplatten und Memory 0 02-16-2006 06:16 AM
Semaphore vjsony UNIX for Dummies Questions & Answers 3 04-07-2003 02:06 PM
Semaphore yls177 UNIX for Dummies Questions & Answers 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 Suche diesen Thread Bewertung: Thread Rating: 1 votes, 4.00 average. Anzeige-Modi
  #1 (permalink)  
Old 09-18-2008
otheus's Avatar
otheus otheus is offline Forum Staff  
Moderator ala-Modus
  
 

Join Date: Feb 2007
Ort: Innsbruck, Österreich
Beiträge: 1884
Da Sie offenbar nicht zu befolgen Sie die Anweisungen, ich erwarte nicht, dass Sie auf den folgenden Code Benchmark. Falls Sie dies tun, aber, und die Ergebnisse sind immer noch weit unerwartet, bitte notieren Sie ihn hier.

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
Ära era is offline Forum Advisor  
Herder sinnlosen Katzen (Am Sabbatical)
  
 

Join Date: März 2008
Location: / es / ist / nur / bin / sh
Beiträge: 3652
Nur zur Betonung, Ihre Ergebnisse der Overhead ab einer großen Anzahl von Prozessen, und in jedem von ihnen, den Druck einer Reihe von Text zu einem gepufferten Block Device, und die Beendigung des Prozesses. Engpässe in jedem dieser Vorgänge sind sehr viel häufiger zu erklären, die Ergebnisse als das, was Sie versuchen zu testen.
  #3 (permalink)  
Old 09-19-2008
migurus migurus is offline
Registrierte Nutzer
  
 

Join Date: Sep 2008
Ort: US
Beiträge: 49
Ich kompiliert und ausgeführt Loop-Test-Code gepostet von Otheus.

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

Ich habe keinen Zugriff auf PIII-Box rechts, aber die Ergebnisse sind identisch (anteilig) als das, was ich in meinem Test Ich denke, es ist nicht entscheidend, nicht die Ergebnisse hier PIII.

So weit wie Overhead, die von Zeit - ich bin mir bewusst, der es, wie es ähnelt Situation, dass ich die Bewertung, so dass es einen gültigen Test-und nicht um eine Kontrolle.

Also, hat jemand eine Idee haben, was den Flaschenhals werden könnte? oder, wo sie suchen müssen? Ich danken Ihnen für Ihre Geduld mit mir und Ihre Ausdauer bei der an der Unterseite der es.
  #4 (permalink)  
Old 09-19-2008
Jim McNamara jim mcnamara is offline Forum Staff  
...@...
  
 

Join Date: Feb 2004
Ort: NM
Posts: 5723
Zugreifen auf eine Semaphore - vorausgesetzt, es gibt keinen Stillstand - es ist eine Direct Memory Access Betrieb, eine ganze Seite oder ein Vielfaches, um Speicher-Overhead. Es kann mit einem teuren Anruf: brk (), wenn kein Speicher ist schon da.

Es hängt davon ab, was
Code:
size mycode
sagt insgesamt, gerundet auf ein Minimum der PAGE_SIZE (mutiple) Grenze (Stack-Frame-Grenze in der Regel), die extra aus mehreren Seiten-Speicher. Sehen Sie, was sich zeigen, die den Haufen. Als Start. Sie können sbrk (0) zu finden, der Ende der Prozess-Speicher.

shmget stellt aus Heap in den meisten Implementierungen: / proc / sys / kernel / sh * proc Verzeichnisse haben Shared-Memory-Informationen. Kernel-Einstellungen Shared-Memory-Operationen.

Versuchen Sie diese:
Code:
gcc -p -g -o otherus otheus.c
otheus.c
grpof otheus
Das wird cum Zeit + # fordert für jeden der Funktionsaufrufe. Sie können sehen, ob / wo gibt es ein Problem. Wenn es eine Email mit Semaphoren semget dann wird Ihr Problem am ehesten - Zuteilung von Seiten der Erinnerung.
  #5 (permalink)  
Old 09-19-2008
Jim McNamara jim mcnamara is offline Forum Staff  
...@...
  
 

Join Date: Feb 2004
Ort: NM
Posts: 5723
PS Call utimes (struct tms *) an die tatsächlichen Zeiten, plus Granularität ist CLK_TCK, die in der Regel besser als time ().

gettimeofday kann verwendet werden, um Wand Zeit noch genau so gut. utimes () gibt clock_t Wand Zeit.
  #6 (permalink)  
Old 09-20-2008
otheus's Avatar
otheus otheus is offline Forum Staff  
Moderator ala-Modus
  
 

Join Date: Feb 2007
Ort: Innsbruck, Österreich
Beiträge: 1884
Zitat:
Zitat von Jim McNamara View Post
PS Call utimes (struct tms *) an die tatsächlichen Zeiten, plus Granularität ist CLK_TCK, die in der Regel besser als time ().

gettimeofday kann verwendet werden, um Wand Zeit noch genau so gut. utimes () gibt clock_t Wand Zeit.
Jim, utimes () nicht tun, was Sie denken, dass es funktioniert. Gettimeofday ist richtig, aber dann wird der Code etwas komplizierter. MICROSECOND Unterschiede würden nicht die Unterschiede in der Leistung ist er zu sehen.
  #7 (permalink)  
Old 09-19-2008
migurus migurus is offline
Registrierte Nutzer
  
 

Join Date: Sep 2008
Ort: US
Beiträge: 49
Jim,
Ich habe nie versucht Profiling vor, so lief ich in einigen Problem hier:
$ Gcc-pg-o tstloop tstloop.c
$ Tstloop
128.205,13 semop / s [0,0]
$ Gprof tstloop
gprof: gmon.out Datei fehlt Call-Graph-Daten

Irgendwelche Ideen?

Was die Nutzung der Zeit vs gettimeofday (die in der Tat die ich benutzt habe) ist irrelevant, ich bin versucht zu sehen, wie viele Male pro Sekunde ist in der Lage, einen Prozess zu schaffen, die einfach eine Semaphore.

Danke.
Closed Thread

Lesezeichen

Thread Tools Suche diesen Thread
Suche diesen Thread:

Erweiterte Suche
Anzeige-Modi Rate this thread
Rate this thread:

Forumregeln
Du möglicherweise nicht neue Themen
Du möglicherweise nicht nach Antworten
Du möglicherweise nicht post-Anlagen
Du möglicherweise nicht bearbeiten Sie Ihre Beiträge

BB-Code ist Auf
Smilies sind Auf
[IMG] Code Auf
HTML-Code ist Aus
Trackbacks sind Auf
Pingbacks sind Auf
Refbacks sind Auf




Alle Zeiten sind GMT -4. Es ist jetzt 09:48 AM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Ltd. Sprachliche Übersetzungen Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
Die UNIX-und Linux-Foren Content © Copyright 1993-2009. Alle Rechte Reserved.Ad Management von RedTyger

Content Relevant URLs durch vBSEO 3.2.0