File: [Development] / xfs-cmds / xfsdump / restore / namreg.h (download)
Revision 1.6, Tue Jan 31 15:47:31 2006 UTC (11 years, 8 months ago) by wkendall
Branch: MAIN
CVS Tags: HEAD Changes since 1.5: +3 -0
lines
This mod adds a number of optimizations to increase the
performance of xfsdump and xfsrestore, especially on filesystems
with millions of inodes. Many small changes were made to
minimize the number of system calls required per inode.
Significant changes to xfsdump:
- Cache the gen number of each inode during the initial inode
scan so that a bulkstat single does not need to be done for
each inode when dumping directories.
- No longer retrieve the DMF attribute when estimating the dump
size of a file. Use information from the bulkstat instead.
- Retrieve DMF attribute by handle instead of doing
open/attr_getf/close.
- In determining where to split multi-stream dumps, take into
consideration the number of files and not just the file size.
This allows filesystems with large amounts of inodes but
relatively little data (DMF filesystem) to be split correctly.
Significant changes to xfsrestore:
- Buffer writes to the namreg file to eliminate 2 very small
write system calls per directory entry.
- Buffer writes to dirattr file to eliminate a small write system
call per directory.
- Speedup the check to see if a particular window of the tree
file is mapped. This allows xfsrestore to use more, smaller
windows which is beneficial if we can't fit them all in memory
and have to start unmapping them. This also makes the -w
option obsolete so that option now has no effect.
- Change the hash function to give a better distribution among
the hash buckets.
- Do not make an unnecessary unlink call if the file being
restored does not already exist.
|
/*
* Copyright (c) 2000-2001 Silicon Graphics, Inc.
* All Rights Reserved.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it would be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef NAMREG_H
#define NAMREG_H
/* namreg.[hc] - directory entry registry
*
* provides unique directory entry ID's and storage for the entry
* name.
*/
/* nrh_t - handle to a registered name
*/
typedef size32_t nrh_t;
#define NRH_NULL SIZE32MAX
/* namreg_init - creates the name registry. resync is TRUE if the
* registry should already exist, and we are resynchronizing.
* if NOT resync, inocnt hints at how many names will be held
*/
extern bool_t namreg_init( char *housekeepingdir,
bool_t resync,
u_int64_t inocnt );
/* namreg_add - registers a name. name does not need to be null-terminated.
* returns handle for use with namreg_get().
*/
extern nrh_t namreg_add( char *name, size_t namelen );
/* namreg_del - remove a name from the registry
*/
extern void namreg_del( nrh_t nrh );
/* namreg_flush - flush namreg I/O buffer. Returns 0 if successful.
*/
extern rv_t namreg_flush( void );
/* namreg_get - retrieves the name identified by the index.
* fills the buffer with the null-terminated name from the registry.
* returns the strlen() of the name. returns -1 if the buffer is too
* small to fit the null-terminated name. return -2 if the name
* not in the registry. return -3 if a system call fails.
*/
extern intgen_t namreg_get( nrh_t nrh, char *bufp, size_t bufsz );
#endif /* NAMREG_H */