summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext2fs-fosdem2005.mgp67
1 files changed, 34 insertions, 33 deletions
diff --git a/ext2fs-fosdem2005.mgp b/ext2fs-fosdem2005.mgp
index d829f7ca..27b5077c 100644
--- a/ext2fs-fosdem2005.mgp
+++ b/ext2fs-fosdem2005.mgp
@@ -1,7 +1,7 @@
+# "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
@@ -9,20 +9,23 @@
-Supporting Larger File Systems in the Hurd
-
+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
@@ -35,7 +38,6 @@ Need for supporting larger file systems
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
@@ -46,33 +48,31 @@ 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
+ 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
-(xfig missing)
- Address space region (image)
- Whole store (partition)
+ Memory mapping of the whole store
Applies only for metadata!
- bptr (block -> buffer)
+ 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 1)
+Patched ext2fs, part one
-(xfig missing)
Address space region
mapping
Array of buffers
@@ -81,16 +81,18 @@ Patched ext2fs (Part 1)
Association of buffers changes (reassocation)
- It's important reassociation to occur only with buffers not in core
+ It's important reassociation to occur on buffers that are not in core
%page
-Patched ext2fs (Part 2)
+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)
@@ -103,35 +105,39 @@ Patched ext2fs (Part 2)
When unassociated block is requested
+
%font "typewriter", size 4, cont
retry:
- i=hint;
+ i = hint;
while (buffers[i] is referenced or in core) {
i = (i + 1) % nbuffers;
if (i == hint) {
- return_unreferenced_buffers();
+ return_unreferenced_buffers ();
goto retry;
+ }
}
hint = i + 1;
- deassociate(buffers[i]);
- associate(buffers[i],block);
+ deassociate (buffers[i]);
+ associate (buffers[i], block);
return buffers[i];
%page
-Necessity for Notification
+Notification for evicted pages
- Notification is essential for reassociation
+ 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
-libpager optimization
+Pager optimization
1. Mach returns page to pager without leaving it in core
@@ -139,7 +145,7 @@ libpager optimization
3. User task touches the page
-4. Mach requests the same page from libpager
+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
@@ -148,15 +154,10 @@ libpager optimization
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: