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 10:39 AM
Semaphore Jaken Shell Programmierung und Scripting 2 04-04-2009 06: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 03:06 PM
Semaphore yls177 UNIX for Dummies Questions & Answers 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 Suche diesen Thread Bewertung: Thread Rating: 1 votes, 4.00 average. Anzeige-Modi
  #1 (permalink)  
Old 10-01-2008
migurus migurus is offline
Registrierte Nutzer
  
 

Join Date: Sep 2008
Ort: US
Beiträge: 49
Follow-up auf otheus-Code

Vielen Dank für den Code ein, wenn ich es lief ich dieses:
2.6.9/Xeon/3.2 MHz
(3 Läufe)
129.186,76 semop / s (8784700/68) [100]
129.367,65 semop / s (8797000/68) [100]
129.257,35 semop / s (8789500/68) [100]

SCO/Xeon/3.2 MHz
(3 Läufe)
527.641,18 semop / s (8969900/17) [100]
564.212,50 semop / s (9027400/16) [100]
535.800,00 semop / s (9108600/17) [100]

Ich sehe SCO ist in der Lage, etwa 3 mal mehr semop / s als Linux.

Übrigens, die H / W identisch ist, ich glaube, ich habe es die in diesem Thread looong.

Für Linux, werde ich wieder hier s / w-Versionen:
Fedora 2.6.9
gcc - ver.3.4.3
ldd - Ver. 2.3.5
glibc - Version 2.3.5
  #2 (permalink)  
Old 10-01-2008
migurus migurus is offline
Registrierte Nutzer
  
 

Join Date: Sep 2008
Ort: US
Beiträge: 49
helfen mir, den Code

Dies ist ein wenig off-topic, aber ich fürchte, ich kann nicht ganz verstehen, den Code.

Mein Verständnis für die Zwecke der ersten Schleife
Zitat:
Zitat von otheus View Post
Code:
    for (i = 0; i < 1000; ++i) {
        usleep(10);
        last=time(NULL);
        if (last > start) break;
    }
ist, um die gesamte Messung bei der Änderung der Sekunde. Right?

Nächster,
Wir haben zwei Schleifen: erste Lauf 8750000 mal, da die maxloop Wert 1000000,

