Re: Hyplets - User Space Interrupts

Marc Zyngier <[email protected]> Sat, 09 Jun 2018 13:57:18 +0100
Newsgroups gmane.linux.ports.arm.general
Organization ARM Ltd
Message-ID <[email protected]>
On Fri, 08 Jun 2018 13:55:02 +0100,
raz wrote:
> 
> We would like to present ARM hyplets. Hyplets are an innovative way
> to code interrupt service routines under ARM.  Hyplets provide high
> performance, security, running time predictability ,an RPC mechanism
> and a possible solution for the priority inversion problem. Hyplets
> uses special features of ARM hypervisor memory architecture.  We
> demonstrate Hyplets implementation in the C programming language on
> ARMv8 platform and under the Linux kernel.  We provide performance
> measurements, use cases and security scenarios.
> 
> Hyplets are based on the concept of a delicate separation within a
> running process. Instead of running multiple operating systems
> kernels in order to segment and divide the system resources, the
> hyplet divides the Linux process into two execution modes. One part
> of the process would execute in an isolated, non-interrupted
> privileged safe execution environment while other parts of the
> process would execute in a regular user mode. However, both
> execution modes run in the same Application processors.

I haven't had a chance to look at the code (the provided URL just
gives me a 502), but mentioning userspace-controlled code at EL2 and
security in the same sentence sounds a bit... odd.


> The trivial approach of migrating code to kernel space to improve
> performance requires a high level of kernel programming skills.
> Alternatively, if we try to access a user space code from the ISR,
> it would probably require a context switch because there is no
> guarantee that the current process in the processor is the one with
> hyplet code. We needed to make sure that the hyplet code is always
> accessible and this could be achieved only by disabling evacuation
> of the hyplet code and data from the current translation table. So,
> we we chose to use TTBR0_EL2 ( the translation table register) to
> constantly hold the hyplet code.  In order to map user space tasks
> we modified the Linux ARM-KVM mappings infrastructure to map a user
> space code in tandem with some kernel space data.

So writing kernel code is hard, but writing hypervisor-level is much
easier? I'll try to remember that! ;-)

Again, I couldn't look at your code nor any data, but have you
considered using the KVM API to run code as a guest at EL1 instead? I
know of at least one project doing so to get the kernel out of the way
and get fast timer access.

Thanks,

	M.

-- 
Jazz is not dead, it just smell funny.