gpg: New caching functions.
authorWerner Koch <wk@gnupg.org>
Sat, 13 Apr 2019 09:48:58 +0000 (11:48 +0200)
committerWerner Koch <wk@gnupg.org>
Sat, 13 Apr 2019 09:48:58 +0000 (11:48 +0200)
commit64a5fd37271a3e454c0d59ac3500e1a1b232e4f7
tree55cc3b73fe82d0d16491df9843789b49e80bca9a
parent60f384592144de53c9a5f5e11d7f73ce863aa94f
gpg: New caching functions.

* g10/objcache.c: New.
* g10/objcache.h: New.
* g10/Makefile.am (common_source): Add them.
* g10/gpg.c: Include objcache.h.
(g10_exit): Call objcache_dump_stats.
* g10/getkey.c: Include objcache.h.
(get_primary_uid, release_keyid_list): Remove.
(cache_user_id): Remove.
(finish_lookup): Call the new cache_put_keyblock instead of
cache_user_id.
(get_user_id_string): Remove code for mode 2.
(get_user_id): Implement using cache_get_uid_bykid.
--

This generic caching module is better than the ad-hoc code we used in
getkey.c.  More cleanup in getkey is still required but it is a
start.  There is also a small performance increase with the new cache:

With a large keyring and --list-sigs I get these numbers:

|      | before     | after      |
|------+------------+------------|
| real | 14m1.028s  | 12m16.186s |
| user |  2m18.484s |  1m36.040s |
| sys  | 11m42.420s | 10m40.044s |

Note the speedup in the user time which is due to the improved cache
algorithm.  This is obvious, because the old cache was just a long
linked list; the new cache are two hash tables.

Signed-off-by: Werner Koch <wk@gnupg.org>
g10/Makefile.am
g10/getkey.c
g10/gpg.c
g10/objcache.c [new file with mode: 0644]
g10/objcache.h [new file with mode: 0644]