[PATCH 0/3] Support position independent execution
Anup Patel
Anup.Patel at wdc.com
Thu Mar 4 07:33:14 GMT 2021
Hi Vincent,
Overall the changes are in quite good shape.
I have few high-level comments before I can review fw_base.S in detail:
1) No need to change toplevel Makefile for appending compiler and linker
options. It is better to update $(firmware-genflags-y), $(firmware-cflags-y)
and $(firmware-ldflags-y) in firmware/objects.mk
2) I would suggest to squash PATCH2 and PATCH3 into one PATCH and
make this PATCH as PATCH1
3) The current PATCH1 can be PATCH2
> -----Original Message-----
> From: opensbi <opensbi-bounces at lists.infradead.org> On Behalf Of Vincent
> Chen
> Sent: 02 March 2021 20:56
> To: opensbi at lists.infradead.org
> Cc: vincent.chen at sifive.com
> Subject: [PATCH 0/3] Support position independent execution
>
> This patch set enables OpenSBI to support position-independent execution
> so that one OpenSBI generic firmware can run on multiple platforms, even if
> they have different memory base addresses. However, the PIC code will
> decrease a bit of performance. The 2nd and 3rd patches are used to reduce
> this impact of the PIC.
>
> The performance loss of PIC comes from two additional operations. One is
> from the symbol relocation in the beginning stage, and another one is from
> the GOT reference (auipc + load GOT) in the OpenSBI lifetime. The former
> only affects the boot time, but the latter will affect the performance of the
> OpenSBI payload such as the Linux kernel. After analyzing the fw_payload.elf
> of the generic platform, 27 symbols use the GOT reference method to get
> their address. Fortunately, 17 of these symbols are accessed once during the
> initialized step. Only the remaining
> 10 symbols may be called repeatedly during the lifetime, which are 1.
> hartid_to_domain_table 2. hartid_to_scratch_table 3.
> sbi_hart_expected_trap 4. sbi_tlb_local_hfence_vvma 5.
> sbi_tlb_local_hfence_gvma 6. sbi_tlb_local_sfence_vma_asid 7.
> sbi_tlb_local_fence_i 8. sbi_tlb_local_hfence_gvma 9.
> sbi_tlb_local_hfence_vvma 10. sbi_tlb_local_sfence_vma From these 10
> symbols, I think the IPI handler may be one of the critical and commonly used
> paths affected by the PIC mode. Therefore, I create two kernel modules,
> One keeps issuing the REMOTE_FENCE_I request and the other one keeps
> issuing REMOTE_SFENCE_VMA request. These two modules are executed on
> the unleashed board to measure the consumed time of the
> sbi_tlb_request().
> I found the PIC causes a 1.6% and 4.1% performance loss in addressing
> REMOTE_FENCE_I and REMOTE_SFENCE_VMA, respectively. In addition, to
> observe the impact of PIC mode in the general usage cases, I use SPEC2006
> to benchmark performance. However, I could not observe any performance
> impact from the results. Based on the above two results, I think the
> performance impact of the PIC may not be obvious in general usage. Just in
> case, this patch still creates an FW_PIC option for users to configure the build
> options.
>
> Vincent Chen (3):
> firmware: Support position independent execution
> firmware: fw_base: Use lla to access the global symbols defined in
> fw_base.S
> firware: Use lla to access all global symbols
>
> Makefile | 10 +++++
> firmware/fw_base.S | 116
> ++++++++++++++++++++++++++++++++++++------------
> firmware/fw_base.ldS | 13 ++++++
> firmware/fw_dynamic.S | 18 ++++----
> firmware/fw_jump.S | 12 ++++-
> firmware/fw_payload.S | 8 +++-
> include/sbi/riscv_elf.h | 9 ++++
> 7 files changed, 147 insertions(+), 39 deletions(-) create mode 100644
> include/sbi/riscv_elf.h
>
> --
> 2.7.4
>
>
> --
> opensbi mailing list
> opensbi at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/opensbi
Regards,
Anup
More information about the opensbi
mailing list