Hi, Alexei - > My understanding of systemtap is that the whole .stp script is converted > to C, compiled as .ko and loaded, so all map walking and prints are > happening in the kernel. Similarly for ktap which has special functions > in kernel to print histograms. That is correct. > I thought dtrace printf are also happening from the kernel. What is > the trick they use to know which pieces of dtrace script should be > run in user space? It appears as though the bytecode language running in the kernel sends some action commands back out to userspace, not just plain data. > In ebpf examples there are two C files: one for kernel with ebpf isa > and one for userspace as native. I thought about combining them, > but couldn't figure out a clean way of doing it. (#if ?) > > What kind of locking/serialization is provided by the ebpf runtime > > over shared variables such as my_map? > > it's traditional rcu scheme. OK, that protects the table structure, but: > [...] In such case concurrent write access to map value can be done > with bpf_xadd instruction, though using normal read/write is also > allowed. In some cases the speed of racy var++ is preferred over > 'lock xadd'. ... so concurrency control over shared values is left up to the programmer. > There are no lock/unlock function helpers available to ebpf > programs, since program may terminate early with div by zero > for example, so in-kernel lock helper implementation would > be complicated and slow. It's possible to do, but for the use > cases so far there is no need. OK, I hope that works out. I've been told that dtrace does something similiar (!) by eschewing protection on global variables such as strings. In their case it's less bad than it sounds because they are used to offloading computation to userspace or to store only thread-local state, and accept the corollary limitations on control. (Systemtap does fully & automatically protect shared variables, even in the face of run-time script errors.) - FChE -- To unsubscribe from this list: send the line "unsubscribe linux-api" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html