From dea9fbacd6cb8fc7eb46b018ed05e974e372e49d Mon Sep 17 00:00:00 2001 From: hadaq Date: Thu, 2 Sep 2010 17:07:43 +0000 Subject: [PATCH] PID and core nr added. Sergey. --- hadaq/netmem.c | 71 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 70 insertions(+), 1 deletion(-) diff --git a/hadaq/netmem.c b/hadaq/netmem.c index 03d81d5..8717f8f 100644 --- a/hadaq/netmem.c +++ b/hadaq/netmem.c @@ -1,4 +1,4 @@ -static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/netmem.c,v 6.47 2010-08-23 11:57:19 hadaq Exp $"; +static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/netmem.c,v 6.48 2010-09-02 17:07:43 hadaq Exp $"; #define _POSIX_C_SOURCE 199309L #define SYSLOG_NAMES @@ -55,6 +55,8 @@ typedef struct TheStatsS { unsigned long *nrOfMsgs; unsigned long *recvBytesRate[MAXINPATH]; unsigned long *portNr[MAXINPATH]; + unsigned long *PID; + unsigned long *coreNr; } TheStats; static jmp_buf terminateJmp; @@ -371,6 +373,68 @@ static void printTime() printf("Time: %s.%03ld\n", time_string, milliseconds); } +char *itoa(int val, int base) +{ + + static char buf[32] = { 0 }; + + int i = 30; + + for (; val && i; --i, val /= base) + buf[i] = "0123456789abcdef"[val % base]; + + return &buf[i + 1]; + +} + +int countChar(char *string, char *char2count) +{ + int cnt = 0; + int i; + + for (i = strlen(string) - 1; i >= 0 && strchr(char2count, string[i]) != NULL; i--) + cnt++; + + return cnt; +} + +static void addCoreAffinity2Stat(TheStats *theStats, int interval) +{ + unsigned long new_mask = 2; + unsigned int len = sizeof(new_mask); + unsigned long cur_mask; + + static once = 1; + static time_t t0 = 0; + time_t t, dT; + + t = time(NULL); + dT = t - t0; + + if (dT >= interval) { + + if (once) { + (*theStats->PID) = (int) getpid(); + once = 0; + } + + sched_getaffinity((pid_t) (*theStats->PID), len, &cur_mask); + + char *buffer; + int nrOfZeros; + + /* Convert to binary */ + buffer = itoa(cur_mask, 2); + + /* Core number is equal to a number of zeros in affinity mask (in binary format) */ + nrOfZeros = countChar(buffer, "0"); + + (*theStats->coreNr) = nrOfZeros; + + t0 = t; + } +} + static void add2Stat(TheArgs *theArgs, TheStats *my, float interval, ShmTrans **shmtr, NetTrans **nettr) { @@ -639,6 +703,9 @@ int main(int argc, char *argv[]) theStats->nrOfMsgs = Worker_addStatistic(worker, "nrOfMsgs"); (*theStats->nrOfMsgs) = theArgs->nrOfMsgs; + theStats->PID = Worker_addStatistic(worker, "PID"); + theStats->coreNr = Worker_addStatistic(worker, "coreNr"); + Worker_initEnd(worker); if (setjmp(terminateJmp) == 0) { @@ -647,6 +714,8 @@ int main(int argc, char *argv[]) add2Stat(theArgs, theStats, 1, shmTrans, netTrans); statsDump(theArgs, netTrans, 1); + addCoreAffinity2Stat(theStats, 10); + if (-1 == checkDataSources(theArgs, theStats)) { fprintf(stderr, "Exit.\n"); goto bailOut1; -- 2.43.0