drgn/libdrgn
Omar Sandoval 747e02857d libdrgn: add last virtual address hint to page table iterator
Peter Collingbourne reported that the over-reading we do in the AArch64
page table iterator uses too much bandwidth for remote targets. His
original proposal in #312 was to change the page table iterator to only
read one entry per level. However, this would regress large reads that
do end up using the additional entries (in particular when the target is
/proc/kcore, which has a high latency per read but also high enough
bandwidth that the over-read is essentially free).

We can get the best of both worlds by informing the page table iterator
how much we expect to need (at the cost of some additional complexity in
this admittedly already pretty complex code). Requiring an accurate end
would limit the flexibility of the page table iterator and be more
error-prone, so let's make it a non-binding hint.

Add the hint and use it in the x86-64 page table iterator to only read
as many entries as necessary. Also extend the test case for large page
table reads to test this better.

Signed-off-by: Omar Sandoval <osandov@osandov.com>
2023-10-11 11:29:35 -07:00
..
build-aux libdrgn: don't cache ORC sections in struct drgn_elf_file 2023-06-22 15:27:39 -07:00
examples libdrgn: examples: load_debug_info: pass struct drgn_program address to --{pre,post}-exec 2023-08-04 12:49:48 -07:00
include libdrgn: wrap system elf.h instead of vendoring 2023-08-24 13:27:38 -07:00
m4 libdrgn: define auto to __auto_type via autoconf 2023-08-16 10:32:39 -07:00
python libdrgn: string_builder: add STRING_BUILDER scope guard 2023-10-07 22:30:38 -07:00
.gitignore libdrgn: use memswitch for linux_kernel_object_find 2022-02-08 02:03:11 -08:00
arch_aarch64_defs.py Add StackFrame.sp 2022-11-22 18:47:16 -08:00
arch_aarch64.c libdrgn: add DRGN_OBJECT scope guard 2023-09-28 22:31:11 -07:00
arch_arm.c Relicense drgn from GPLv3+ to LGPLv2.1+ 2022-11-01 17:05:16 -07:00
arch_i386.c Relicense drgn from GPLv3+ to LGPLv2.1+ 2022-11-01 17:05:16 -07:00
arch_ppc64_defs.py Add StackFrame.sp 2022-11-22 18:47:16 -08:00
arch_ppc64.c libdrgn: add DRGN_OBJECT scope guard 2023-09-28 22:31:11 -07:00
arch_riscv.c Relicense drgn from GPLv3+ to LGPLv2.1+ 2022-11-01 17:05:16 -07:00
arch_s390x_defs.py libdrgn: add s390x unwinding support 2022-12-19 13:48:44 -08:00
arch_s390x.c libdrgn: add DRGN_OBJECT scope guard 2023-09-28 22:31:11 -07:00
arch_x86_64_defs.py Add StackFrame.sp 2022-11-22 18:47:16 -08:00
arch_x86_64.c libdrgn: add last virtual address hint to page table iterator 2023-10-11 11:29:35 -07:00
array.h Relicense drgn from GPLv3+ to LGPLv2.1+ 2022-11-01 17:05:16 -07:00
binary_buffer.c Relicense drgn from GPLv3+ to LGPLv2.1+ 2022-11-01 17:05:16 -07:00
binary_buffer.h Relicense drgn from GPLv3+ to LGPLv2.1+ 2022-11-01 17:05:16 -07:00
binary_search_tree.h libdrgn: binary_search_tree: use a slightly different terminating loop hack 2023-09-13 15:53:11 -07:00
bitops.h Relicense drgn from GPLv3+ to LGPLv2.1+ 2022-11-01 17:05:16 -07:00
cfi.c Relicense drgn from GPLv3+ to LGPLv2.1+ 2022-11-01 17:05:16 -07:00
cfi.h Relicense drgn from GPLv3+ to LGPLv2.1+ 2022-11-01 17:05:16 -07:00
cityhash.h Relicense drgn from GPLv3+ to LGPLv2.1+ 2022-11-01 17:05:16 -07:00
cleanup.h libdrgn: add _cleanup_fclose_ scope guard 2023-08-17 15:42:13 -07:00
configure.ac libdrgn: mark log format as non-NULL and disable -Wformat-zero-length 2023-10-09 14:01:23 -07:00
debug_info.c libdrgn: string_builder: add STRING_BUILDER scope guard 2023-10-07 22:30:38 -07:00
debug_info.h libdrgn: embed drgn_debug_info in drgn_program 2023-10-02 11:27:36 -07:00
Doxyfile libdrgn: add read(2) and pread(2) wrappers that don't return short reads 2022-08-26 12:43:20 -07:00
drgn_program_parse_vmcoreinfo.inc.strswitch Add VMCOREINFO to special Linux Kernel objects 2023-08-18 22:21:13 -07:00
drgn.h.in Add DRGN_PROGRAM_IS_LOCAL flag 2023-10-06 16:09:58 -07:00
dwarf_constants.c libdrgn: dwarf_info: expand unknown DWARF expression opcode 2023-09-28 11:56:11 -07:00
dwarf_constants.h libdrgn: dwarf_info: expand unknown DWARF expression opcode 2023-09-28 11:56:11 -07:00
dwarf_info.c libdrgn: embed drgn_debug_info in drgn_program 2023-10-02 11:27:36 -07:00
dwarf_info.h libdrgn: set default number of OpenMP threads without hyperthreads 2023-08-18 08:33:56 -07:00
elf_file.c libdrgn: dwarf_info: read CU DIE with libdw in DWARF index 2023-07-19 10:10:08 -07:00
elf_file.h libdrgn: dwarf_info: read CU DIE with libdw in DWARF index 2023-07-19 10:10:08 -07:00
error.c libdrgn: string_builder: add STRING_BUILDER scope guard 2023-10-07 22:30:38 -07:00
error.h libdrgn: string_builder: add STRING_BUILDER scope guard 2023-10-07 22:30:38 -07:00
generics.h libdrgn: add macros for defining types conditionally 2023-08-16 14:13:54 -07:00
hash_table.c Relicense drgn from GPLv3+ to LGPLv2.1+ 2022-11-01 17:05:16 -07:00
hash_table.h libdrgn: get rid of compatible type requirement for {min,max}_iconst() 2023-08-16 14:12:11 -07:00
helpers.h drgn.helpers.linux.sched: add cpu_curr() helper 2023-06-29 15:58:52 -07:00
io.c Relicense drgn from GPLv3+ to LGPLv2.1+ 2022-11-01 17:05:16 -07:00
io.h Relicense drgn from GPLv3+ to LGPLv2.1+ 2022-11-01 17:05:16 -07:00
kdump.c Add VMCOREINFO to special Linux Kernel objects 2023-08-18 22:21:13 -07:00
language_c.c libdrgn: string_builder: add STRING_BUILDER scope guard 2023-10-07 22:30:38 -07:00
language.c Relicense drgn from GPLv3+ to LGPLv2.1+ 2022-11-01 17:05:16 -07:00
language.h Relicense drgn from GPLv3+ to LGPLv2.1+ 2022-11-01 17:05:16 -07:00
lazy_object.c Relicense drgn from GPLv3+ to LGPLv2.1+ 2022-11-01 17:05:16 -07:00
lazy_object.h Relicense drgn from GPLv3+ to LGPLv2.1+ 2022-11-01 17:05:16 -07:00
lexer.c libdrgn: revamp generic vector API 2023-08-16 14:13:38 -07:00
lexer.h libdrgn: require semicolon after DEFINE_{HASH,VECTOR,BINARY_SEARCH_TREE}* 2023-08-02 14:54:59 -07:00
linux_kernel_helpers.c libdrgn: add last virtual address hint to page table iterator 2023-10-11 11:29:35 -07:00
linux_kernel_object_find.inc.strswitch Add VMCOREINFO to special Linux Kernel objects 2023-08-18 22:21:13 -07:00
linux_kernel.c Add DRGN_PROGRAM_IS_LOCAL flag 2023-10-06 16:09:58 -07:00
linux_kernel.h libdrgn: detect flattened vmcores and raise error 2023-08-16 09:41:26 -07:00
log.c libdrgn: add simple logging framework 2023-07-18 12:47:34 -07:00
log.h libdrgn: mark log format as non-NULL and disable -Wformat-zero-length 2023-10-09 14:01:23 -07:00
Makefile.am libdrgn: add cleanup.h to Makefile.am sources 2023-08-24 10:33:19 -07:00
memory_reader.c libdrgn: require semicolon after DEFINE_{HASH,VECTOR,BINARY_SEARCH_TREE}* 2023-08-02 14:54:59 -07:00
memory_reader.h libdrgn: require semicolon after DEFINE_{HASH,VECTOR,BINARY_SEARCH_TREE}* 2023-08-02 14:54:59 -07:00
minmax.h libdrgn: get rid of compatible type requirement for {min,max}_iconst() 2023-08-16 14:12:11 -07:00
nstring.h Relicense drgn from GPLv3+ to LGPLv2.1+ 2022-11-01 17:05:16 -07:00
object_index.c libdrgn: embed type and object finders in drgn_debug_info 2023-09-29 12:00:31 -07:00
object_index.h libdrgn: embed type and object finders in drgn_debug_info 2023-09-29 12:00:31 -07:00
object.c libdrgn: add DRGN_OBJECT scope guard 2023-09-28 22:31:11 -07:00
object.h libdrgn: support value objects with >64-bit integer types 2023-08-02 14:21:46 -07:00
openmp.c libdrgn: set default number of OpenMP threads without hyperthreads 2023-08-18 08:33:56 -07:00
openmp.h libdrgn: set default number of OpenMP threads without hyperthreads 2023-08-18 08:33:56 -07:00
orc_info.c libdrgn: orc_info: don't assume ORC section alignment 2023-08-21 15:18:26 -07:00
orc_info.h libdrgn: orc_info: handle ORC changes in Linux 6.3 and 6.4 2023-06-22 15:27:39 -07:00
orc.h libdrgn: orc_info: handle ORC changes in Linux 6.3 and 6.4 2023-06-22 15:27:39 -07:00
path.c Relicense drgn from GPLv3+ to LGPLv2.1+ 2022-11-01 17:05:16 -07:00
path.h Relicense drgn from GPLv3+ to LGPLv2.1+ 2022-11-01 17:05:16 -07:00
platform.c libdrgn: add stub s390 and s390x architectures with relocation implementation 2022-12-19 13:48:44 -08:00
platform.h libdrgn: add last virtual address hint to page table iterator 2023-10-11 11:29:35 -07:00
pp.h Relicense drgn from GPLv3+ to LGPLv2.1+ 2022-11-01 17:05:16 -07:00
program.c Add DRGN_PROGRAM_IS_LOCAL flag 2023-10-06 16:09:58 -07:00
program.h libdrgn: embed drgn_debug_info in drgn_program 2023-10-02 11:27:36 -07:00
register_state.c libdrgn: embed drgn_debug_info in drgn_program 2023-10-02 11:27:36 -07:00
register_state.h libdrgn: add drgn_register_state_dup() 2023-08-24 16:05:23 -07:00
serialize.c Relicense drgn from GPLv3+ to LGPLv2.1+ 2022-11-01 17:05:16 -07:00
serialize.h libdrgn: support value objects with >64-bit integer types 2023-08-02 14:21:46 -07:00
splay_tree.c Relicense drgn from GPLv3+ to LGPLv2.1+ 2022-11-01 17:05:16 -07:00
stack_trace.c libdrgn: string_builder: add STRING_BUILDER scope guard 2023-10-07 22:30:38 -07:00
stack_trace.h Relicense drgn from GPLv3+ to LGPLv2.1+ 2022-11-01 17:05:16 -07:00
string_builder.c libdrgn: string_builder: add STRING_BUILDER scope guard 2023-10-07 22:30:38 -07:00
string_builder.h libdrgn: string_builder: add STRING_BUILDER scope guard 2023-10-07 22:30:38 -07:00
symbol.c Relicense drgn from GPLv3+ to LGPLv2.1+ 2022-11-01 17:05:16 -07:00
symbol.h Relicense drgn from GPLv3+ to LGPLv2.1+ 2022-11-01 17:05:16 -07:00
type.c libdrgn: embed type and object finders in drgn_debug_info 2023-09-29 12:00:31 -07:00
type.h libdrgn: embed type and object finders in drgn_debug_info 2023-09-29 12:00:31 -07:00
util.h libdrgn: util.h: include <limits.h> 2023-08-17 15:40:43 -07:00
vector.h libdrgn: vector: support using a smaller type for size/capacity 2023-08-16 14:14:59 -07:00