Hi Genodians, I am a graduate student at the University of British Columbia with their Systopia Lab http://systopia.cs.ubc.ca/. My research area is operating systems, and I would like to use Genode(with seL4) as the OS platform for demonstrating my research ideas. As with starting with a new platform I have run into some hurdles. At the end I have given a summary of my research project, which is still in a nascent stage.
- *Running the hello_tutorial*: the hello_tutorial job on qemu does not finish to completing and times out. Below are my steps on ubuntu 20.04.1. I am using the Genode development container https://genodians.org/skalk/2020-09-29-docker-devel, so the tools should not an issue. I also tried it outside the container.
git clone git://github.com/genodelabs/genode.git cd genode tool/ports/prepare_port sel4 tool/ports/prepare_port grub2 tool/create_builddir x86_64
cd x86_64/build/ # Change build/x86_64/etc/build.conf. # Change kernel to sel4 and add hello_tutorial diff etc/build.conf.old etc/build.conf
20c20
< #KERNEL ?= nova
---
KERNEL ?= sel4
85a86
REPOSITORIES += $(GENODE_DIR)/repos/hello_tutorial
make make hello make run/hello # This times out as shown below.
[init -> hello_server] creating root component [0m [0m [init -> hello_client] upgrading quota donation for PD session (0 bytes, 4 caps) [0m [0m [init] child "hello_server" requests resources: cap_quota=3 [0m [0m [init] child "hello_client" requests resources: ram_quota=0, cap_quota=4 [0m [0m Error: Test execution timed out
Any comments on what I am doing wrong would be very helpful. Secondly, what would be the best way to go about debugging an issue like this.
- Summary of my research project https://sid-agrawal.ca/index.html#research-projects on building "General Purpose Isolation Mechanisms".
After sixty years of operating system evolution, we continue to find new and different isolation mechanisms: threads, processes, containers, virtual machines, lightweight contexts. Even applications provide isolation mechanisms: a JVM is a user-level process that provides isolation units whose API is Java bytecodes; some browsers offer units of isolation between each browser tab.
We ask whether we really need to have N different isolation mechanisms or, instead, we could develop a framework in which all these different mechanisms represent points on a continuum. If we could do that, then perhaps A) we could implement such a unified framework, and B) the framework might allow us to discover new and useful isolation mechanisms (that could be created seamlessly rather than requiring an entirely new implementation).
The project has three main goals:
- Develop a theoretical model or framework to unify existing isolation mechanisms. - Identify novel points in the model that are useful. - Implement the model in seL4.
The Fig below shows how different access and isolation levels of memory can be used to construct different types of PD. The points along the Y-axis are building blocks of memory isolation. The points on the X-axis are different types of PD. A given PD can be constructed using different building blocks, which are represented as circles that intersect one or more blocks. Mapping these concepts to Genode,
This is an evolving model, as we are still investigating:
- If the "Security and Performance Guarantees" across any two types of PD can be compared. - Should there be more building blocks on the Y-axis - What novel types of PD can we come up by combining the different building blocks
[image: image]
I am excited about building my project with Genode, the composability in its architecture make it well suited as platform to show unconventional OS ideas.
Best, Sid sid-agrawal.ca
Gesendet: Donnerstag, 23. September 2021 um 01:04 Uhr Von: "Sid Agrawal" siagraw@cs.ubc.ca An: users@lists.genode.org Betreff: Getting Started with Genode
Hi Genodians, I am a graduate student at the University of British Columbia with their Systopia Lab http://systopia.cs.ubc.ca/. My research area is operating systems, and I would like to use Genode(with seL4) as the OS platform for demonstrating my research ideas. As with starting with a new platform I have run into some hurdles. At the end I have given a summary of my research project, which is still in a nascent stage.
- *Running the hello_tutorial*: the hello_tutorial job on qemu does not
finish to completing and times out. Below are my steps on ubuntu 20.04.1. I am using the Genode development container https://genodians.org/skalk/2020-09-29-docker-devel, so the tools should not an issue. I also tried it outside the container.
git clone git://github.com/genodelabs/genode.git cd genode tool/ports/prepare_port sel4 tool/ports/prepare_port grub2 tool/create_builddir x86_64
cd x86_64/build/ # Change build/x86_64/etc/build.conf. # Change kernel to sel4 and add hello_tutorial diff etc/build.conf.old etc/build.conf
20c20
< #KERNEL ?= nova
KERNEL ?= sel4
85a86
REPOSITORIES += $(GENODE_DIR)/repos/hello_tutorial
make make hello make run/hello # This times out as shown below.
[init -> hello_server] creating root component [0m [0m [init -> hello_client] upgrading quota donation for PD session (0 bytes, 4 caps) [0m [0m [init] child "hello_server" requests resources: cap_quota=3 [0m [0m [init] child "hello_client" requests resources: ram_quota=0, cap_quota=4 [0m [0m Error: Test execution timed out
Any comments on what I am doing wrong would be very helpful. Secondly, what would be the best way to go about debugging an issue like this.
- Summary of my research project
https://sid-agrawal.ca/index.html#research-projects on building "General Purpose Isolation Mechanisms".
After sixty years of operating system evolution, we continue to find new and different isolation mechanisms: threads, processes, containers, virtual machines, lightweight contexts. Even applications provide isolation mechanisms: a JVM is a user-level process that provides isolation units whose API is Java bytecodes; some browsers offer units of isolation between each browser tab.
We ask whether we really need to have N different isolation mechanisms or, instead, we could develop a framework in which all these different mechanisms represent points on a continuum. If we could do that, then
Never a contnuum, because there are discete steps.
perhaps A) we could implement such a unified framework, and B) the framework might allow us to discover new and useful isolation mechanisms (that could be created seamlessly rather than requiring an entirely new implementation).
The project has three main goals:
- Develop a theoretical model or framework to unify existing isolation mechanisms.
See the flags of the syscall clone() on linux. The only isolation level that is not there is 'interpreter' (You call it VM).
- Identify novel points in the model that are useful. - Implement the model in seL4.
The Fig below shows how different access and isolation levels of memory can be used to construct different types of PD. The points along the Y-axis are building blocks of memory isolation. The points on the X-axis are different types of PD. A given PD can be constructed using different building blocks, which are represented as circles that intersect one or more blocks. Mapping these concepts to Genode,
This is an evolving model, as we are still investigating:
- If the "Security and Performance Guarantees" across any two types of PD can be compared.
building blocks
- Should there be more building blocks on the Y-axis
- What novel types of PD can we come up by combining the different
[image: image]
I am excited about building my project with Genode, the composability in its architecture make it well suited as platform to show unconventional OS ideas.
Best, Sid sid-agrawal.ca _______________________________________________ Genode users mailing list users@lists.genode.org https://lists.genode.org/listinfo/users
Hello Sid, welcome to the list!
On Thu, Sep 23, 2021 at 01:04:28 CEST, Sid Agrawal wrote:
- *Running the hello_tutorial*: the hello_tutorial job on qemu does not
finish to completing and times out. Below are my steps on ubuntu 20.04.1. I am using the Genode development container https://genodians.org/skalk/2020-09-29-docker-devel, so the tools should not an issue. I also tried it outside the container.
git clone git://github.com/genodelabs/genode.git cd genode tool/ports/prepare_port sel4 tool/ports/prepare_port grub2 tool/create_builddir x86_64
cd x86_64/build/ # Change build/x86_64/etc/build.conf. # Change kernel to sel4 and add hello_tutorial diff etc/build.conf.old etc/build.conf
20c20
< #KERNEL ?= nova
KERNEL ?= sel4
85a86
REPOSITORIES += $(GENODE_DIR)/repos/hello_tutorial
make make hello make run/hello # This times out as shown below.
[init -> hello_server] creating root component [0m [0m [init -> hello_client] upgrading quota donation for PD session (0 bytes, 4 caps) [0m [0m [init] child "hello_server" requests resources: cap_quota=3 [0m [0m [init] child "hello_client" requests resources: ram_quota=0, cap_quota=4 [0m [0m Error: Test execution timed out
Any comments on what I am doing wrong would be very helpful. Secondly, what would be the best way to go about debugging an issue like this.
I suppose you succeded in running the scenario on Linux and NOVA like follows.
make run/hello KERNEL=linux BOARD=linux make run/hello KERNEL=nova
For seL4 I can reproduce what you pasted above, so the issue is related to the used platform. As the log output states "hello_server" is requesting more resources and requires cap_quota (capability quota) increased during an operation that requires 3 caps. A look into the init configuration (see hello.run) reveals the following.
<!-- all components get 50 capabilities per default --> <default caps="50"/>
Now you may grant the component some more caps to make it run successully by changing
<start name="hello_server" caps="54">
to the hello_server start node and running
make run/hello KERNEL=sel4
This results in additional resource requests
[init] child "hello_server" requests resources: ram_quota=0, cap_quota=4
The reason is that the seL4 platforms works quite different from NOVA and expectedly Linux, which results in a higher capability consumption of the used software stack.
The following start nodes render the scenario working again.
<start name="hello_server" caps="58"> ... <start name="hello_client" caps="51">
Please see Chapters "Resource trading" [1] and "Resource assignment" [2] in the Genode Foundations book for a thorough explanation.
[1] https://genode.org/documentation/genode-foundations/21.05/architecture/Resou... [2] https://genode.org/documentation/genode-foundations/21.05/system_configurati...
Regards