Просмотр сообщений
Страниц: 1 ... 40 41 [42]
616  Разработка / Программирование под QNX 4.x / Socket communication : Мая 24, 2003, 10:28:00 pm
обычно сервер пассивная сущность, т.е. ему передают запрос, а он уже отправляет ответ, а не наоборот.
кстати, а что в это время делает parent? Вы ведь создаете другой процесс через fork,а соответственно файловые дескрипторы шарятся между двумя процессами.
617  Разработка / Программирование под QNX 4.x / netstat -s : Мая 24, 2003, 10:23:00 pm
в qnx4 я структуру struct if_data не нашел.
618  Разработка / Программирование под QNX 4.x / shmem performance : Мая 19, 2003, 06:30:00 pm
Проблема разрешилась, оказалось такой эффект дает обращение к невыравненным данным в памяти.
619  Разработка / Программирование под QNX 4.x / HTTP1.1: Запрос GET : Мая 19, 2003, 01:07:00 pm
Попробуй все то-же самое проделать в telnet-е. если и там будет нечто подобное - то может сервер как-то хитро отконфигурирован.
620  Разработка / Программирование под QNX 4.x / Config files : Мая 18, 2003, 10:01:00 pm
программа/процедура/набор процедур которые разбирают конфигурационный файл, и (возможно) устанавливают содержимое внутренних переменных программы в соответствии с содержимым конфигурационного файла.
621  Разработка / Программирование под QNX 4.x / shmem performance : Мая 16, 2003, 11:21:00 pm
я в первую очередь туда и обратился.

имеется тестовая программа:

#pragma aux f_cpu =
"m2: mov dword [eax],32000"
"m1: dec dword [eax]"
    "jnz m1"          
    "inc dword [edx]"
    "jmp short m2"    
    parm [eax][edx];

...
 unsigned int* pt1, *pt2;
...
 while (cnt--)
 { if (sigsetjmp(sb, SIGALRM) == 0)
   { (*pt1) = 0;
     (*pt2) = 0;
     timer_settime(tid, TIMER_ADDREL, &it, NULL);
     f_cpu(pt1, pt2);
   }
   else
   { if (verbose == 1)
       printf("t1 = %d, t2 = %d
", *pt1, *pt2);
   }
 }

так вот, если pt1, pt2 указывают на область в памяти shmem, то счетчики, которые там заведены успевают насчитать половину от того, что этаже программа, при таких-же условиях успевает насчитать при размещении переменных в локальной памяти процесса.
622  Разработка / Программирование под QNX 4.x / Config files : Мая 15, 2003, 05:24:00 pm
сами парсят.
623  Разработка / Программирование под QNX 4.x / netstat -s : Мая 15, 2003, 05:22:00 pm
Может кому нибудь это потом пригодиться, а решение проблемы таково:

#include <nlist.h>
#include <sys/debug.h>
#include <sys/sock_msg.h>
а так-же почти все *.h файлы из netinet

struct nlist nl[] =
{ {"_mbstat",   0, 0},
 {"_ipstat",   0, 0},
 {"_icmpstat", 0, 0},
 {"_udpstat",  0, 0},
 {"_tcpstat",  0, 0},
 {"",          0, 0}
};

union usnl
{ struct _sock_nlist       sn;
 struct _sock_nlist_reply snr;
};

int _sock_nlist(void)
{ union usnl sn = {{_SOCK_NLIST}};
 struct _mxfer_entry mx[2];
 int sock; /*PID Socket-а*/

 _setmx(&mx[0], &sn, sizeof(sn));
 _setmx(&mx[1], &nl, sizeof(nl));
 if (Sendmx(sock, 2, 2, mx, mx) == -1)
   return -1;
 return 0;
}

int kvm_read(long off, const char *data, int length) {
   static pid_t proc, sock; /*PID Socket-а*/
   char huge *p = (char huge *) off;
   int len = length;

   proc = PROC_PID;
   while (len > 0) {
       if (__qnx_debug_xfer(proc, sock, _DEBUG_MEM_RD, data, (len > 512) ? 512 : len, FP_OFF(p), FP_SEG(p)) == -1)
       { perror("__qnx_debug_xfer");
         return -1;
       }
       data += 512;
       len -= 512;
       p += 512;
   }
   return length;
}

int netstat(void)
{ int ret;
 struct ipstat   ip_s;
 struct icmpstat icmp_s;
 struct udpstat  udp_s;
 struct tcpstat  tcp_s;

 ret = _sock_nlist();
 ret = kvm_read(nl[1].n_value, (char*)&ip_s, nl[1].n_type);
 ret = kvm_read(nl[2].n_value, (char*)&icmp_s, nl[2].n_type);
 ret = kvm_read(nl[3].n_value, (char*)&udp_s, nl[3].n_type);
 ret = kvm_read(nl[4].n_value, (char*)&tcp_s, nl[4].n_type);
 return 0;
}

PS: cc -mf, иначе __qnx_debug_xfer говорит EINVAL.
624  Разработка / Программирование под QNX 4.x / shmem performance : Мая 15, 2003, 05:10:00 pm
Hi,

Обнаружена интересная особенность реализации shared memory с QNX4:

имеется некий цикл, который просто дерементирует некоторый счетчик, над ним есть еще один цикл, который инкрементирует некоторый счетчик, т.е. нечто подобное:

t2 = 0;
do
{ t1 = x;
 while (--t1);
} while (t2++);

данный цикл работает в течении определенного интервала времени (1 минута), а потом завершается.

так вот, при размещение указанных счетчиков в разделяемой памяти, созданной при помощи shm_open(), счетчик t2 в зависимости от типа процессора, на 586@133 в 2 раза, а на amdk6-3@400 в 1.5 раза меньше, чем в случае когда счетчик размещается в стеке/.bss/.data процесса.

Ни у кого нет идей с чем это может быть связанно?
625  Разработка / Программирование под QNX 4.x / netstat -s : Апреля 19, 2003, 09:24:00 pm
Каким образом можно получить программно сетевую статистику для Socket-а, по протоколам TCP/UDP/IP/ICMP, аналогичную выводимой утилитой netstat с ключем -s.

Заранее благодарен за любые идеи.
Страниц: 1 ... 40 41 [42]