Skip to content

Commit

Permalink
configure: fix performance regression due to PIC objects
Browse files Browse the repository at this point in the history
Because most files in QEMU are grouped into static libraries, Meson conservatively
compiles them with -fPIC.  This is overkill and produces slowdowns up to 20% on
some TCG tests.

As a stopgap measure, use the b_staticpic option to limit the slowdown to
--enable-pie.  mesonbuild/meson#7760 will allow
us to use b_staticpic=false and let Meson do the right thing.

Reported-by: Ahmed Karaman <ahmedkrmn@outlook.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Message-Id: <20200919155639.1045857-1-pbonzini@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  • Loading branch information
bonzini committed Oct 7, 2020
1 parent 8fd3ea3 commit 8657982
Show file tree
Hide file tree
Showing 6 changed files with 31 additions and 3 deletions.
1 change: 1 addition & 0 deletions MAINTAINERS
Original file line number Diff line number Diff line change
Expand Up @@ -2462,6 +2462,7 @@ F: include/monitor/qdev.h
F: include/qom/
F: qapi/qom.json
F: qapi/qdev.json
F: scripts/coccinelle/qom-parent-type.cocci
F: softmmu/qdev-monitor.c
F: qom/
F: tests/check-qom-interface.c
Expand Down
1 change: 1 addition & 0 deletions configure
Original file line number Diff line number Diff line change
Expand Up @@ -7209,6 +7209,7 @@ NINJA=${ninja:-$PWD/ninjatool} $meson setup \
-Dwerror=$(if test "$werror" = yes; then echo true; else echo false; fi) \
-Dstrip=$(if test "$strip_opt" = yes; then echo true; else echo false; fi) \
-Db_pie=$(if test "$pie" = yes; then echo true; else echo false; fi) \
-Db_staticpic=$(if test "$pie" = yes; then echo true; else echo false; fi) \
-Db_coverage=$(if test "$gcov" = yes; then echo true; else echo false; fi) \
-Dmalloc=$malloc -Dmalloc_trim=$malloc_trim -Dsparse=$sparse \
-Dkvm=$kvm -Dhax=$hax -Dwhpx=$whpx -Dhvf=$hvf \
Expand Down
2 changes: 1 addition & 1 deletion include/hw/acpi/vmgenid.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
OBJECT_DECLARE_SIMPLE_TYPE(VmGenIdState, VMGENID)

struct VmGenIdState {
DeviceClass parent_obj;
DeviceState parent_obj;
QemuUUID guid; /* The 128-bit GUID seen by the guest */
uint8_t vmgenid_addr_le[8]; /* Address of the GUID (little-endian) */
};
Expand Down
2 changes: 1 addition & 1 deletion include/hw/misc/vmcoreinfo.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ DECLARE_INSTANCE_CHECKER(VMCoreInfoState, VMCOREINFO,
typedef struct fw_cfg_vmcoreinfo FWCfgVMCoreInfo;

struct VMCoreInfoState {
DeviceClass parent_obj;
DeviceState parent_obj;

bool has_vmcoreinfo;
FWCfgVMCoreInfo vmcoreinfo;
Expand Down
2 changes: 1 addition & 1 deletion include/net/can_host.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
OBJECT_DECLARE_TYPE(CanHostState, CanHostClass, CAN_HOST)

struct CanHostState {
ObjectClass oc;
Object oc;

CanBusState *bus;
CanBusClientState bus_client;
Expand Down
26 changes: 26 additions & 0 deletions scripts/coccinelle/qom-parent-type.cocci
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
// Highlight object declarations that don't look like object class but
// accidentally inherit from it.

@match@
identifier obj_t, fld;
type parent_t =~ ".*Class$";
@@
struct obj_t {
parent_t fld;
...
};

@script:python filter depends on match@
obj_t << match.obj_t;
@@
is_class_obj = obj_t.endswith('Class')
cocci.include_match(not is_class_obj)
@replacement depends on filter@
identifier match.obj_t, match.fld;
type match.parent_t;
@@
struct obj_t {
* parent_t fld;
...
};

0 comments on commit 8657982

Please sign in to comment.