The UNIX and Linux Forums  


Go Back   El UNIX y Linux Foros > Arriba Foros > Programación de Alto Nivel
.
google unix.com



Programación de Alto Nivel Plantear preguntas acerca de C, C + +, Java, SQL, y otros lenguajes de programación aquí.

Más UNIX y Linux Foro Temas usted puede encontrar útiles
Hilo Hilo para principiantes Foro Respuestas Último mensaje
semáforo raguramtgr UNIX for Dummies Preguntas y Respuestas 7 06-15-2009 10:39 AM
Semáforo Jaken Programación de scripts de shell y 2 04-04-2009 06:10 PM
dmidecode, velocidad de RAM \u003d "Velocidad actual: Desconocido" Santi Sistemas de ficheros, memoria y discos 0 02-16-2006 06:16 AM
Semáforo vjsony UNIX for Dummies Preguntas y Respuestas 3 04-07-2003 03:06 PM
semáforo yls177 UNIX for Dummies Preguntas y Respuestas 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 vínculo Herramientas de hilo Buscar en este Hilo Calificación: Thread Rating: 1 votes, 4.00 average. Modos de visualización
  #1 (Enlace permanente)  
Old 10-01-2008
migurus migurus is offline
Usuario Registrado
  
 

Fecha: Sep 2008
Ubicación: EE.UU.
Puestos: 49
seguimiento de otheus código

Gracias por el código, cuando me encontré que me presente:
2.6.9/Xeon/3.2 MHz
(3 carreras)
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 carreras)
527.641,18 semop / s (8969900/17) [100]
564.212,50 semop / s (9027400/16) [100]
535.800,00 semop / s (9108600/17) [100]

Veo que la OCS es capaz de hacer aproximadamente 3 veces más semop / s de Linux.

BTW, el H / W es idéntica, creo que he publicado en este looong hilo.

Para Linux, voy a volver a publicar, s / w versiones:
Fedora 2.6.9
gcc - ver.3.4.3
ldd - ver. 2.3.5
glibc - versión 2.3.5
  #2 (Enlace permanente)  
Old 10-01-2008
migurus migurus is offline
Usuario Registrado
  
 

Fecha: Sep 2008
Ubicación: EE.UU.
Puestos: 49
me ayudan a entender el código

Esto es un poco off-topic, pero me temo que no entienden completamente el código.

Mi comprensión de los efectos de la inicial de bucle
Cita:
Publicado originalmente por otheus View Post

Código:
    for (i = 0; i < 1000; ++i) {
        usleep(10);
        last=time(NULL);
        if (last > start) break;
    }
es para iniciar el conjunto de mediciones en el punto de cambio de la segunda. ¿Verdad?

Siguiente,
tenemos dos bucles: en primer lugar ejecutar 8750000 veces, dada la maxloop valor de 1000000,

Entonces corremos bucle hasta 1250000 veces que cada iteración nos 100a para comprobar si el tiempo y segundo cambiado, salimos
Cita:
Publicado originalmente por otheus View Post

Código:
    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;
¿Qué es esta técnica de control para cada enésima iteración? ¿por qué no comprobar la hora cada iteración? es porque ello agregar tiempo extra a muchas llamadas y barroso las mediciones?

Su aclaración se agradece.
  #3 (Enlace permanente)  
Old 10-01-2008
otheus's Avatar
otheus otheus is offline Forum Staff  
Moderador ala Modo
  
 

Fecha: febrero 2007
Lugar: Innsbruck, Austria
Puestos: 1.889
Smile

Cita:
Publicado originalmente por migurus View Post
Esto es un poco off-topic, pero me temo que no entienden completamente el código.
Eso es bastante sobre el tema y una razón por la que envió el código.

Cita:
es para iniciar el conjunto de mediciones en el punto de cambio de la segunda. ¿Verdad?
derecho.

Cita:
¿Qué es esta técnica de control para cada enésima iteración? ¿por qué no comprobar la hora cada iteración? es porque ello agregar tiempo extra a muchas llamadas y barroso las mediciones?
Usted contestó ella. AFAIK cada vez () implica un sistema de llamada de llamada. Creo que hay una mejor manera de manejar esto, pero esta es la primera que vino a la mente.

Yo apreciamos que el código de control. Que soy propenso al fracaso puede ser un modesto eufemismo.
  #4 (Enlace permanente)  
Old 10-06-2008
otheus's Avatar
otheus otheus is offline Forum Staff  
Moderador ala Modo
  
 

Fecha: febrero 2007
Lugar: Innsbruck, Austria
Puestos: 1.889
Revisé los granos. Hubo cambios importantes en 1995 (antes de la versión 2.0), 1998 (antes de la versión 2.4) y, a continuación, de nuevo con la introducción de la "O (1) programador (no seguro). Este es el código - que no ha cambiado desde 2.4 - que no semctl (GETALL):

Código:
        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;

Aquí está el código de 2.0:

Código:
        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;

Cuando se rompen abajo, la única diferencia está en el semlock () convocatoria, que se necesita en los sistemas multi-CPU. Se podría SCO también está igualmente limitada. ¿Por qué no probar una distribución Linux 2.0, como Red Hat 5.2, que usa Linux 2.0.36 (y utiliza el mismo código que el anterior sem). Instalar y punto de referencia el mismo código. Eso sería una gran ayuda para todos nosotros, creo.
  #5 (Enlace permanente)  
