[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Minios-devel] [UNIKRAFT PATCHv4 22/43] plat/kvm: Allow access to floating-point and Advanced SIMD registers
Hi Yuri, > -----Original Message----- > From: Yuri Volchkov <yuri.volchkov@xxxxxxxxx> > Sent: 2018年7月23日 17:52 > To: Wei Chen <Wei.Chen@xxxxxxx>; Sharan Santhanam > <sharan.santhanam@xxxxxxxxx>; > minios-devel@xxxxxxxxxxxxxxxxxxxx; simon.kuenzer@xxxxxxxxx > Cc: Kaly Xin <Kaly.Xin@xxxxxxx>; Julien Grall <Julien.Grall@xxxxxxx>; nd > <nd@xxxxxxx>; Dave P Martin <Dave.Martin@xxxxxxx> > Subject: Re: [Minios-devel] [UNIKRAFT PATCHv4 22/43] plat/kvm: Allow access to > floating-point and Advanced SIMD registers > > Hi Wei > > > As Unikraft is not a kernel. > That is not completely true. That is matter of terminology. We still > separate "kernel" (or "core" if you like) code from the > "application". Even though it is melted together into one address space. > > Or do you mean it is not a kernel because it runs as a qemu process? > From that perspective yes.. but that is still an OS (virtualized > though). If linux runs in KVM it has a kernel anyways.. > I said it's not a kernel is from the user's view. If you transfer nginx to Unikraft-nginx. I don't think the user will consider Unikraft-nginx is kernel. But from technology view, yes, LIBOS still have the features of a kernel has. > I think it would be best to disable floating point for "core" part. And > if a specific application (e.g. DPDK) needs it, only that application's > code should be build with floating point support. > No, it's not realistic, the FP feature is a CPU feature. Except we want to do a switch for core and application, We can't enable it for application part only. What we can do is enable FP&SIMD registers access for application but disable FP&SIMD registers for core part through GCC flags. But this means we need two independent code for common functions. For example, you have to compile uk_print_nofp for core with -mgeneric-registers-only, and compile Uk_print for applications. > If we do it, I think it is good idea to implement it in the follow up > patches. > > -Yuri. > > Wei Chen <Wei.Chen@xxxxxxx> writes: > > > Hi Sharan, > > > >> -----Original Message----- > >> From: Sharan Santhanam <sharan.santhanam@xxxxxxxxx> > >> Sent: 2018年7月20日 21:28 > >> To: Wei Chen <Wei.Chen@xxxxxxx>; minios-devel@xxxxxxxxxxxxxxxxxxxx; > >> simon.kuenzer@xxxxxxxxx > >> Cc: Julien Grall <Julien.Grall@xxxxxxx>; Kaly Xin <Kaly.Xin@xxxxxxx>; nd > >> <nd@xxxxxxx>; Dave P Martin <Dave.Martin@xxxxxxx> > >> Subject: Re: Re: [Minios-devel] [UNIKRAFT PATCHv4 22/43] plat/kvm: Allow > >> access to floating-point and Advanced SIMD registers > >> > >> Hello, > >> > >> On 07/09/2018 12:48 PM, Julien Grall wrote: > >> > (+ Dave) > >> > > >> > On 09/07/18 10:47, Wei Chen wrote: > >> >> Hi, Julien, > >> > > >> > Hi Wei, > >> > > >> >> > >> >>> -----Original Message----- > >> >>> From: Julien Grall <julien.grall@xxxxxxx> > >> >>> Sent: 2018年7月8日 6:17 > >> >>> To: Wei Chen <Wei.Chen@xxxxxxx>; minios-devel@xxxxxxxxxxxxxxxxxxxx; > >> >>> simon.kuenzer@xxxxxxxxx > >> >>> Cc: Kaly Xin <Kaly.Xin@xxxxxxx>; nd <nd@xxxxxxx> > >> >>> Subject: Re: [Minios-devel] [UNIKRAFT PATCHv4 22/43] plat/kvm: Allow > >> access to > >> >>> floating-point and Advanced SIMD registers > >> >>> > >> >>> Hi, > >> >>> > >> >>> On 07/06/2018 10:03 AM, Wei Chen wrote: > >> >>>> On Arm64, when we want to print out some message, the va_list will > >> >>>> use the SIMD&FP registers (like q0, q1) to store parameters. So, we > >> >>>> have to disable the trap of accessing floating-point and Advanced SIMD > >> >>>> registers to make va_list use SIMD&FP registers properly. > >> >>> > >> >>> I don't think this is true. Xen and Linux don't use SIMD&FP registers > as > >> >>> this would require to context switch at every entry. Yet we are able to > >> >>> use va_list without SIMD&FP registers. > >> >>> > >> >> > >> >> This is true, because Linux and Xen doesn't support float print. > >> >> Unikraft kernel just a part of an application, its print library need > >> >> To support float. Just like nolibc, when GCC compiling this library, > >> >> it doesn't care you are running EL1 or EL0, the generated code will > >> >> access q0, q1. When you're running this code in EL1 without SIMD&FP, > >> >> system crash. > >> > > >> > >> According to the [2] and [4], Cortex-A53 could be configured and > >> linux[3] has support for running the soft floating point. But in our > >> description of Cortex-A53 in "arch/arm/arm64/Config.uk" we restrict it. > >> > >> Do we plan to support it in the future? > > > > Hmm, Both floating-point and NEON are required in all standard ARMv8 > > implementations. However, as the document[2] mentioned, implementations > > targeting specialized markets may support No NEON or floating-point. > > > > Although I don't really want to support it, but I think I don't have > > choice. I have to support such specialized users, I prefer to introduce > > a new target CPU cortex-A53+NOFP to support it in another patch series. > > > > About document[3], I can't open the original URL, but I find it in > > http://lists-archives.com/linux-kernel/28688456-arm64-support-systems- > without-fp-asimd.html > > > > This patch is not for soft floating. It's used to avoid save fp&simd > > registers in context switch when fpsimd feature is absent. > > And GCC for AArch64 doesn't support soft-float, if users select the > > +NOFP option, he must confirm the code don't contain any float type. > > > >> > >> > When will q0, q1 will be accessed? Is it only when floating point will > >> > be printed? > >> > > >> > >> The document[1], mentions that register qN are used only for floating > >> and vector operations. In appendix B, where they explain about the > > > > Sorry, I haven't found "only" from [1], I just found "can" : ) > > > >> variadic calling conventions it mentions prologue of the variadic > >> function creates a separate variadic stack frame and if the Floating > >> points arguments or vector arguments are not passed as a variadic > >> argument qN register do not have to be saved and restored. > >> > >> For further reference, section 5.4[1] describe how the function > >> parameters are passed and how the SIMD/floating point register are used. > >> Appendix B of the document gives a description of variadic functions. > >> > > > > So, without -mgeneral-regs-only flag, gcc va_start, va_list will use > > qN to pass parameters. As Unikraft is not a kernel, it's part of an > > application, we will transfer lots of userspace libraries and applications > > to unikriaft libraries and applications. And most applications on Cloud > > like DPDK or other network application, the already use SIMD and other > > vector operations to accelerate transfer speed. Not to mention the image > > processing applications, FP is mandatory. > > > > > > So I prefer to keep FP&SIMD enabled by default, except +NOFP be selected > > Explicitly. > > > >> > Also, IIUC, the kernel code will be compiled with floating point, right? > >> > If so, it means the compiler will be able to use floating point for some > >> > optimization. This will become a problem when receiving a trap as you > >> > would need to context switch the registers (this assume handler may use > FP). > >> > > >> > Cheers, > >> > > >> > >> > >> > >> > >> [1] > >> > http://infocenter.arm.com/help/topic/com.arm.doc.ihi0055b/IHI0055B_aapcs64.pdf > >> > >> [2] > >> https://developer.arm.com/products/architecture/cpu-architecture/a- > >> profile/docs/112086438/latest/software-implications-for-v8-a- > implementations- > >> with-no-hardware-floating-point > >> > >> [3] https://patchwork.kernel.org/patch/9405787/ > >> > >> [4] > >> > http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0773b/chr138314 > >> 3713787.html > >> > >> Thanks & Regards > >> Sharan > > _______________________________________________ > > Minios-devel mailing list > > Minios-devel@xxxxxxxxxxxxxxxxxxxx > > https://lists.xenproject.org/mailman/listinfo/minios-devel > > -- > Yuri Volchkov > Software Specialist > > NEC Europe Ltd > Kurfürsten-Anlage 36 > D-69115 Heidelberg _______________________________________________ Minios-devel mailing list Minios-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/minios-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |