Hello,
first, thanks for your effort guys. I'm very glad to see that a microkernel architecture/framework is exists in C++ :-)
A short description about me: I'm C++ enthusiasts (C++ User Group Duesseldorf and Meeting C++ stuff member) and also very interested about operating systems. I pay attention to security feature. For some year, Blackberry announced that they discontinued BB10. I was very disappointed about that because BB10 is developed in Qt/C++ and focuses in security because they based on a microkernel architecture from QNX as operating system. After the announcement from Blackberry, I was thinking about to write a microkernel architecture in C++ but I checked if they exists a microkernel architecture in C++ and I was very happy about that they really exists. I started first with Fiasco.OC but I found out that in Genode it uses the new C++ Standard so here I'm :-)
I started a month ago with Gnode hello tutorial and play around with them. Therefore, I call myself a newbie :-) But at the end, I will use Genode on my laptop (like turmvilla example) and start to develop some application on it :-). But first, I think about to start with a small server. The host provider that I use, use a QEMU with KVM enable as virtual server. So it is not possilbe to use NOVA on it because of the KVM enabled featuer (I think) but Fiasco.OC works.
The problem: So I try to build/create a image from the lighttpd example with Fiasco.OC kernel. The image started but the lighttpd does not work. Also the hello tutorial with Fiasco.OC does not work anymore.
I checked the issue tracker on github but I didn't find any issue about that.
What I figure out: - Hello tutorial When I increase in the hello tutorial the "default caps" from 50 to 54 in the config, then the tutorial is working with Fiasco.OC kernel. - lighttpd Here I must first "move" the timer service in the config (see my commit on github [1]) then it works with the NOVA kernel. With Fiasco.OC I get following error: Error: nic_drv -> : environment ROM session denied (label="device_pd", ram_quota=6144, cap_quota=3, diag=0) I try to add "device_pd" in the boot modules because it is missing in the rom fs but device_pd is not compile for the Fiasco.OC, only for NOVA. I found out following in: genode-src/repos/os/src/drivers/platform/spec/x86/device_pd/target.mk It looks like device_pd is only build for NOVA.
Is this a known issue or somebody working on it ? Or works the lighttpd example with Fiasco.OC kernel for anyone ? If you still need additional infos, let me know.
Regards, Jörg
[1] https://github.com/Bjoe/genode/commit/8522e1b06c62e33988a03c5f308f16fad5250d...
Hi Jörg,
thank you for introducing yourself and for your interest in Genode!
I started a month ago with Gnode hello tutorial and play around with them. Therefore, I call myself a newbie :-) But at the end, I will use Genode on my laptop (like turmvilla example) and start to develop some application on it :-). But first, I think about to start with a small server. The host provider that I use, use a QEMU with KVM enable as virtual server. So it is not possilbe to use NOVA on it because of the KVM enabled featuer (I think) but Fiasco.OC works.
We added the -no-kvm option in '<build-dir>/etc/build.conf' by default a few years ago when Qemu/KVM did not implement all the features required by NOVA. There should be a good chance that NOVA works with recent Qemu versions. Could you give NOVA on Qemu/KVM another spin and report the specific problem you encountered?
In general, I warmly recommend using NOVA over Fiasco.OC as NOVA is the most commonly used (and thoroughly tested) Genode base platform on x86.
The problem: So I try to build/create a image from the lighttpd example with Fiasco.OC kernel. The image started but the lighttpd does not work. Also the hello tutorial with Fiasco.OC does not work anymore.
I checked the issue tracker on github but I didn't find any issue about that.
What I figure out:
- Hello tutorial
When I increase in the hello tutorial the "default caps" from 50 to 54 in the config, then the tutorial is working with Fiasco.OC kernel.
I think that this issue is fixed in the current master branch, specifically by commit [1]. Prior this change, Genode's core consumed one additional (dataspace) capability per RPC object when running on Fiasco.OC, which remained undetected until we added the capability accounting in 17.05.
[1] https://github.com/genodelabs/genode/commit/ba9ef7fdee07c42bc772c8b515bc9d80...
- lighttpd
Here I must first "move" the timer service in the config (see my commit on github [1]) then it works with the NOVA kernel.
The position of the timer <start> node within the config should not make any difference.
I just tried out the lighttpd.run script with KERNEL=foc on x86_32. It works when adding the '<default caps="100"/>' declaration. Opening 'http://localhost:5555/' in the web browser shows the "Hello Genode" page.
With Fiasco.OC I get following error: Error: nic_drv -> : environment ROM session denied (label="device_pd", ram_quota=6144, cap_quota=3, diag=0) I try to add "device_pd" in the boot modules because it is missing in the rom fs but device_pd is not compile for the Fiasco.OC, only for NOVA. I found out following in: genode-src/repos/os/src/drivers/platform/spec/x86/device_pd/target.mk It looks like device_pd is only build for NOVA.
Admittedly, the log messages look a bit scary but this output is normal on Fiasco.OC where the platform driver does not support device PDs (IOMMU). We should probably dim the noise a bit. ;-)
Cheers Norman
Hi Norman,
Am Dienstag, 25. Juli 2017 13:45:45 CEST schrieb Norman Feske:
But first, I think about to start with a small server. The host provider that I use, use a QEMU with KVM enable as virtual server. So it is not possilbe to use NOVA on it because of the KVM enabled featuer (I think) but Fiasco.OC works.
We added the -no-kvm option in '<build-dir>/etc/build.conf' by default a few years ago when Qemu/KVM did not implement all the features required by NOVA. There should be a good chance that NOVA works with recent Qemu versions. Could you give NOVA on Qemu/KVM another spin and report the specific problem you encountered?
Ok, I build (after I update to latest master. See below) lighttp with the NOVA kernel. With 64bit, the vServer reboots every time, with 32bit the vServer hangs. But with Fiasco.OC it works! Unfortunately I cannot add any output, it is in a special remote console from the host provider. But I added a part of the dmesg output from the Linux rescue system [2]. Maybe somebody can "see" the problem.
In general, I warmly recommend using NOVA over Fiasco.OC as NOVA is the most commonly used (and thoroughly tested) Genode base platform on x86.
Ok. May I ask the recommended kernel for the following embedded board Rpi/pandaboard/wand quad ? It looks like there is only Fiasco.OC, because Fiasco.OC has ARM support, or?
The problem: So I try to build/create a image from the lighttpd example with Fiasco.OC kernel. The image started but the lighttpd does not work. Also the hello tutorial with Fiasco.OC does not work anymore.
I checked the issue tracker on github but I didn't find any issue about ...
I think that this issue is fixed in the current master branch, specifically by commit [1]. Prior this change, Genode's core consumed one additional (dataspace) capability per RPC object when running on Fiasco.OC, which remained undetected until we added the capability accounting in 17.05.
[1] https://github.com/genodelabs/genode/commit/ba9ef7fdee07c42bc772c8b515bc9d80...
Ok, I checked out the lastet master [1]. Now it works. Great. Thank you for the hint. This means, master is always stable ? I was expected that the tagged version is a stable release version.
[1] https://github.com/genodelabs/genode/commit/0d1be4abe2294155e36bc0eb0c1cd614...
With Fiasco.OC I get following error: Error: nic_drv -> : environment ROM session denied (label="device_pd", ram_quota=6144, cap_quota=3, diag=0) I try to add "device_pd" in the boot modules because it is missing in the rom fs but device_pd is not compile for the Fiasco.OC, only for NOVA. I found out following in: genode-src/repos/os/src/drivers/platform/spec/x86/device_pd/target.mk It looks like device_pd is only build for NOVA.
Admittedly, the log messages look a bit scary but this output is normal on Fiasco.OC where the platform driver does not support device PDs (IOMMU). We should probably dim the noise a bit. ;-)
Ok, no problem, I understand :-).
Cheers Jörg
[2] CPU1: Intel(R) Xeon(R) CPU E5-26xx (Sandy Bridge) Intel(R) PRO/1000 Network Driver [ 0.000000] x86/fpu: Supporting XSAVE feature 0x001: 'x87 floating point registers' [ 0.000000] x86/fpu: Supporting XSAVE feature 0x002: 'SSE registers' [ 0.000000] x86/fpu: Supporting XSAVE feature 0x004: 'AVX registers' [ 0.000000] x86/fpu: xstate_offset[2]: 576, xstate_sizes[2]: 256 [ 0.000000] x86/fpu: Enabled xstate features 0x7, context size is 832 bytes, using 'standard' format. [ 0.000000] e820: BIOS-provided physical RAM map: [ 0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009fbff] usable [ 0.000000] BIOS-e820: [mem 0x000000000009fc00-0x000000000009ffff] reserved [ 0.000000] BIOS-e820: [mem 0x00000000000f0000-0x00000000000fffff] reserved [ 0.000000] BIOS-e820: [mem 0x0000000000100000-0x000000003ffdffff] usable [ 0.000000] BIOS-e820: [mem 0x000000003ffe0000-0x000000003fffffff] reserved [ 0.000000] BIOS-e820: [mem 0x00000000feffc000-0x00000000feffffff] reserved [ 0.000000] BIOS-e820: [mem 0x00000000fffc0000-0x00000000ffffffff] reserved [ 0.000000] NX (Execute Disable) protection: active [ 0.000000] SMBIOS 2.8 present. [ 0.000000] DMI: Hetzner vServer, BIOS 1.8.2 04/01/2014 [ 0.000000] Hypervisor detected: KVM [ 0.000000] e820: update [mem 0x00000000-0x00000fff] usable ==> reserved [ 0.000000] e820: remove [mem 0x000a0000-0x000fffff] usable [ 0.000000] e820: last_pfn = 0x3ffe0 max_arch_pfn = 0x400000000 [ 0.000000] MTRR default type: write-back [ 0.000000] MTRR fixed ranges enabled: [ 0.000000] 00000-9FFFF write-back [ 0.000000] A0000-BFFFF uncachable [ 0.000000] C0000-FFFFF write-protect [ 0.000000] MTRR variable ranges enabled: [ 0.000000] 0 base 0080000000 mask FF80000000 uncachable [ 0.000000] 1 disabled [ 0.000000] 2 disabled [ 0.000000] 3 disabled [ 0.000000] 4 disabled [ 0.000000] 5 disabled [ 0.000000] 6 disabled [ 0.000000] 7 disabled [ 0.000000] x86/PAT: Configuration [0-7]: WB WC UC- UC WB WC UC- WT
[ 0.000000] Base memory trampoline at [ffff880000099000] 99000 size 24576 [ 0.000000] BRK [0x01a44000, 0x01a44fff] PGTABLE [ 0.000000] BRK [0x01a45000, 0x01a45fff] PGTABLE [ 0.000000] BRK [0x01a46000, 0x01a46fff] PGTABLE [ 0.000000] BRK [0x01a47000, 0x01a47fff] PGTABLE [ 0.000000] RAMDISK: [mem 0x3fbcd000-0x3feadfff] [ 0.000000] ACPI: Early table checksum verification disabled [ 0.000000] ACPI: RSDP 0x00000000000F62F0 000014 (v00 BOCHS ) [ 0.000000] ACPI: RSDT 0x000000003FFE16EA 000030 (v01 BOCHS BXPCRSDT 00000001 BXPC 00000001) [ 0.000000] ACPI: FACP 0x000000003FFE15C6 000074 (v01 BOCHS BXPCFACP 00000001 BXPC 00000001) [ 0.000000] ACPI: DSDT 0x000000003FFE0040 001586 (v01 BOCHS BXPCDSDT 00000001 BXPC 00000001) [ 0.000000] ACPI: FACS 0x000000003FFE0000 000040 [ 0.000000] ACPI: APIC 0x000000003FFE163A 000078 (v01 BOCHS BXPCAPIC 00000001 BXPC 00000001) [ 0.000000] ACPI: HPET 0x000000003FFE16B2 000038 (v01 BOCHS BXPCHPET 00000001 BXPC 00000001) [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] No NUMA configuration found [ 0.000000] Faking a node at [mem 0x0000000000000000-0x000000003ffdffff] [ 0.000000] NODE_DATA(0) allocated [mem 0x3ffdc000-0x3ffdffff] [ 0.000000] kvm-clock: Using msrs 4b564d01 and 4b564d00 [ 0.000000] kvm-clock: cpu 0, msr 0:3ffda001, primary cpu clock [ 0.000000] kvm-clock: using sched offset of 19910977039 cycles [ 0.000000] clocksource: kvm-clock: mask: 0xffffffffffffffff max_cycles: 0x1cd42e4dffb, max_idle_ns: 881590591483 ns [ 0.000000] Zone ranges: [ 0.000000] DMA [mem 0x0000000000001000-0x0000000000ffffff] [ 0.000000] DMA32 [mem 0x0000000001000000-0x000000003ffdffff] [ 0.000000] Normal empty [ 0.000000] Movable zone start for each node [ 0.000000] Early memory node ranges [ 0.000000] node 0: [mem 0x0000000000001000-0x000000000009efff] [ 0.000000] node 0: [mem 0x0000000000100000-0x000000003ffdffff] [ 0.000000] Initmem setup node 0 [mem 0x0000000000001000-0x000000003ffdffff] [ 0.000000] On node 0 totalpages: 262014 [ 0.000000] DMA zone: 64 pages used for memmap [ 0.000000] DMA zone: 21 pages reserved [ 0.000000] DMA zone: 3998 pages, LIFO batch:0 [ 0.000000] DMA32 zone: 4032 pages used for memmap [ 0.000000] DMA32 zone: 258016 pages, LIFO batch:31 [ 0.000000] ACPI: PM-Timer IO Port: 0x608 [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] ACPI: LAPIC_NMI (acpi_id[0xff] dfl dfl lint[0x1]) [ 0.000000] IOAPIC[0]: apic_id 0, version 17, address 0xfec00000, GSI 0-23 [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl) [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 5 global_irq 5 high level) [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level) [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 10 global_irq 10 high level) [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 11 global_irq 11 high level) [ 0.000000] ACPI: IRQ0 used by override. [ 0.000000] ACPI: IRQ5 used by override. [ 0.000000] ACPI: IRQ9 used by override. [ 0.000000] ACPI: IRQ10 used by override. [ 0.000000] ACPI: IRQ11 used by override. [ 0.000000] Using ACPI (MADT) for SMP configuration information [ 0.000000] ACPI: HPET id: 0x8086a201 base: 0xfed00000 [ 0.000000] smpboot: Allowing 1 CPUs, 0 hotplug CPUs [ 0.000000] e820: [mem 0x40000000-0xfeffbfff] available for PCI devices [ 0.000000] Booting paravirtualized kernel on KVM [ 0.000000] clocksource: refined-jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645519600211568 ns [ 0.000000] setup_percpu: NR_CPUS:128 nr_cpumask_bits:128 nr_cpu_ids:1 nr_node_ids:1 [ 0.000000] percpu: Embedded 34 pages/cpu @ffff88003f800000 s102296 r8192 d28776 u2097152 [ 0.000000] pcpu-alloc: s102296 r8192 d28776 u2097152 alloc=1*2097152 [ 0.000000] pcpu-alloc: [0] 0 [ 0.000000] KVM setup async PF for cpu 0 [ 0.000000] Built 1 zonelists in Node order, mobility grouping on. Total pages: 257897 [ 0.000000] Policy zone: DMA32
Hi Jörg,
unfortunately, I am unable to diagnose the vserver issue.
Ok. May I ask the recommended kernel for the following embedded board Rpi/pandaboard/wand quad ? It looks like there is only Fiasco.OC, because Fiasco.OC has ARM support, or?
these boards are supported also by the so-called "base-hw" kernel, which is a custom kernel that is especially designed for Genode. It is described in detail in Section 7.7 of the "Genode Foundations" book [1].
[1] http://genode.org/documentation/genode-foundations-17-05.pdf
There is also work in progress (planned for the upcoming release 17.08) to use the seL4 kernel on a wider variety of platforms including x86_64 and ARM.
This means, master is always stable ? I was expected that the tagged version is a stable release version.
The master branch is considered stable. It is updated from the staging branch not before staging passes our regular QA including a large suite of automated tests. A release is a snapshot of the master branch accompanied with documentation [2] that describes the rationale of the development during the release cycle. To learn more about the flow of development, please refer to Section 5.5 of the book mentioned above.
[2] http://genode.org/documentation/release-notes/index
Cheers Norman