trace hooks (for 2nd commitfest)
От | Itagaki Takahiro |
---|---|
Тема | trace hooks (for 2nd commitfest) |
Дата | |
Msg-id | 20090723162853.9828.52131E4D@oss.ntt.co.jp обсуждение исходный текст |
Ответ на | Re: Sampling profiler updated (Itagaki Takahiro <itagaki.takahiro@oss.ntt.co.jp>) |
Список | pgsql-hackers |
I wrote: > How about export dtrace functions as hook function pointers? Here is a proposal to integrate profiler to postgres without adding any tracing markers. The goal is to provide platform-independent and easy-to-use performance profiler. (typically just adding some configuration to postgresql.conf.) ---- 1. Add Gen_trace_hooks.sed to generate hook functions from probes.d. It appends hook variables at the tail of probes.hlike: extern void (*TRANSACTION_START_hook)(LocalTransactionId arg1); 2. Rewrite trace function calls into PG_TRACE(name, (args...)). Trace macros are defined as: #define PG_TRACE(name,args) \ do { \ TRACE_POSTGRESQL_##name args; \ if (name##_hook) \ name##_hook args; \ } while(0) and called as: PG_TRACE(TRANSACTION_START, (vxid.localTransactionId)); The changes are not always necessary, but PG_TRACE macro is useful to add common logic for all probes. We can also useit to disable probes; Gen_dummy_probes.sed will be no longer needed. 3. Implement profiler using trace hooks. Timer callbacks might be needed for periodical sampling, but I'll try to usesimple polling from sql for now. ---- I tested performance regression by empty dtrace-probes and empty trace-hooks, but the differences were 1-2%. Close enough to dtrace. $ pgbench -n -S -c8 -T60 No probes : tps = 28103 ENABLE_TRACE_HOOK only : tps = 28101 ENABLE_DTRACEonly : tps = 27945 Enable both : tps = 27760 Regards, --- ITAGAKI Takahiro NTT Open Source Software Center
В списке pgsql-hackers по дате отправления: