From 035873283b3f7514ad77d409870ccfd5f9680d9e Mon Sep 17 00:00:00 2001 From: Anthony Liguori Date: Mon, 13 May 2013 15:22:24 -0500 Subject: qom: aggressively optimize qom casting This patch adds a small typename cache to ObjectClass. This allows caching positive casts within each ObjectClass. Benchmarking a PPC workload provided by Aurelien, this patch eliminates every single g_hash_table_lookup() happening during the benchmark (which was about 2 million per-second). With this patch applied, I get exactly the same performance (within the margin of error) as with --disable-qom-cast-debug. N.B. it's safe to cache typenames only from the _assert() macros because they are always called with string literals. Signed-off-by: Anthony Liguori --- include/qom/object.h | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'include') diff --git a/include/qom/object.h b/include/qom/object.h index 63e2a40..23fc048 100644 --- a/include/qom/object.h +++ b/include/qom/object.h @@ -344,6 +344,8 @@ typedef void (ObjectUnparent)(Object *obj); */ typedef void (ObjectFree)(void *obj); +#define OBJECT_CLASS_CAST_CACHE 4 + /** * ObjectClass: * @@ -356,6 +358,8 @@ struct ObjectClass Type type; GSList *interfaces; + const char *cast_cache[OBJECT_CLASS_CAST_CACHE]; + ObjectUnparent *unparent; }; -- cgit v1.1