Fwd: systemtap global var lead to high cpu
Kun
mingkunone@qq.com
Fri Jul 24 02:00:48 GMT 2020
My global var saved is string type, not number, so I can not use aggregate.
FChE will fixed this bug,
https://sourceware.org/bugzilla/show_bug.cgi?id=26296
Hoping to fixed soon.
------------------ Original ------------------
From: Serhei Makarov <smakarov@redhat.com>
Date: Thu,Jul 23,2020 10:22 PM
To: systemtap <systemtap@sourceware.org>, mingkunone <mingkunone@qq.com>
Subject: Re: Fwd: systemtap global var lead to high cpu
Forwarding your question to systemtap@sourceware.org in case other people have suggestions.
In general, the locks protect concurrent modifications from interfering with each other when different processes trigger the same probe.
Depending on what you want to do with the iphdr value, you may be able to reduce contention by using statistical aggregates
(which do not require locking). For example, aaa[iphdr] <<< some_statistic; in a later probe iterate through aaa. A lot of the SystemTap example scripts use this type of structure, for example: https://sourceware.org/systemtap/examples/network/netfilter_summary.stp
Otherwise, every tcp_ack() for every packet on your system will try to grab the same lock. The resulting CPU load is unsurprising to me.
Hope this information is helpful; if not, someone else may have a better suggestion.
All the best,
Serhei
---------- Forwarded message ---------
From: Kun <mingkunone@qq.com>
Date: Wed, Jul 22, 2020 at 11:24 PM
Subject: systemtap global var lead to high cpu
To: smakarov <smakarov@redhat.com>
Hi,
I have a problem of system tap which
Using global var.
A simple demo as following,
Global aaa
Probe kernel.function(“tcp_ack”){
Iphdr = __get_skb_iphdr($skb)
If(iphdr == 0){
aaa=iphdr
}
Then our env have a 10Gbps flow, and our cpu is nearly 100%.
Analysising c code, I find this is because of a lock as following:
Static void probe_6330()
{
If(sta_lock_probe(lock, ARRAY_SIZE(locks))
Return;
If(l->iphdr == 0){
Global(s_global_aaa)=l->l_iphdr;
}
My question is that aaa should be protected in “if”,
Why is the lock directly at the function entry?
More information about the Systemtap
mailing list