diff options
Diffstat (limited to 'ext2fs-fosdem2005.mgp')
-rw-r--r-- | ext2fs-fosdem2005.mgp | 109 |
1 files changed, 72 insertions, 37 deletions
diff --git a/ext2fs-fosdem2005.mgp b/ext2fs-fosdem2005.mgp index 9d536a27..d829f7ca 100644 --- a/ext2fs-fosdem2005.mgp +++ b/ext2fs-fosdem2005.mgp @@ -9,7 +9,7 @@ -Supporting Larger File Systems +Supporting Larger File Systems in the Hurd @@ -20,16 +20,16 @@ Ognyan Kulev %page -Need for Supporting Larger File Systems +Need for supporting larger file systems - Active development during 1995-1997. + Active development during 1995-1997 - Hurd 0.2 was released in 1997 and it was very buggy. + Hurd 0.2 was released in 1997 and it was very buggy - Many bugs are fixed since then. + Many bugs are fixed since then - The 2G limit for ext2 file systems becomes more and more annoying. + The 2G limit for ext2 file systems becomes more and more annoying %page @@ -47,28 +47,57 @@ Timeline User pager in GNU Mach (xfig missing) + Address space + ^ m_o_d_supply v m_o_d_return (Mach API, mapping) + Memory object + ^ pager_read_page v pager_write_page (libpager API, association) + User-supplied backstore %page Current ext2fs (xfig missing) + Address space region (image) + Whole store (partition) + + Applies only for metadata! + + bptr (block -> buffer) + = image pointer + block * block_size + + Inode and group descriptor tables are used as if they are continous in memory %page -ext2fs API for accessing blocks +Patched ext2fs (Part 1) + +(xfig missing) + Address space region + mapping + Array of buffers + association + Store - bptr, boffs + Association of buffers changes (reassocation) - inode and group descriptor tables as arrays + It's important reassociation to occur only with buffers not in core %page -Patched ext2fs +Patched ext2fs (Part 2) - Always use buffer guarded by disk_cache_block_ref and disk_cache_block_deref + Always use buffer guarded by + disk_cache_block_ref (block -> buffer) + disk_cache_block_deref (release buffer) -(xfig figure) + 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 @@ -77,53 +106,59 @@ When unassociated block is requested %font "typewriter", size 4, cont retry: i=hint; - while () - {} - goto retry; - -%page + while (buffers[i] is referenced or in core) { + i = (i + 1) % nbuffers; + if (i == hint) { + return_unreferenced_buffers(); + goto retry; + } + hint = i + 1; -Necessity for Notification + deassociate(buffers[i]); + associate(buffers[i],block); -Precious pages in Mach + return buffers[i]; -Notification is essential for reassociation +%page -Mach sometimes doesn't notify! +Necessity for Notification -%page + Notification is essential for reassociation -Concurrency in Reassociation + Precious pages in Mach -... + Mach sometimes doesn't notify! %page -Changes in Pokel - -List of changed buffers +libpager optimization -Operation for writing all changes +1. Mach returns page to pager without leaving it in core -Now should handle reference counts +2. Pager becomes unlocked because of calling callback pager_write_page -%page +3. User task touches the page -libpager optimization +4. Mach requests the same page from libpager -... +5. XXX Pager supplies the page that was returned by Mach, instead of calling callback pager_read_page %page Future directions -Block sizes of 1K and 2K + Committing in the Hurd :-) + + Block sizes of 1K and 2K -Run-time option for buffer array size + Run-time option for buffer array size (?) -Compile-time option (or auto-detection) for mapping the whole store + Compile-time option for memory-mapping the whole store -Upgrade of UFS + Upgrade of UFS -Extended attributes (EAs) and Access control lists (ACLs) + Extended attributes (EAs) and Access control lists (ACLs) +# Local Variables: +# mgp-options: "-g 640x480" +# End: |