summaryrefslogtreecommitdiff
path: root/ext2fs-fosdem2005.mgp
diff options
context:
space:
mode:
Diffstat (limited to 'ext2fs-fosdem2005.mgp')
-rw-r--r--ext2fs-fosdem2005.mgp109
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: