diff options
Diffstat (limited to 'community/gsoc')
-rw-r--r-- | community/gsoc/project_ideas.mdwn | 8 | ||||
-rw-r--r-- | community/gsoc/project_ideas/physical_memory_management.mdwn | 51 |
2 files changed, 55 insertions, 4 deletions
diff --git a/community/gsoc/project_ideas.mdwn b/community/gsoc/project_ideas.mdwn index 262ead82..643a4240 100644 --- a/community/gsoc/project_ideas.mdwn +++ b/community/gsoc/project_ideas.mdwn @@ -1,5 +1,5 @@ -[[!meta copyright="Copyright © 2008, 2009, 2010, 2011, 2012, 2013, 2014 Free -Software Foundation, Inc."]] +[[!meta copyright="Copyright © 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015 +Free Software Foundation, Inc."]] [[!meta license="""[[!toggle id="license" text="GFDL 1.2+"]][[!toggleable id="license" text="Permission is granted to copy, distribute and/or modify this @@ -97,7 +97,8 @@ All project ideas inlined: project_ideas: - "community/gsoc/project_ideas/language_bindings + "community/gsoc/project_ideas/physical_memory_management + community/gsoc/project_ideas/language_bindings community/gsoc/project_ideas/virtualization community/gsoc/project_ideas/file_locking community/gsoc/project_ideas/gdb @@ -105,7 +106,6 @@ project_ideas: community/gsoc/project_ideas/nfs community/gsoc/project_ideas/sound community/gsoc/project_ideas/disk_io_performance - community/gsoc/project_ideas/vm_tuning community/gsoc/project_ideas/gnumach_cleanup community/gsoc/project_ideas/xmlfs community/gsoc/project_ideas/unionfs_boot diff --git a/community/gsoc/project_ideas/physical_memory_management.mdwn b/community/gsoc/project_ideas/physical_memory_management.mdwn new file mode 100644 index 00000000..2baa7a90 --- /dev/null +++ b/community/gsoc/project_ideas/physical_memory_management.mdwn @@ -0,0 +1,51 @@ +[[!meta copyright="Copyright © 2015 Free Software Foundation, Inc."]] + +[[!meta license="""[[!toggle id="license" text="GFDL 1.2+"]][[!toggleable +id="license" text="Permission is granted to copy, distribute and/or modify this +document under the terms of the GNU Free Documentation License, Version 1.2 or +any later version published by the Free Software Foundation; with no Invariant +Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license +is included in the section entitled +[[GNU Free Documentation License|/fdl]]."]]"""]] + +[[!meta title="Physical memory management"]] + +GNU Mach is currently suffering from severe limitations caused by the way +it manages physical memory. For example, since it requires pages to be mapped +in kernel space in order to be used, the maximum amount of usable physical +memory is currently around 800MB (or 1.8GB if a 2/2 split is set). And +because the page allocator is unable to easily return blocks of contiguous +pages, the kernel has to use virtual memory to provide contiguity. +But the kernel virtual space is separate from the direct mapping of +physical memory, so the larger it is, the less physical pages available. +The size of the kernel space is currently around 200MB, with around 100MB +for kernel objects. This small size prevents the system from achieving +scalability, since a panic occurs when the kernel is unable to allocate +a kernel object such as a port. In addition, the kernel uses mainly tables +to store IPC rights. When a table is full, it is enlarged through a kernel +specific version of realloc(). When a file system starts managing many +files (e.g. because some of their content is cached in physical memory), +these tables can get big enough to make realloc() fail because of +fragmentation. + +The goal of this project is to make as much physical memory available as +possible for both the kernel and applications, by rewriting the page +allocator into a buddy allocator to support contiguous block allocations, +using it directly instead of virtual memory as the backend of the slab +allocator for kernel objects, and, if time allows it, transform IPC right +tables (e.g. into radix trees) and get rid of realloc(). + +This project requires a good understanding of virtual memory (both physical +mappings at the MMU level and virtual mappings at the VM level), and strong +skills in C programming. Note that some work has already been done in the +X15 project about this, and can be reused as a reference. + +Useful links : + + * <https://www.sceen.net/mapping-physical-memory-directly/> + + * <http://git.sceen.net/rbraun/x15.git/> + + * <http://git.sceen.net/rbraun/librbraun.git/blob/HEAD:/rdxtree.h> + +Possible mentors: Richard Braun |