-
Notifications
You must be signed in to change notification settings - Fork 257
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Vancouver fails to allocate guest memory #519
Comments
Check out only until 5e66b6d of master. I presume I know what went wrong, I will investigate. |
Running 64bit Seoul/Vancouver results in:
I like this bug. Really! It will not disappear. I hate to cite myself (from commit above):
The reason is that on 64bit somebody already attached a region of size 0x8000 to the low virtual address space region. All kind of attempts so far to reserve the region during startup are already to late, the mapping is just there. |
I can confirm this, I hit this again too lately. I get it on 32bit as well. The trick you told me (increasing the initial_heap size) helps in the 32bit case, but not for 64bit. So if you want me to test something on my diva machine, just tell me ;) Last year I also noticed that not having a try-catch-block in the main function sometimes helped. So could this be exception-handling related? |
@parthy: can you please try the commit above ? |
There is no region conflict anymore, but I don't get output from Vancouver. I can see the framebuffer session being created, but then nothing happens anymore. So apparently the guest_memory creation fails... |
Right. On my serial output I get:
So, apparently I have to take this model from the VMM configuration since it does not work on 64bit |
I enabled the intel82576 model for 64bit hosts. Now I get (when using r3_debug):
|
Looks familiar :) See here: TUD-OS/NRE#33 |
Ok. I rebased all our stuff to the the latest commit of the vanilla kernel (using https://github.com/alex-ab/NOVA/tree/staging_genode) and now the 64bit seoul-fancy stuff works for me. |
Great, I will give it a spin later today. |
Yep, that works. |
At least 64bit Seoul dies with Region_conflict reliable and reproducible. When during startup of Seoul some Genode code (caused by executing some constructors) try to attach a region, the region manager code in the rm_session will try to place the attachment at the smallest large enough aligned free virtual region. For now, I observed one attachment causing trouble (but not knowing who causes this - it does also not really matter). The questionable region is 0x4000 of size for 32bit and 0x8000 of size for 64bit. To steer the region manager a bit, we try now following trick: With this commit the load address of the binary for 32 and 64 bit is moved close to the end of the virtual address space, but leaving enough free virtual space for the above observed attachment (and a bit more). The region manager code now will try to fill up the virtual region behind the binary up to the end of the virtual address space, effectively letting the lower virtual region untouched - hopefully. Works for now, but it will break again - for sure. Fixes #519
Thank you for testing. Everything is now on genode/staging and r3 kernel branch is updated accordingly. |
At least 64bit Seoul dies with Region_conflict reliable and reproducible. When during startup of Seoul some Genode code (caused by executing some constructors) try to attach a region, the region manager code in the rm_session will try to place the attachment at the smallest large enough aligned free virtual region. For now, I observed one attachment causing trouble (but not knowing who causes this - it does also not really matter). The questionable region is 0x4000 of size for 32bit and 0x8000 of size for 64bit. To steer the region manager a bit, we try now following trick: With this commit the load address of the binary for 32 and 64 bit is moved close to the end of the virtual address space, but leaving enough free virtual space for the above observed attachment (and a bit more). The region manager code now will try to fill up the virtual region behind the binary up to the end of the virtual address space, effectively letting the lower virtual region untouched - hopefully. Works for now, but it will break again - for sure. Fixes #519
At least 64bit Seoul dies with Region_conflict reliable and reproducible. When during startup of Seoul some Genode code (caused by executing some constructors) try to attach a region, the region manager code in the rm_session will try to place the attachment at the smallest large enough aligned free virtual region. For now, I observed one attachment causing trouble (but not knowing who causes this - it does also not really matter). The questionable region is 0x4000 of size for 32bit and 0x8000 of size for 64bit. To steer the region manager a bit, we try now following trick: With this commit the load address of the binary for 32 and 64 bit is moved close to the end of the virtual address space, but leaving enough free virtual space for the above observed attachment (and a bit more). The region manager code now will try to fill up the virtual region behind the binary up to the end of the virtual address space, effectively letting the lower virtual region untouched - hopefully. Works for now, but it will break again - for sure. Fixes genodelabs#519
It's not guaranteed to be robust and will break in the future - I told you. Related to issue genodelabs#365, issue genodelabs#519, issue genodelabs#666
At least 64bit Seoul dies with Region_conflict reliable and reproducible. When during startup of Seoul some Genode code (caused by executing some constructors) try to attach a region, the region manager code in the rm_session will try to place the attachment at the smallest large enough aligned free virtual region. For now, I observed one attachment causing trouble (but not knowing who causes this - it does also not really matter). The questionable region is 0x4000 of size for 32bit and 0x8000 of size for 64bit. To steer the region manager a bit, we try now following trick: With this commit the load address of the binary for 32 and 64 bit is moved close to the end of the virtual address space, but leaving enough free virtual space for the above observed attachment (and a bit more). The region manager code now will try to fill up the virtual region behind the binary up to the end of the virtual address space, effectively letting the lower virtual region untouched - hopefully. Works for now, but it will break again - for sure. Fixes genodelabs#519
I get
Not enough space (0x3789000) left for VMM, VM image to large
when starting my modified Vancouver. This problem used to be possible to handle by fiddling with the _initial_junk size or by commenting out exception handling sections in Vancouver. But with the most recent master branch, I cannot get it to work anymore. Is there any quickfix I can try?
The text was updated successfully, but these errors were encountered: