The UNIX and Linux Forums  


Go Back   O UNIX e Linux Forum > Top Fóruns > Alto Nível de programação
.
google unix.com



Alto Nível de programação Post perguntas sobre C, C + +, Java, SQL, e outras linguagens de programação aqui.

Mais UNIX e Linux Fórum Tópicos Você pode achar Helpfull
Fio Thread Starter Fórum Respostas Última postagem
semáforo raguramtgr UNIX para Dummies Perguntas & Respostas 7 06-15-2009 10:39
Semáforo Jaken Programação Shell Script e 2 04-04-2009 06:10
dmidecode, RAM velocidade \u003d "Actual Speed: Desconhecido" Santi Filesystems, Discos e Memória 0 02-16-2006 06:16
Semáforo vjsony UNIX para Dummies Perguntas & Respostas 3 04-07-2003 03:06
semáforo yls177 UNIX para Dummies Perguntas & Respostas 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 Pesquisar este Thread Avaliação: Thread Rating: 1 votes, 4.00 average. Display Modes
  #1 (permalink)  
Old 09-17-2008
migurus migurus is offline
Usuário
  
 

Join Date: Sep 2008
Localização: E.U.
Lugares: 49
semáforo acesso velocidade

Estou investigando algumas bloqueio esquema utilizando Semáforos. Para avaliar sistema básico de velocidade eu executar um loop de obter algumas informações semáforo e exibi-la:

enquanto:; fazer. / semshow; feito> res.txt

Corri presente em 3 caixas - duas semelhantes moderna HP Xeon caixas, executando um SCO OpenServer 5, o outro é o Fedora 2.6.9, e uma velha casa em modernas PIII Linux (não tenho info).
Os resultados são muito contra intuitiva:
H / W | SO | avg número de execuções ber sec
---- | --- | -------------------------
Xeon | SCO | 1700
Xeon | Fedora | 500
PIII | Linux (recente distro, desconhecido) | 900
Todos os três sistemas eram bastante ociosa no ensaio tempo.

Gostaria de perguntar, quais seriam os fatores que torna a antiga Unix para superar moderno SOs, também, como é PIII caixa superam moderna Xeon caixa em semelhante OS. Qualquer ponters seria apreciada.

Semshow O programa é muito básico, veja a lista abaixo:

Código:
 
#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 tem estas DEFS:

Código:
 
#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  
Moderador ala Mode
  
 

Join Date: Feb 2007
Local: Innsbruck, Áustria
Posts: 1.889
Eis uma resposta: o seu tempo a medição é buggy. Veja homem sobre ftime () no Linux:

Citação:
Esta função está obsoleta. Não usá-lo. Se o tempo em segundos é suficiente, o tempo (2) pode
ser utilizados; gettimeofday (2) dá microssegundos; clock_gettime (3), mas dá nanossegundos
ainda não está amplamente disponível.

Sob libc4 e libc5 o millitm campo é significativa. Mas é cedo glibc2 buggy e
retorna 0 houver; glibc 2.1.1 está correta novamente.
  #3 (permalink)  
Old 09-18-2008
migurus migurus is offline
Usuário
  
 

Join Date: Sep 2008
Localização: E.U.
Lugares: 49
O Fedora tem caixa
/lib/tls/libc.so.6 -> libc-2.3.5.so
assim, eu assumo a versão é a 2.3.5.

Mas isso é além do ponto.

O número de vezes que o sistema puro executou o programa dentro de um segundo sistema geral que indicaria o poder, por assim dizer. Para meu espanto PIII no Linux conseguiu executar quase duas vezes mais do que um segundo ciclos withi Xeon 3.2GHz no Linux. Em seguida, o mesmo Xeon h / w sob antiga SCO OSR correr duas vezes mais rápido que PIII caixa.
  #4 (permalink)  
Old 09-18-2008
otheus's Avatar
otheus otheus is offline Forum Staff  
Moderador ala Mode
  
 

Join Date: Feb 2007
Local: Innsbruck, Áustria
Posts: 1.889
Mas Problema # 1 é que você está medindo esse o caminho errado. Você tem muitas dependências na biblioteca solicita que sejam irrelevantes para o que você está tentando medir. Basta tirar todo o semáforo código, a re-teste, e veja o que você começa vezes. Ou, executar um loop 10000 x em torno do semáforo. Em seguida, para baixo à escala mais próxima segunda, para que não sejam microsegundo mistimings entrando em jogo.

Problema # 2 é que Semáforos exigir ônibus de acesso e são relativamente independentes da velocidade de processador.
  #5 (permalink)  
Old 09-18-2008
migurus migurus is offline
Usuário
  
 

Join Date: Sep 2008
Localização: E.U.
Lugares: 49
Eu substituí o ftime com gettimeofday e re-executado, os resultados são os mesmos.

Resumindo novamente,
mesmo H / W:
programa sob SCO corre 3 vezes mais rápido do que em Linux,
mesmo SO:
programa é executado 2 vezes mais rápido do que no antigo PIII Xeon sobre moderno

Qualquer motivo? qualquer idéias?
  #6 (permalink)  
Old 09-18-2008
otheus's Avatar
otheus otheus is offline Forum Staff  
Moderador ala Mode
  
 

Join Date: Feb 2007
Local: Innsbruck, Áustria
Posts: 1.889
Sinto muito, mas você ainda não tenha eliminado todos "solto variáveis". Mas o seu código no semáforo um loop de 1000 ou por aí e banco novamente.
  #7 (permalink)  
Old 09-18-2008
migurus migurus is offline
Usuário
  
 

Join Date: Sep 2008
Localização: E.U.
Lugares: 49
Eu simplificado para o meu programa muito básico mínimo, ela recebe ipc chave, obtém id semáforos e lê valores de Semáforos e, em seguida, ele exibe em linha (tempo e semáforo valores). Isso é tudo que faz.

Então eu executá-lo no seguinte maneira:
$ Simultaneamente:; fazer tstshow; feito> x.txt
Bati-chave e interromper após aguardar por algum tempo.

amostra do ficheiro x.txt conteúdo:
1221785538 [1,99]
1221785538 [1,99]
1221785538 [1,99]


Então, para ver quantas vezes sistema foi capaz de executá-lo eu:
$ Cut-c-12 x.txt | uniq-c

amostra de saída:
616 1221785538
615 1221785539
612 1221785540

Tels-me que o sistema é capaz de executar este processo simples apenas cerca de 600 vezes por segundo.

Só para ser coerente Gostaria de repetir aqui os resultados:
PIII no Linux -- 900 vezes / seg
Xeon 3/2 Linux -- 600 vezes / seg
Xeon 3/2 SCO -- 1800 vezes / seg
Os sistemas são inativo no momento do teste.
Como você explica os resultados eu tenho? Estou tentando achar um ponto de estrangulamento na moderna h / w correr Linux.

Por favor, veja o meu novo código simplificado abaixo:


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

Marcadores

Thread Tools Pesquisar este Thread
Pesquisar este Thread:

Pesquisa Avançada
Display Modes Esta taxa Thread
Esta taxa Thread:

Destacamento Regimento
Você não pode postar novas threads
Você não pode postar respostas
Você não pode postar anexos
Você não pode editar suas postagens

BB code é Ligado
Smilies são Ligado
[IMG] código é Ligado
Código HTML é Desligado
Trackbacks são Ligado
Pingbacks são Ligado
Refbacks são Ligado




Todos os horários são GMT -4. A hora é agora 05:43.


Powered by: vBulletinCopyright © 2000 - 2006, Jelsoft Enterprises Limited. Língua Traduções Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
O UNIX e Linux Fóruns Content Copyright © 1993-2009. Todos os Direitos Reserved.Ad Gestão por RedTyger

Content Relevant URLs por vBSEO 3.2.0