The UNIX and Linux Forums  
Olá e boas-vindas de Estados Unidos para o UNIX e Linux Forum! Obrigado por visitar e fazer parte da nossa comunidade global.

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-18-2008
otheus's Avatar
otheus otheus is offline Forum Staff  
Moderador ala Mode
  
 

Join Date: Feb 2007
Local: Innsbruck, Áustria
Mensagens: 1.886
Desde que você não parece seguir as instruções, eu não espero que você o seguinte código referencial. No caso de você fazer, no entanto, e seus resultados são ainda muito inesperado, por favor, tome nota do que aqui.

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[])
{
    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
era era is offline Forum Advisor  
Herder do Inútil Gatos (On Sabático)
  
 

Join Date: Mar 2008
Localização: / lá / é / só / bin / sh
Posts: 3.652
Só para ênfase, os resultados incluem a sobrecarga sobre o início de um grande número de processos, e em cada um deles, imprimindo uma linha de texto para um bloco tamponada dispositivo, e sai do processo. Gargalos em qualquer uma destas operações é muito mais provável para explicar os resultados do que a coisa está a tentar testar.
  #3 (permalink)  
Old 09-19-2008
migurus migurus is offline
Usuário
  
 

Join Date: Sep 2008
Localização: E.U.
Lugares: 49
Eu compilado e executar o código loop ensaio postado por Otheus.

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

Eu não tenho acesso a PIII casa agora, mas como os resultados são idênticos (proporcional), como o que eu vi no meu teste eu acho que não é fundamental para não ter PIII resultados aqui.

No que diz respeito à sobrecarga mencionado pela ERA - Estou consciente de que, uma vez que está estreitamente semelhante situação que estou a avaliar, de modo que um teste válido e não uma superintendência.

Então, alguém tem alguma idéia do que poderia ser o gargalo? ou para onde olhar? Eu realmente aprecio a sua paciência comigo e sua persistência em chegar ao fundo do mesmo.
  #4 (permalink)  
Old 09-19-2008
jim McNAMARA jim mcnamara is offline Forum Staff  
...@...
  
 

Join Date: Feb 2004
Localização: NM
Mensagens: 5.762
Acessando um semáforo - presumindo que não há impasse -, é um acesso direto à memória operação, adicionando uma página inteira ou múltiplos para processar memória tem gerais. Pode envolver um caro chamada: brk (), se não houver memória já está lá.

Depende do que
Código:
size mycode
diz que, no total, arredondado para um mínimo da PAGE_SIZE (mutiple) limite (pilha moldura normalmente fronteira), que pode deixar várias páginas de memória extra. Olha o que é mostrar a atribuir a heap. Como um começo. Você pode chamar sbrk (0) para encontrar o final do processo de memória.

shmget aloca Escombreira na maioria das implementações: / proc / sys / kernel / sh * proc diretórios tenham a memória partilhada informação. kernel configurações controlam a memória partilhada operações.

tente o seguinte:
Código:
gcc -p -g -o otherus otheus.c
otheus.c
grpof otheus
Isso irá mostrar o tempo gasto cum + # chamadas para cada uma das funções chamadas. Você pode ver se / quando existe um problema. Se existir um com Semáforos semget então será muito provavelmente o seu problema - que reparte páginas de memória.
  #5 (permalink)  
Old 09-19-2008
jim McNAMARA jim mcnamara is offline Forum Staff  
...@...
  
 

Join Date: Feb 2004
Localização: NM
Mensagens: 5.762
PS chamada utimes (struct tms *) para real vezes, mais granularidade é CLK_TCK, geralmente muito melhor que o tempo ().

gettimeofday pode ser utilizada para obter parede mesmo tempo com maior precisão também. utimes () retorna clock_t muro tempo.
  #6 (permalink)  
Old 09-20-2008
otheus's Avatar
otheus otheus is offline Forum Staff  
Moderador ala Mode
  
 

Join Date: Feb 2007
Local: Innsbruck, Áustria
Mensagens: 1.886
Citação:
Originally Posted by jim McNAMARA View Post
PS chamada utimes (struct tms *) para real vezes, mais granularidade é CLK_TCK, geralmente muito melhor que o tempo ().

gettimeofday pode ser utilizada para obter parede mesmo tempo com maior precisão também. utimes () retorna clock_t muro tempo.
Jim, utimes () não faz o que você acha que ele faz. Gettimeofday é mais correcto, mas, em seguida, o código é um pouco mais complicado. Microsegundo diferenças não iria produzir as disparidades de desempenho que ele está vendo.
  #7 (permalink)  
Old 09-19-2008
migurus migurus is offline
Usuário
  
 

Join Date: Sep 2008
Localização: E.U.
Lugares: 49
Jim,
Eu nunca tentei perfil antes, então eu tive um problema aqui:
$ Gcc-pg-o tstloop tstloop.c
$ Tstloop
128.205,13 semop / s [0,0]
$ Gprof tstloop
gprof: gmon.out arquivo está faltando call-gráfico de dados

Qualquer idéias?

No que diz respeito à utilização do tempo versus gettimeofday (que, na verdade eu uso) é absolutamente irrelevante, estou a tentar ver quantas vezes por segundo sistema é capaz de criar um processo que seria simplesmente ler um semáforo.

Obrigado.
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 11:04.


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