Dann laufen wir Schleife bis zu 1250000 mal, wo jeder 100. Iteration wir prüfen, ob und, wenn Zweitrundeneffekte geändert, wir brechen aus
Zitat:
Zitat von otheus View Post
Code:
    stop=time(NULL);
    for (i = maxloop - maxloop/8; i < maxloop; ++i) {
      if ( !(i % estimate) ) {
        last=time(NULL);
        if (last > stop) break;
        stop=last;
      }
 
      /* repeat semaphore opts */
      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=last;
Was ist diese Technik der Kontrolle für jede n-te Iteration? Überprüfen Sie, warum nicht jeder Iteration Zeit? Ist es denn dies würde in den vielen extra Zeit Anrufe und schlammig die Messungen?

Ihre Klarstellung wird gebeten.
  #3 (permalink)  
Old 10-01-2008
otheus's Avatar
otheus otheus is offline Forum Staff  
Moderator ala-Modus
  
 

Join Date: Feb 2007
Ort: Innsbruck, Österreich
Beiträge: 1886
Smile

Zitat:
Zitat von migurus View Post
Dies ist ein wenig off-topic, aber ich fürchte, ich kann nicht ganz verstehen, den Code.
Das ist ganz zum Thema und ein Grund, warum ich den Code gepostet.

Zitat:
ist, um die gesamte Messung bei der Änderung der Sekunde. Right?
richtig.

Zitat:
Was ist diese Technik der Kontrolle für jede n-te Iteration? Überprüfen Sie, warum nicht jeder Iteration Zeit? Ist es denn dies würde in den vielen extra Zeit Anrufe und schlammig die Messungen?
Sie antwortete er. AFAIK jedes Mal ()-Aufruf mit einem Systemcall. Ich glaube, es ist eine bessere Art und Weise der Handhabung, aber dieses ist das erste, das in den Sinn.

Ich schätzen Sie die Überprüfung des Codes. Dass ich bin anfällig für Fehler kann eine bescheidene Untertreibung.
  #4 (permalink)  
Old 10-06-2008
otheus's Avatar
otheus otheus is offline Forum Staff  
Moderator ala-Modus
  
 

Join Date: Feb 2007
Ort: Innsbruck, Österreich
Beiträge: 1886
Ich habe die Kerne. Es wurden größere Änderungen im Jahre 1995 (vor Version 2.0), 1998 (vor Version 2.4), und dann wieder mit der Einführung des "O (1) Scheduler" (nicht sicher). Hier ist der Code - unverändert seit 2.4 -, das semctl (GETALL):
Code:
        sma = sem_lock(semid);
/* check condition omitted */
        nsems = sma->sem_nsems;
        err=-EIDRM;
        if (sem_checkid(sma,semid)) goto out_unlock;
        err = -EACCES;
        if (ipcperms (&sma->sem_perm, (cmd==SETVAL||cmd==SETALL)?S_IWUGO:S_IRUGO))
                goto out_unlock;

	case GETALL:	{
		ushort __user *array = arg.array;
		int i;

		if(nsems > SEMMSL_FAST) {
/* omitted code -- relevant only when nsems > 256 */
		}

		for (i = 0; i < sma->sem_nsems; i++)
			sem_io[i] = sma->sem_base[i].semval;
		sem_unlock(sma);
		err = 0;
		if(copy_to_user(array, sem_io, nsems*sizeof(ushort)))
			err = -EFAULT;
		goto out_free;
Hier ist der Code von 2.0:
Code:
        case GETALL:
                if (ipcperms (ipcp, S_IRUGO)) return -EACCES;
                switch (cmd) {
/* ommitted irrelevant code */
                case GETALL:
                        array = arg.array;
                        i = verify_area (VERIFY_WRITE, array, nsems*sizeof(ushort));
                        if (i)
                                return i;
                }
                break;
/* skipping case statements */

        if (semary[id] == IPC_UNUSED || semary[id] == IPC_NOID)
                return -EIDRM;
/* the next line provides the sem_checkid() call from 2.4/2.6 code */
        if (sma->sem_perm.seq != (unsigned int) semid / SEMMNI)
                return -EIDRM;

        switch (cmd) {
        case GETALL:
                if (ipcperms (ipcp, S_IRUGO))
                        return -EACCES;
                for (i = 0; i < sma->sem_nsems; i++)
                        sem_io[i] = sma->sem_base[i].semval;
                memcpy_tofs (array, sem_io, nsems*sizeof(ushort));
                break;
Wenn du es, der einzige Unterschied liegt in der semlock ()-Aufruf, die erforderlich ist auf Multi-CPU-Systeme. Es könnte sein, SCO ist auch ähnlich begrenzt. Warum nicht Sie versuchen Sie es mit einem Linux 2.0-Distribution wie RedHat 5.2, welches Linux 2.0.36 (und verwendet die gleichen SEM-Code wie oben). Installieren Sie es und Benchmark den gleichen Code. Das wäre eine große Hilfe für alle von uns, denke ich.
  #5 (permalink)  
Old 10-06-2008
otheus's Avatar
otheus otheus is offline Forum Staff  
Moderator ala-Modus
  
 

Join Date: Feb 2007
Ort: Innsbruck, Österreich
Beiträge: 1886
Migurus,

Ich mailte die Verantwortlichen des Codes. Dies ist eine Antwort, die ich zurück von Alan "Maddog" Cox (mit Genehmigung, um hier):
Zitat:
Zitat:
Vielleicht können Sie einen Beitrag zu dieser Diskussion (über SCO vs Linux Performance-Unterschiede mit semget):
Nein, aber wenn Sie haben einen guten Test mit gettimeofday () anstatt Zeit
so erhalten Sie hochpräzise Daten-Datei einen Fehler in bugzilla.kernel.org wie ich
Ingo Molnar vorstellen und ein paar andere daran interessiert sein könnten.

Hochleistungs-Linux-Code verwendet futex sperrt, anstatt sys5 Schleusen, aber es
wäre immer noch schön zu wissen, ob es wirklich so ein großer Unterschied, und warum

Alan
So, hier ist noch eine andere Version mit gettimeofday (). Kümmern Sie sich nicht die Entsendung Benchmarks hier, es sei denn, sie unterscheiden sich erheblich voneinander. Aber sie auf Bugzilla:
Code:
#include <stdio.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <time.h>
#define NSEMS   2

const static long maxseconds = 1000;
main(int argc, char *argv[])
{
    struct timeval tod_start,tod_stop;
    long int start,stop;
    long int maxloop = 5000000;
    long int i;
    int sid;
    key_t key;
    ushort vals[NSEMS] = { 0, 0 };

    if (argc > 1)
      maxloop = atol(argv[1]);
    i = maxloop;

    key = ftok("/tmp",99);

    gettimeofday(&tod_start, NULL);
    while (--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");
      }
    }
    gettimeofday(&tod_stop,NULL);

    start = 1000*1000*(tod_start.tv_sec - maxseconds) + tod_start.tv_usec;
    stop  = 1000*1000*(tod_stop.tv_sec  - maxseconds) + tod_stop.tv_usec;

    printf("%.2f semop/s (%ld/%ld)\n",
      (double)maxloop/(stop-start)*1000*1000, maxloop, stop-start);
}
  #6 (permalink)  
Old 10-06-2008
migurus migurus is offline
Registrierte Nutzer
  
 

Join Date: Sep 2008
Ort: US
Beiträge: 49
Otheus, habe ich nie mit der Berichterstattung über Bugzilla, so scheint es ti mir nicht ganz erfüllen und ich fürchte, ich werde nach etwas nicht relevant, so dass, wenn Sie damit einverstanden, es zu tun haben, hier sind die Ergebnisse ab dem 2. Version Ihre "gettimeofday auf" Code, den ich wieder laufen 4-mal zu bekommen Durchschnitt:

SCO
$ Tmx2
575.108,94 semop / s (5000000/8694005)
$ Tmx2
575.215,00 semop / s (5000000/8692402)
$ Tmx2
575.183,63 semop / s (5000000/8692876)
$ Tmx2
559.832,49 semop / s (5000000/8931243)

Linux:
$ ./tmx2
129.363,77 semop / s (5000000/38650699)
$ ./tmx2
129.428,22 semop / s (5000000/38631452)
$ ./tmx2
129.601,55 semop / s (5000000/38579786)
$ ./tmx2
129.511,76 semop / s (5000000/38606534)


Wie Sie sehen, kein Unterschied von der früheren Tests.

Nur für meine Klarstellung: irgendwie Leute, die an dieser Diskussion über unix.com formuliert sowie auf KernelTrap und anderen Orten waren sehr besorgt, mit 2 Dinge, die in meiner Sicht sind irrelevant für das Thema dieses Threads: Zeit Messgenauigkeit und Beteiligung der Betrieb mehrere Prozesse / shells etc, die die Ergebnisse schlammig. Ich möchte von ganzem Herzen zustimmen, wenn SCO vs Linux Ergebnisse waren vergleichbar. Aber das ist hier nicht der Fall. SCO ist drei mal schneller, egal wir meine Methode oder gettimeofday sehr genaue Methode. Mit all den Overhead ungefähr ähnlich, ich denke, wir waren irgendwie zu schlagen um den heißen Brei herum, wenn wir versuchen zu erreichen, haben in der Mess-Genauigkeit (das tut nicht weh, natürlich!), Aber es machte den Thread aufgebläht.

Auch dank Otheus für Ihre Vorschläge, zu diesem Punkt, den ich den Kernel-Code, den Sie genau zeigt, dass Multi-CPU-Fähigkeit fügt eine Schicht von Komplexität und es hilft nicht die Geschwindigkeit. Ihre und die strcmp (KernelTrap Forum) Empfehlungen zur Verbesserung der Linux-Kernel sind gut getroffen.
migurus
  #7 (permalink)  
Old 10-06-2008
ramen_noodle ramen_noodle is offline Forum Advisor  
Registrierte Nutzer
  
 

Join Date: Dezember 2007
Ort: Virginia, USA.
Beiträge: 251
Nur für den Kontrast auf einem modernen Intel-Prozessor SMP Linux 2.6.18 ich mehr
als einer Million Operationen / Sek.
Auf dieser Basis bin ich nicht glaube, das gilt als Fehler .. mehr einer wachsenden Schmerzen.
Linux war schon immer ein Projekt in der Vorwärtsbewegung. Sie haben entweder bestätigen oder leiden.
Linus ist kurz zu entschuldigen für dieses Modell, dass ich je gesehen habe.
Code:
1402465.14 semop/s (5000000/3565151)
1409187.85 semop/s (5000000/3548143)
1448182.72 semop/s (5000000/3452603)
Auf einem FreeBSD 6.0-Maschine (Uniprozessor) die Zeit ist interessant ...
Intel (R) Celeron (R) CPU 2.00GHz (1999,94 MHz-CPU-686-Klasse)
Code:
501281.02 semop/s (5000000/9974445)
500868.00 semop/s (5000000/9982670)
450727.95 semop/s (5000000/11093166)

Zuletzt bearbeitet von ramen_noodle; am 10-08-2008 02:43 PM.. Grund: Tippfehler auf Kernel-Version
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 08:13 PM.


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