summaryrefslogtreecommitdiff
path: root/hurd/translator/ext2fs/ogi-fosdem2005.mgp
diff options
context:
space:
mode:
Diffstat (limited to 'hurd/translator/ext2fs/ogi-fosdem2005.mgp')
-rw-r--r--hurd/translator/ext2fs/ogi-fosdem2005.mgp165
1 files changed, 0 insertions, 165 deletions
diff --git a/hurd/translator/ext2fs/ogi-fosdem2005.mgp b/hurd/translator/ext2fs/ogi-fosdem2005.mgp
deleted file mode 100644
index 27b5077c..00000000
--- a/hurd/translator/ext2fs/ogi-fosdem2005.mgp
+++ /dev/null
@@ -1,165 +0,0 @@
-# "Supporting Larger ext2 File Systems in the Hurd"
-# Written by Ognyan Kulev for presentation at FOSDEM 2005.
-# Content of this file is in public domain.
-%include "default.mgp"
-%page
-%nodefault
-%center, font "thick", size 5
-
-
-
-
-Supporting Larger ext2 File Systems in the Hurd
-
-
-
-%font "standard", size 4
-Ognyan Kulev
-%size 3
-<ogi@fmi.uni-sofia.bg>
-
-
-%size 4
-FOSDEM 2005
-
-%page
-
-Need for supporting larger file systems
-
- Active development during 1995-1997
-
- Hurd 0.2 was released in 1997 and it was very buggy
-
- Many bugs are fixed since then
-
- The 2G limit for ext2 file systems becomes more and more annoying
-
-%page
-
-Timeline
-
- 2002: Time for graduating, fixing the 2G limit in Hurd's ext2fs and implementing ext3fs were chosen for MSc thesis
-
- 2003: First alfa quality patch
-
- 2004: Graduation, ext2fs patch in Debian, but ext3fs is unstable
-
-%page
-
-User pager in GNU Mach
-
- Address space
- memory_object_data_supply
- memory_object_data_return
- Memory object (Mach concept)
- pager_read_page
- pager_write_page
- User-supplied backstore (libpager concept)
-
-%page
-
-Current ext2fs
-
- Memory mapping of the whole store
-
- Applies only for metadata!
-
- bptr (block -> data pointer)
- = image pointer + block * block_size
-
- Inode and group descriptor tables are used as if they are continous in memory
-
-%page
-
-Patched ext2fs, part one
-
- Address space region
- mapping
- Array of buffers
- association
- Store
-
- Association of buffers changes (reassocation)
-
- It's important reassociation to occur on buffers that are not in core
-
-%page
-
-Patched ext2fs, part two
-
- Always use buffer guarded by
- disk_cache_block_ref (block -> buffer)
- disk_cache_block_deref (release buffer)
-
- Buffer = data + reference count + flags (e.g. INCORE)
-
- Calling some functions implies releasing buffer:
- pokel_add (pokels are list of dirty buffers)
- record_global_poke (use pokel_add)
- sync_global_ptr (sync immediately)
- record_indir_poke (use pokel_add)
-
- Use ihash for mapping block to buffer
-
-%page
-
-When unassociated block is requested
-
-
-%font "typewriter", size 4, cont
-retry:
- i = hint;
- while (buffers[i] is referenced or in core) {
- i = (i + 1) % nbuffers;
- if (i == hint) {
- return_unreferenced_buffers ();
- goto retry;
- }
- }
- hint = i + 1;
-
- deassociate (buffers[i]);
- associate (buffers[i], block);
-
- return buffers[i];
-
-%page
-
-Notification for evicted pages
-
- Notification is essential for optimal reassociation
-
- Precious pages in Mach
-
- Slight change to API and ABI of libpager is required
-
- Mach sometimes doesn't notify!
-
-%page
-
-Pager optimization
-
-1. Mach returns page to pager without leaving it in core
-
-2. Pager becomes unlocked because of calling callback pager_write_page
-
-3. User task touches the page
-
-4. Mach requests the same page from pager
-
-5. XXX Pager supplies the page that was returned by Mach, instead of calling callback pager_read_page
-
-%page
-
-Future directions
-
- Committing in the Hurd :-)
- Block sizes of 1K and 2K
- Run-time option for buffer array size (?)
- Compile-time option for memory-mapping the whole store
- Upgrade of UFS
- Extended attributes (EAs) and Access control lists (ACLs)
-
-# Local Variables:
-# mgp-options: "-g 640x480"
-# End: