Steven Rostedt (Red Hat)
fef5aeeee9
ftrace: Replace tramp_hash with old_*_hash to save space
...
Allowing function callbacks to declare their own trampolines requires
that each ftrace_ops that has a trampoline must have some sort of
accounting that keeps track of which ops has a trampoline attached
to a record.
The easy way to solve this was to add a "tramp_hash" that created a
hash entry for every function that a ops uses with a trampoline.
But since we can have literally tens of thousands of functions being
traced, that means we need tens of thousands of descriptors to map
the ops to the function in the hash. This is quite expensive and
can cause enabling and disabling the function graph tracer to take
some time to start and stop. It can take up to several seconds to
disable or enable all functions in the function graph tracer for this
reason.
The better approach albeit more complex, is to keep track of how ops
are being enabled and disabled, and use that along with the counting
of the number of ops attached to records, to determive what ops has
a trampoline attached to a record at enabling and disabling of
tracing.
To do this, the tramp_hash has been replaced with an old_filter_hash
and old_notrace_hash, which get the copy of the ops filter_hash and
notrace_hash respectively. The old hashes is kept until the ops has
been modified or removed and the old hashes are used with the logic
of the accounting to determine the ops that have the trampoline of
a record. The reason this has less of a footprint is due to the trick
that an "empty" hash in the filter_hash means "all functions" and
an empty hash in the notrace hash means "no functions" in the hash.
This is much more efficienct, doesn't have the delay, and takes up
much less memory, as we do not need to map all the functions but
just figure out which functions are mapped at the time it is
enabled or disabled.
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
2014-09-10 10:48:45 -04:00
..
bpf
net: filter: split 'struct sk_filter' into socket and bpf parts
2014-08-02 15:03:58 -07:00
debug
kdb: Use ktime_get_ts()
2014-06-12 16:18:45 +02:00
events
Merge branch 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
2014-08-24 16:16:55 -07:00
gcov
kernel/gcov/fs.c: remove unnecessary null test before debugfs_remove
2014-08-08 15:57:24 -07:00
irq
irq: Export handle_fasteoi_irq
2014-08-25 21:13:30 +02:00
locking
arch, locking: Ciao arch_mutex_cpu_relax()
2014-07-17 12:32:47 +02:00
power
PM / sleep: Fix test_suspend= command line option
2014-09-03 01:21:03 +02:00
printk
printk: Add function to return log buffer address and size
2014-08-13 15:13:44 +10:00
rcu
rcu: Make nocb leader kthreads process pending callbacks after spawning
2014-08-28 05:59:59 -07:00
sched
Merge branches 'pm-sleep', 'pm-cpufreq' and 'pm-cpuidle'
2014-08-11 23:19:48 +02:00
time
timekeeping: Update timekeeper before updating vsyscall and pvclock
2014-09-06 12:58:18 +02:00
trace
ftrace: Replace tramp_hash with old_*_hash to save space
2014-09-10 10:48:45 -04:00
.gitignore
acct.c
kernel/acct.c: fix coding style warnings and errors
2014-08-08 15:57:27 -07:00
async.c
audit.c
CAPABILITIES: remove undefined caps from all processes
2014-07-24 21:53:47 +10:00
audit.h
audit_tree.c
audit_watch.c
auditfilter.c
kernel/auditfilter.c: replace count*size kmalloc by kcalloc
2014-08-06 18:01:12 -07:00
auditsc.c
auditsc: audit_krule mask accesses need bounds checking
2014-06-10 08:44:40 -07:00
backtracetest.c
kernel/backtracetest.c: replace no level printk by pr_info()
2014-06-04 16:54:14 -07:00
bounds.c
page-cgroup: get rid of NR_PCG_FLAGS
2014-08-08 15:57:18 -07:00
capability.c
CAPABILITIES: remove undefined caps from all processes
2014-07-24 21:53:47 +10:00
cgroup.c
Merge branch 'for-3.17' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup
2014-08-04 10:11:28 -07:00
cgroup_freezer.c
cgroup: rename cgroup_subsys->base_cftypes to ->legacy_cftypes
2014-07-15 11:05:09 -04:00
compat.c
compat: nanosleep: Clarify error handling
2014-09-06 12:58:18 +02:00
configs.c
context_tracking.c
x86/kprobes: Fix build errors and blacklist context_track_user
2014-06-14 09:07:44 +02:00
cpu.c
sched: Rework check_for_tasks()
2014-07-05 11:17:45 +02:00
cpu_pm.c
cpuset.c
Merge branch 'for-3.17' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup
2014-08-04 10:11:28 -07:00
crash_dump.c
cred.c
delayacct.c
delayacct: Remove braindamaged type conversions
2014-07-23 10:18:06 -07:00
dma.c
elfcore.c
exec_domain.c
kernel/exec_domain.c: code clean-up
2014-06-04 16:54:15 -07:00
exit.c
kernel/exit.c: fix coding style warnings and errors
2014-08-08 15:57:22 -07:00
extable.c
fork.c
seccomp: Replace BUG(!spin_is_locked()) with assert_spin_lock
2014-08-11 13:29:12 -07:00
freezer.c
futex.c
futex: Simplify futex_lock_pi_atomic() and make it more robust
2014-06-21 22:26:24 +02:00
futex_compat.c
groups.c
hung_task.c
kernel/hung_task.c: convert simple_strtoul to kstrtouint
2014-06-04 16:54:15 -07:00
irq_work.c
irq_work: Remove BUG_ON in irq_work_run()
2014-07-05 11:17:26 +02:00
jump_label.c
kallsyms.c
kernel/kallsyms.c: fix %pB when there's no symbol at the address
2014-08-08 15:57:18 -07:00
kcmp.c
Kconfig.freezer
Kconfig.hz
Kconfig.locks
locking/rwsem: Add CONFIG_RWSEM_SPIN_ON_OWNER
2014-07-16 14:57:13 +02:00
Kconfig.preempt
kexec.c
kexec: create a new config option CONFIG_KEXEC_FILE for new syscall
2014-08-29 16:28:16 -07:00
kmod.c
signals: change wait_for_helper() to use kernel_sigaction()
2014-06-06 16:08:12 -07:00
kprobes.c
kprobes: Skip kretprobe hit in NMI context to avoid deadlock
2014-08-08 10:38:04 +02:00
ksysfs.c
kthread.c
kthread_work: wake up worker only when the worker is idle
2014-07-28 14:07:52 -04:00
latencytop.c
kernel/latencytop.c: convert seq_printf to seq_puts
2014-06-04 16:54:15 -07:00
Makefile
bin2c: move bin2c in scripts/basic
2014-08-08 15:57:32 -07:00
module-internal.h
module.c
module: Clean up ro/nx after early module load failures
2014-08-16 04:47:00 +09:30
module_signing.c
notifier.c
nsproxy.c
namespaces: Use task_lock and not rcu to protect nsproxy
2014-07-29 18:08:50 -07:00
padata.c
panic.c
panic: add TAINT_SOFTLOCKUP
2014-08-08 15:57:24 -07:00
params.c
Add module param type 'ullong'
2014-07-17 22:07:37 +02:00
pid.c
pid_namespace.c
profile.c
kernel/profile.c: use static const char instead of static char
2014-06-06 16:08:13 -07:00
ptrace.c
sched: Remove proliferation of wait_on_bit() action functions
2014-07-16 15:10:39 +02:00
range.c
reboot.c
kernel/reboot.c: convert simple_strtoul to kstrtoint
2014-06-04 16:54:15 -07:00
relay.c
res_counter.c
kernel/res_counter.c: replace simple_strtoull by kstrtoull
2014-06-04 16:54:15 -07:00
resource.c
resource: fix the case of null pointer access
2014-08-29 16:28:15 -07:00
seccomp.c
seccomp: Replace BUG(!spin_is_locked()) with assert_spin_lock
2014-08-11 13:29:12 -07:00
signal.c
Merge branch 'signal-cleanup' of git://git.kernel.org/pub/scm/linux/kernel/git/rw/misc
2014-08-09 09:58:12 -07:00
smp.c
kernel/smp.c:on_each_cpu_cond(): fix warning in fallback path
2014-08-06 18:01:22 -07:00
smpboot.c
smpboot.h
softirq.c
stacktrace.c
stop_machine.c
kernel/stop_machine.c: kernel-doc warning fix
2014-06-04 16:54:15 -07:00
sys.c
sched: move no_new_privs into new atomic flags
2014-07-18 12:13:38 -07:00
sys_ni.c
kexec: new syscall kexec_file_load() declaration
2014-08-08 15:57:32 -07:00
sysctl.c
mm, hugetlb: remove hugetlb_zero and hugetlb_infinity
2014-08-06 18:01:19 -07:00
sysctl_binary.c
ipv6: Allow accepting RA from local IP addresses.
2014-07-01 12:16:24 -07:00
system_certificates.S
system_keyring.c
KEYS: validate certificate trust only with builtin keys
2014-07-17 09:35:17 -04:00
task_work.c
taskstats.c
test_kprobes.c
kernel/test_kprobes.c: use current logging functions
2014-08-08 15:57:18 -07:00
torture.c
torture: Avoid format string leak to thead name
2014-07-07 10:12:56 -07:00
tracepoint.c
tracing: syscall_regfunc() should not skip kernel threads
2014-06-21 00:15:26 -04:00
tsacct.c
sched: Make task->start_time nanoseconds based
2014-07-23 10:18:05 -07:00
uid16.c
up.c
user-return-notifier.c
user.c
kernel/user.c: drop unused field 'files' from user_struct
2014-06-04 16:54:16 -07:00
user_namespace.c
proc: constify seq_operations
2014-08-08 15:57:22 -07:00
utsname.c
namespaces: Use task_lock and not rcu to protect nsproxy
2014-07-29 18:08:50 -07:00
utsname_sysctl.c
sysctl: convert use of typedef ctl_table to struct ctl_table
2014-06-06 16:08:16 -07:00
watchdog.c
panic: add TAINT_SOFTLOCKUP
2014-08-08 15:57:24 -07:00
workqueue.c
Merge branch 'for-3.17' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu
2014-08-04 10:09:27 -07:00
workqueue_internal.h