summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorguanglei <guanglei>2006-06-29 08:24:19 +0000
committerguanglei <guanglei>2006-06-29 08:24:19 +0000
commit9c6b0ab8562140ffda6d9b5aba1dafcf73fc9774 (patch)
tree17a636a35176f800534537c3dea9c677f472f179
parent76af82ee7a64e417867c5b8e585a724aa4156c68 (diff)
downloadsystemtap-steved-9c6b0ab8562140ffda6d9b5aba1dafcf73fc9774.tar.gz
systemtap-steved-9c6b0ab8562140ffda6d9b5aba1dafcf73fc9774.tar.xz
systemtap-steved-9c6b0ab8562140ffda6d9b5aba1dafcf73fc9774.zip
_lket_trace() won't log ppid and tgid any more. I use some bit-OPs to
make _lket_trace's format string shorter for better performance. I also modified lket-b2a to be sync with _lket_trace()
-rw-r--r--runtime/ChangeLog5
-rw-r--r--runtime/lket/b2a/lket_b2a.c47
-rw-r--r--runtime/lket/b2a/lket_b2a.h20
-rw-r--r--tapset/LKET/Changelog7
-rwxr-xr-xtapset/LKET/lket_trace.stp9
5 files changed, 50 insertions, 38 deletions
diff --git a/runtime/ChangeLog b/runtime/ChangeLog
index 16315cdd..f364286f 100644
--- a/runtime/ChangeLog
+++ b/runtime/ChangeLog
@@ -1,3 +1,8 @@
+2006-06-29 Li Guanglei <guanglei@cn.ibm.com>
+
+ * lket/b2a/lket_b2a.c, lket/b2a/lket_b2a.h: modified to be
+ sync with new _lket_trace()
+
2006-06-27 Roland McGrath <roland@redhat.com>
* loc2c-runtime.h: Add some comments.
diff --git a/runtime/lket/b2a/lket_b2a.c b/runtime/lket/b2a/lket_b2a.c
index f744ccb9..1754e972 100644
--- a/runtime/lket/b2a/lket_b2a.c
+++ b/runtime/lket/b2a/lket_b2a.c
@@ -92,9 +92,9 @@ int main(int argc, char *argv[])
j = 0;
for(i=0; i < total_infiles; i++) {
get_pkt_header(infps[i], &hdrs[i]);
- if((hdrs[i].sec*1000000LL + hdrs[i].usec) < start_timestamp
+ if( hdrs[i].microsecond < start_timestamp
|| (start_timestamp == 0)) {
- start_timestamp = hdrs[i].sec*1000000LL + hdrs[i].usec;
+ start_timestamp = hdrs[i].microsecond;
j = i;
}
}
@@ -105,13 +105,13 @@ int main(int argc, char *argv[])
// j is the next
if(min) {
- if(hdrs[j].hookgroup==_GROUP_PROCESS &&
- (hdrs[j].hookid==_HOOKID_PROCESS_SNAPSHOT
- || hdrs[j].hookid==_HOOKID_PROCESS_EXECVE))
+ if(HDR_GroupID(&hdrs[j])==_GROUP_PROCESS &&
+ (HDR_HookID(&hdrs[j])==_HOOKID_PROCESS_SNAPSHOT
+ || HDR_HookID(&hdrs[j])==_HOOKID_PROCESS_EXECVE))
{
register_appname(j, infps[j], &hdrs[j]);
- } else if(hdrs[j].hookgroup==_GROUP_REGEVT) {
- register_events(hdrs[j].hookid, infps[j],
+ } else if(HDR_GroupID(&hdrs[j])==_GROUP_REGEVT) {
+ register_events(HDR_HookID(&hdrs[j]), infps[j],
hdrs[j].sys_size);
} else {
print_pkt_header(outfp, &hdrs[j]);
@@ -124,12 +124,12 @@ int main(int argc, char *argv[])
get_pkt_header(infps[j], &hdrs[j]);
}
// recalculate the smallest timestamp
- min = hdrs[0].sec*1000000LL + hdrs[0].usec;
+ min = hdrs[0].microsecond;
j = 0;
for(i=1; i < total_infiles ; i++) {
if((min == 0) ||
- ((hdrs[i].sec*1000000LL + hdrs[i].usec) < min)) {
- min = hdrs[i].sec*1000000LL + hdrs[i].usec;
+ (hdrs[i].microsecond < min)) {
+ min = hdrs[i].microsecond;
j = i;
}
}
@@ -168,7 +168,7 @@ void register_appname(int i, FILE *fp, lket_pkt_header *phdr)
appname = (char *)malloc(1024);
- if(phdr->hookid ==1 ) { /* process_snapshot */
+ if(HDR_HookID(phdr) ==1 ) { /* process_snapshot */
len = fread(&pid, 1, 4, fp);
c = fgetc_unlocked(fp);
++len;
@@ -179,8 +179,8 @@ void register_appname(int i, FILE *fp, lket_pkt_header *phdr)
}
appname[count]='\0';
//fseek(fp, 0-len, SEEK_CUR);
- } else if (phdr->hookid == 2) { /* process.execve */
- pid = phdr->pid;
+ } else if (HDR_HookID(phdr) == 2) { /* process.execve */
+ pid = HDR_PID(phdr);
c = fgetc_unlocked(fp);
++len;
@@ -301,16 +301,13 @@ void print_pkt_header(FILE *fp, lket_pkt_header *phdr)
{
if(!fp || !phdr)
return;
- fprintf(fp, "\n%lld.%lld APPNAME: %s PID:%d PPID:%d TID:%d CPU:%d HOOKGRP:%d HOOKID:%d -- ",
- (phdr->sec*1000000LL + phdr->usec - start_timestamp)/1000000LL,
- (phdr->sec*1000000LL + phdr->usec- start_timestamp)%1000000LL,
- (char *)(g_tree_lookup(appNameTree, (gconstpointer)((long)phdr->pid))),
- phdr->pid,
- phdr->ppid,
- phdr->tid,
- phdr->cpu,
- phdr->hookgroup,
- phdr->hookid);
+ fprintf(fp, "\n%lld APPNAME: %s PID:%d CPU:%d HOOKGRP:%d HOOKID:%d -- ",
+ (phdr->microsecond - start_timestamp),
+ (char *)(g_tree_lookup(appNameTree, (gconstpointer)((long)HDR_PID(phdr)))),
+ HDR_PID(phdr),
+ HDR_CpuID(phdr),
+ HDR_GroupID(phdr),
+ HDR_HookID(phdr));
}
void register_events(int evt_type, FILE *infp, size_t size)
@@ -389,8 +386,8 @@ int ascii_print(lket_pkt_header header, FILE *infp, FILE *outfile, int evt_type)
int size;
char *fmt, *name, *buffer;
- int grpid = header.hookgroup;
- int hookid = header.hookid;
+ int grpid = HDR_GroupID(&header);
+ int hookid = HDR_HookID(&header);
if(evt_type == EVT_SYS)
diff --git a/runtime/lket/b2a/lket_b2a.h b/runtime/lket/b2a/lket_b2a.h
index 8db5adb2..d9cd4a26 100644
--- a/runtime/lket/b2a/lket_b2a.h
+++ b/runtime/lket/b2a/lket_b2a.h
@@ -124,16 +124,20 @@ int _HOOKID_AIO_IO_CANCEL_RETURN = 12;
typedef struct _lket_pkt_header {
int16_t total_size;
int16_t sys_size;
- int8_t hookgroup;
- int8_t hookid;
- int32_t sec;
- int32_t usec;
- int32_t pid;
- int32_t ppid;
- int32_t tid;
- int8_t cpu;
+ int64_t microsecond;
+ /* aggr is the bit-OP of:
+ (int64_t)current->pid << 32 |
+ (int32_t)GroupID << 24 | (int32_t)hookID << 16 |
+ (int16_t)current->thread_info->cpu << 8
+ */
+ int64_t aggr;
} __attribute__((packed)) lket_pkt_header;
+#define HDR_PID(ptr) (int32_t)(((ptr)->aggr)>>32)
+#define HDR_GroupID(ptr) (int8_t)(((ptr)->aggr)>>24)
+#define HDR_HookID(ptr) (int8_t)(((ptr)->aggr)>>16)
+#define HDR_CpuID(ptr) (int8_t)(((ptr)->aggr)>>8)
+
typedef struct _appname_info {
int pid;
int ppid;
diff --git a/tapset/LKET/Changelog b/tapset/LKET/Changelog
index 965cbf36..c31e072f 100644
--- a/tapset/LKET/Changelog
+++ b/tapset/LKET/Changelog
@@ -1,3 +1,10 @@
+2006-06-29 Li Guanglei <guanglei@cn.ibm.com>
+
+ * lket_trace.stp:
+ _lket_trace() won't log ppid and tgid any more.
+ Using bit-OP to make _lket_trace's format string shorter
+ for better performance.
+
2006-06-26 Li Guanglei <guanglei@cn.ibm.com>
* aio.stp: new event hooks for AIO
diff --git a/tapset/LKET/lket_trace.stp b/tapset/LKET/lket_trace.stp
index 442976a5..4336377c 100755
--- a/tapset/LKET/lket_trace.stp
+++ b/tapset/LKET/lket_trace.stp
@@ -126,11 +126,10 @@ static inline int this_event_len(void)
#define _lket_trace(GroupID, hookID, fmt, args...) do { \
struct timeval tv; \
do_gettimeofday (&tv); \
- _stp_printf("%2b%2n%1b%1b%4b%4b%4b%4b%4b%1b"fmt, \
- (_FMT_)0, (_FMT_)GroupID, (_FMT_)hookID, \
- (_FMT_)tv.tv_sec, (_FMT_)tv.tv_usec, (_FMT_)current->tgid, \
- (_FMT_)current->parent->pid, (_FMT_)current->pid, \
- (_FMT_)current->thread_info->cpu, args);\
+ _stp_printf("%2b%2n%8b%8b"fmt, (_FMT_)0, \
+ (_FMT_)(tv.tv_sec*1000000LL + tv.tv_usec),\
+ (_FMT_)((int64_t)current->pid << 32 | (int32_t)GroupID << 24 |\
+ (int32_t)hookID << 16 | (int16_t)current->thread_info->cpu << 8), args);\
} while(0)
#endif