[pacman-dev] [PATCH] Convert package filelists to an array instead of linked list

Allan McRae allan at archlinux.org
Tue Jul 19 07:57:49 EDT 2011


On 19/07/11 20:01, Dan McGee wrote:
> This accomplishes quite a few things with one rather invasive change.
>
> 1. Iteration is much more performant, due to a reduction in pointer
>     chasing and linear item access.
> 2. Data structures are smaller- we no longer have the overhead of the
>     linked list as the file struts are now laid out consecutively in
>     memory.
> 3. Memory allocation has been massively reworked. Before, we would
>     allocate three different pieces of memory per file item- the list
>     struct, the file struct, and the copied filename. What this resulted
>     in was massive fragmentation of memory when loading filelists since
>     the memory allocator had to leave holes all over the place. The new
>     situation here now removes the need for any list item allocation;
>     allocates the file structs in contiguous memory (and reallocs as
>     necessary), leaving only the strings as individually allocated. Tests
>     using valgrind (massif) show some pretty significant memory
>     reductions on the worst case `pacman -Ql>  /dev/null` (366387 files
>     on my machine):
>
>     Before:
>       Peak heap:   54,416,024 B
> 	 Useful heap: 36,840,692 B
> 	 Extra heap:  17,575,332 B
>
>     After:
>       Peak heap:   38,004,352 B
> 	 Useful heap: 28,101,347 B
> 	 Extra heap:   9,903,005 B
>
> Several small helper methods have been introduced, including a list to
> array conversion helper as well as a filelist merge sort that works
> directly on arrays.
>


Minor comments:

Maybe want to look at consistency between the two places where file 
lists are read (local_db_read, _alpm_pkg_load_internal).  e.g. starting 
with size 4 vs 8, freeing excess memory at the end.

Do you intend to just make filelist_operation return an array at a later 
stage?

Allan




More information about the pacman-dev mailing list