git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: How git affects kernel.org performance

From
FWFengguang Wu <fengguang.wu@gmail.com>
Date
Jan 9, 2007, 07:59 UTC
Message-ID
<368329554.17014@ustc.edu.cn>
In-Reply-To
<20070108125819.GA32756@thunk.org>
On Mon, Jan 08, 2007 at 07:58:19AM -0500, Theodore Tso wrote:
Show 17 quoted lines
> On Mon, Jan 08, 2007 at 08:35:55AM +0530, Suparna Bhattacharya wrote:
> > > Yeah, slowly-growing directories will get splattered all over the disk.
> > > 
> > > Possible short-term fixes would be to just allocate up to (say) eight
> > > blocks when we grow a directory by one block.  Or teach the
> > > directory-growth code to use ext3 reservations.
> > > 
> > > Longer-term people are talking about things like on-disk rerservations.
> > > But I expect directories are being forgotten about in all of that.
> > 
> > By on-disk reservations, do you mean persistent file preallocation ? (that
> > is explicit preallocation of blocks to a given file) If so, you are
> > right, we haven't really given any thought to the possibility of directories
> > needing that feature.
> 
> The fastest and probably most important thing to add is some readahead
> smarts to directories --- both to the htree and non-htree cases.  If

Here's is a quick hack to practice the directory readahead idea. Comments are welcome, it's a freshman's work :)

Regards,
Wu
---
 fs/ext3/dir.c   |   22 ++++++++++++++++++++++
 fs/ext3/inode.c |    2 +-
 2 files changed, 23 insertions(+), 1 deletion(-)

--- linux.orig/fs/ext3/dir.c +++ linux/fs/ext3/dir.c

@@ -94,6 +94,25 @@ int ext3_check_dir_entry (const char * f
 	return error_msg == NULL ? 1 : 0;
 }
 
+int ext3_get_block(struct inode *inode, sector_t iblock,
+			struct buffer_head *bh_result, int create);
+
+static void ext3_dir_readahead(struct file * filp)
+{
+	struct inode *inode = filp->f_path.dentry->d_inode;
+	struct address_space *mapping = inode->i_sb->s_bdev->bd_inode->i_mapping;
+	unsigned long sector;
+	unsigned long blk;
+	pgoff_t offset;
+
+	for (blk = 0; blk < inode->i_blocks; blk++) {
+		sector = blk << (inode->i_blkbits - 9);
+		sector = generic_block_bmap(inode->i_mapping, sector, ext3_get_block);
+		offset = sector >> (PAGE_CACHE_SHIFT - 9);
+		do_page_cache_readahead(mapping, filp, offset, 1);
+	}
+}
+
 static int ext3_readdir(struct file * filp,
 			 void * dirent, filldir_t filldir)
 {
@@ -108,6 +127,9 @@ static int ext3_readdir(struct file * fi
 
 	sb = inode->i_sb;
 
+	if (!filp->f_pos)
+		ext3_dir_readahead(filp);
+
 #ifdef CONFIG_EXT3_INDEX
 	if (EXT3_HAS_COMPAT_FEATURE(inode->i_sb,
 				    EXT3_FEATURE_COMPAT_DIR_INDEX) &&
--- linux.orig/fs/ext3/inode.c
+++ linux/fs/ext3/inode.c
@@ -945,7 +945,7 @@ out:
 
 #define DIO_CREDITS (EXT3_RESERVE_TRANS_BLOCKS + 32)
 
-static int ext3_get_block(struct inode *inode, sector_t iblock,
+int ext3_get_block(struct inode *inode, sector_t iblock,
 			struct buffer_head *bh_result, int create)
 {
 	handle_t *handle = journal_current_handle();
Previous: Jeremy HigdonNext: Linus Torvalds
Message 34 of 52 in “Re: [KORG] Re: kernel.org lies about latest -mm kernel”
  1. Jeff GarzikJan 7, 2007
  2. Linus TorvaldsJan 7, 2007
  3. Greg KHJan 7, 2007
  4. H. Peter AnvinJan 7, 2007
  5. Junio C HamanoJan 7, 2007
  6. Jeff GarzikJan 7, 2007
  7. Linus TorvaldsJan 7, 2007
  8. Martin LanghoffJan 7, 2007
  9. How git affects kernel.org performanceH. Peter Anvin, Jan 7, 2007
  10. Linus TorvaldsJan 7, 2007
  11. Willy TarreauJan 7, 2007
  12. H. Peter AnvinJan 7, 2007
  13. Willy TarreauJan 7, 2007
  14. Christoph HellwigJan 7, 2007
  15. Willy TarreauJan 7, 2007
  16. Linus TorvaldsJan 7, 2007
  17. Linus TorvaldsJan 7, 2007
  18. Jan EngelhardtJan 7, 2007
  19. Randy DunlapJan 7, 2007
  20. Jan EngelhardtJan 7, 2007
  21. Randy DunlapJan 7, 2007
  22. Linus TorvaldsJan 7, 2007
  23. Andrew MortonJan 7, 2007
  24. Rene HermanJan 7, 2007
  25. Suparna BhattacharyaJan 8, 2007
  26. Theodore TsoJan 8, 2007
  27. Johannes StezenbachJan 8, 2007
  28. Theodore TsoJan 8, 2007
  29. Pavel MachekJan 8, 2007
  30. Theodore TsoJan 8, 2007
  31. Jeff GarzikJan 8, 2007
  32. Paul JacksonJan 9, 2007
  33. Jeremy HigdonJan 9, 2007
  34. Fengguang WuJan 9, 2007
  35. Linus TorvaldsJan 9, 2007
  36. Fengguang WuJan 10, 2007
  37. Fengguang WuJan 10, 2007
  38. Fengguang WuJan 10, 2007
  39. Fengguang WuJan 9, 2007
  40. Fengguang WuJan 9, 2007
  41. Robert FitzsimonsJan 7, 2007
  42. J.H.Jan 7, 2007
  43. Jakub NarebskiJan 8, 2007
  44. Krzysztof HalasaJan 7, 2007
  45. Shawn O. PearceJan 7, 2007
  46. Nicolas PitreJan 8, 2007
  47. Linus TorvaldsJan 7, 2007
  48. Nigel CunninghamJan 10, 2007
  49. Fengguang WuJan 10, 2007
  50. Fengguang WuJan 10, 2007
  51. Fengguang WuJan 10, 2007
  52. Nigel CunninghamJan 12, 2007

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.