The list command by default uses a hash table for loop detection, and thus
uses an increasing amount of memory as each list entry is traversed. For
larger lists, this can be a significant problem. We have even seen where
crash commands run for days iterating lists, mostly due to the fact that
the ever-increasing memory causes crash to slow down. There is an option
to avoid the overhead of the hash table, "hash off", but then you lose the
ability to detect a loop.
This patchset adds an alternative algorithm for loop detection while only
using a fixed amount of memory. The '-B' option is added to the 'list'
command which invokes this new algorithm rather than the hash table.
In addition to the low memory usage, the output of the list command is
slightly different when a loop is detected. In addition to printing
the first duplicate, the length of the loop and the distance to the
loops is output.
Dave Wysochanski (6):
Add do_list_no_hash() function similar to do_list() but without hash.
do_list_no_hash: factor out all the debug statements at entry into
do_list_debug_entry
do_list_no_hash: factor out structure output into static function
do_list_no_hash: factor out a small readmem function
Implement R. P. Brent's algorithm for loop detection for 'list'
command.
Add a '-B' flag to the list command to call the brent algorithm.
defs.h | 2 +
help.c | 6 ++
tools.c | 288 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
3 files changed, 292 insertions(+), 4 deletions(-)
--
1.8.3.1