[PATCH v3 0/2] Support position independent execution

Anup Patel Anup.Patel at wdc.com
Fri Mar 19 09:41:49 GMT 2021



> -----Original Message-----
> From: opensbi <opensbi-bounces at lists.infradead.org> On Behalf Of Vincent
> Chen
> Sent: 17 March 2021 06:47
> To: opensbi at lists.infradead.org
> Cc: Vincent Chen <vincent.chen at sifive.com>
> Subject: [PATCH v3 0/2] 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 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.
> 
> Changes from v2 patch:
> 1. Drop the relocation in FW_JUMP_FDT_ADDR, FW_JUMP_ADDR and
> FW_PAYLOAD_FDT_ADDR.
> 2. Code refinement
> 
> Changes from v1 patch:
> 1. Add -fpic to ASFLAGS and then remove the ".option pic" from fw_base.S 2.
> Append the required flags to $(firmware-genflags-y), $(firmware-cflags-y)
>    and $(firmware-ldflags-y) instead of modifying top Makefile.
> 3. Rearrange the patches
> 
> Vincent Chen (2):
>   firmware: Use lla to access all global symbols
>   firmware: Support position independent execution

This is a very good feature addition to OpenSBI. Thanks for doing it.

Regards,
Anup

> 
>  Makefile                      |   2 +-
>  firmware/fw_base.S            | 150 +++++++++++++++++++++++++++++-------
> ------
>  firmware/fw_base.ldS          |  13 ++++
>  firmware/fw_dynamic.S         |  18 ++---
>  firmware/fw_jump.S            |   2 +-
>  firmware/fw_payload.S         |   2 +-
>  firmware/objects.mk           |   7 ++
>  firmware/payloads/test_head.S |  18 ++---
>  include/sbi/riscv_elf.h       |  14 ++++
>  9 files changed, 160 insertions(+), 66 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



More information about the opensbi mailing list