Juhasz Balint
2011-08-26 08:17:23 UTC
Hy!
I think i find some interesting problem (maybe it is basic :) ):
***@thelab ~/Tools/IPC$ ./ipc_count_syscall.d
syscall::semsys 1690
***@thelab ~/Tools/IPC$ cat ./ipc_count_syscall.d
#!/usr/sbin/dtrace -qs
#pragma D option quiet
#pragma D option destructive
syscall::sem*:entry
{
self->time = timestamp;
}
syscall::sem*:return
/self->time/
{
this->name = strjoin(probeprov, strjoin("::",probefunc));
@semcheck[this->name] = count();
self->time = 0;
}
tick-10sec
{
exit(0);
}
It's ok, but if i put fbt provider checking to this script, i can't
see syscall fields in the count() result:
***@thelab ~/Tools/IPC$ ./ipc_count_all.d
fbt:genunix:sema_destroy 4
fbt:genunix:sema_init 8
fbt:genunix:sema_tryp 81
fbt:genunix:sema_p 208
fbt:genunix:sema_v 289
fbt:ipc:ipc_lock_internal 1850
fbt:ipc:ipcperm_access 1850
fbt:semsys:sem_undo_add 1850
fbt:semsys:sem_undo_compar 1850
fbt:semsys:semsys 1850
***@thelab ~/Tools/IPC$ cat ./ipc_count_all.d
#!/usr/sbin/dtrace -qs
#pragma D option quiet
#pragma D option destructive
fbt:ipc::entry,
fbt:semsys::entry,
fbt:genunix:sem*:entry,
syscall::sem*:entry
{
self->time = timestamp;
}
fbt:ipc::return,
fbt:semsys::return,
fbt:genunix:sem*:return
/self->time/
{
this->name = strjoin(probeprov,
strjoin(strjoin(":",probemod),strjoin(":",probefunc)));
@semcheck[this->name] = count();
self->time = 0;
}
syscall::sem*:return
/self->time/
{
this->name = strjoin(probeprov, strjoin("::",probefunc));
@semcheck[this->name] = count();
self->time = 0;
}
tick-10sec
{
exit(0);
}
If i modify the script, it also not working.
***@thelab ~/Tools/IPC$ ./ipc_count_all.d
fbt:genunix:sema_tryp 1
fbt:genunix:sema_destroy 4
fbt:genunix:sema_init 14
fbt:genunix:sema_p 59
fbt:genunix:sema_v 60
fbt:ipc:ipc_lock_internal 1850
fbt:ipc:ipcperm_access 1850
fbt:semsys:sem_undo_add 1850
fbt:semsys:sem_undo_compar 1850
fbt:semsys:semsys 1850
***@thelab ~/Tools/IPC$ cat ./ipc_count_all.d
#!/usr/sbin/dtrace -qs
#pragma D option quiet
#pragma D option destructive
fbt:ipc::entry,
fbt:semsys::entry,
fbt:genunix:sem*:entry,
syscall::sem*:entry
{
self->time = timestamp;
}
fbt:ipc::return,
fbt:semsys::return,
fbt:genunix:sem*:return,
syscall::sem*:return
/self->time/
{
this->name = strjoin(probeprov,
strjoin(strjoin(":",probemod),strjoin(":",probefunc)));
@semcheck[this->name] = count();
self->time = 0;
}
tick-10sec
{
exit(0);
}
I know i can use printa to print probeprov, probemod and probefunc but
i prefer strjoin :)
In this case i doesn't understand where are syscall' count.
Anyone has an idea about this problem?
Cni
I think i find some interesting problem (maybe it is basic :) ):
***@thelab ~/Tools/IPC$ ./ipc_count_syscall.d
syscall::semsys 1690
***@thelab ~/Tools/IPC$ cat ./ipc_count_syscall.d
#!/usr/sbin/dtrace -qs
#pragma D option quiet
#pragma D option destructive
syscall::sem*:entry
{
self->time = timestamp;
}
syscall::sem*:return
/self->time/
{
this->name = strjoin(probeprov, strjoin("::",probefunc));
@semcheck[this->name] = count();
self->time = 0;
}
tick-10sec
{
exit(0);
}
It's ok, but if i put fbt provider checking to this script, i can't
see syscall fields in the count() result:
***@thelab ~/Tools/IPC$ ./ipc_count_all.d
fbt:genunix:sema_destroy 4
fbt:genunix:sema_init 8
fbt:genunix:sema_tryp 81
fbt:genunix:sema_p 208
fbt:genunix:sema_v 289
fbt:ipc:ipc_lock_internal 1850
fbt:ipc:ipcperm_access 1850
fbt:semsys:sem_undo_add 1850
fbt:semsys:sem_undo_compar 1850
fbt:semsys:semsys 1850
***@thelab ~/Tools/IPC$ cat ./ipc_count_all.d
#!/usr/sbin/dtrace -qs
#pragma D option quiet
#pragma D option destructive
fbt:ipc::entry,
fbt:semsys::entry,
fbt:genunix:sem*:entry,
syscall::sem*:entry
{
self->time = timestamp;
}
fbt:ipc::return,
fbt:semsys::return,
fbt:genunix:sem*:return
/self->time/
{
this->name = strjoin(probeprov,
strjoin(strjoin(":",probemod),strjoin(":",probefunc)));
@semcheck[this->name] = count();
self->time = 0;
}
syscall::sem*:return
/self->time/
{
this->name = strjoin(probeprov, strjoin("::",probefunc));
@semcheck[this->name] = count();
self->time = 0;
}
tick-10sec
{
exit(0);
}
If i modify the script, it also not working.
***@thelab ~/Tools/IPC$ ./ipc_count_all.d
fbt:genunix:sema_tryp 1
fbt:genunix:sema_destroy 4
fbt:genunix:sema_init 14
fbt:genunix:sema_p 59
fbt:genunix:sema_v 60
fbt:ipc:ipc_lock_internal 1850
fbt:ipc:ipcperm_access 1850
fbt:semsys:sem_undo_add 1850
fbt:semsys:sem_undo_compar 1850
fbt:semsys:semsys 1850
***@thelab ~/Tools/IPC$ cat ./ipc_count_all.d
#!/usr/sbin/dtrace -qs
#pragma D option quiet
#pragma D option destructive
fbt:ipc::entry,
fbt:semsys::entry,
fbt:genunix:sem*:entry,
syscall::sem*:entry
{
self->time = timestamp;
}
fbt:ipc::return,
fbt:semsys::return,
fbt:genunix:sem*:return,
syscall::sem*:return
/self->time/
{
this->name = strjoin(probeprov,
strjoin(strjoin(":",probemod),strjoin(":",probefunc)));
@semcheck[this->name] = count();
self->time = 0;
}
tick-10sec
{
exit(0);
}
I know i can use printa to print probeprov, probemod and probefunc but
i prefer strjoin :)
In this case i doesn't understand where are syscall' count.
Anyone has an idea about this problem?
Cni