Old 10-06-2008
otheus's Avatar
otheus otheus is offline Forum Staff  
Moderador ala Modo
  
 

Fecha: febrero 2007
Lugar: Innsbruck, Austria
Puestos: 1.889
Migurus,

Yo por correo electrónico los mantenedores del código. Esta es una respuesta que obtuve de vuelta de Alan "maddog" Cox (con el permiso para publicar aquí):
Cita:
Cita:
Tal vez puede contribuir a este debate (en relación con SCO vs linux diferencias de rendimiento con semget):
No, pero si tienes un buen caso de prueba utilizando gettimeofday () en lugar de tiempo
a fin de obtener datos en tiempo de alta precisión un bug en bugzilla.kernel.org como
imaginar Ingo Molnar y algunos otros pueden estar interesados.

De alto rendimiento de Linux de código se utiliza en lugar de futex cerraduras cerraduras sys5 pero
aún sería bueno saber si realmente existe una gran diferencia y por qué

Alan
Así que aquí es otra versión utilizando gettimeofday (). No se molestan en publicar los puntos de referencia, a menos que sean significativamente diferentes. Sin embargo, prepararse para bugzilla:

Código:
#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 (Enlace permanente)  
Old 10-06-2008
migurus migurus is offline
Usuario Registrado
  
 

Fecha: Sep 2008
Ubicación: EE.UU.
Puestos: 49
Otheus, yo nunca he tratado con la presentación de informes sobre bugzilla, parece ti me hago muy alejada y me temo que voy a publicar algo que no es pertinente, por lo que si estaría de acuerdo en hacerlo por sí solo, aquí están los resultados de la 2 ª versión de su 'gettimeofday basada en código, que volver a ejecutar 4 veces a la media:

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)


Como puede ver, no hay diferencia de la antigua pruebas.

Sólo para mi aclaración: de alguna manera las personas que participaron en este debate sobre la formulación unix.com así como en otros lugares kerneltrap y están muy preocupados con 2 cosas, que en mi punto de vista no son pertinentes al tema de este hilo: la medición del tiempo de la precisión y la participación funcionamiento de múltiples procesos, depósitos, etc, que los resultados barroso. Yo totalmente de acuerdo con que si SCO vs Linux resultados eran comparables. Pero este no es el caso aquí. SCO es tres veces más rápido, no importa que mi método utilizado o gettimeofday método muy preciso. Con todos los gastos generales está más o menos similares, me parece que se tipo de golpes con rodeos cuando se trata de lograr tener exactitud en la medición (que no duele, de cource!), Pero hizo que el hilo hinchado.

Una vez más, gracias a Otheus de sus sugerencias, en este punto el núcleo de código que muestra señalar que la capacidad de multi-CPU añade una capa de complejidad y no ayuda a la velocidad. Y de su strcmp (kerneltrap foro) recomendaciones para la actualización del núcleo de Linux están bien tomadas.
migurus
  #7 (Enlace permanente)  
Old 10-06-2008
ramen_noodle ramen_noodle is offline Forum Advisor  
Usuario Registrado
  
 

Fecha: diciembre 2007
Localización: Virginia, EE.UU..
Puestos: 251
Sólo por el contraste en un moderno procesador Intel SMP ejecutando Linux 2.6.18 obtener más
a más de un millón de operaciones por segundo.
Sobre esa base, no creo que esto califica como un error .. más de un creciente dolor.
Linux siempre ha sido un proyecto en marcha avante. O a ponerse al día o sufren.
Linus es corto en disculpas por este modelo que he visto.

Código:
1402465.14 semop/s (5000000/3565151)
1409187.85 semop/s (5000000/3548143)
1448182.72 semop/s (5000000/3452603)

En una máquina FreeBSD 6.0 (monoprocesador) el tiempo es interesante ...
Intel (R) Celeron (R) CPU 2.00GHz (1999.94-686-MHz CPU clase)

Código:
501281.02 semop/s (5000000/9974445)
500868.00 semop/s (5000000/9982670)
450727.95 semop/s (5000000/11093166)


Última edición por ramen_noodle; al 10-08-2008 02:43 PM.. Motivo: error de versión del núcleo
Closed Thread

Marcadores

Herramientas de hilo Buscar en este Hilo
Buscar en este Hilo:

Búsqueda avanzada
Modos de visualización Vota a este hilo
Vota a este hilo:

Normas de envío
puede que no nuevo puesto de hilos
puede que no enviar respuestas
puede que no enviar archivos adjuntos
puede que no editar sus puestos

Código BB es Encendido
Emoticones son Encendido
[IMG] código Encendido
Código HTML es Apagado
Trackbacks son Encendido
Pingbacks son Encendido
Refbacks son Encendido




Todas las horas son GMT -4. La hora es 05:02 AM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Traducciones de idiomas Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Estudios
El UNIX y Linux Foros Contenido Copyright © 1993-2009. Todos los derechos Reserved.Ad Gestión por RedTyger

Las direcciones URL de contenido vBSEO 3.2.0