root/software/fiemap_testing/analyze.py @ 073c5385
| be16b11b | dsorber | import os
|
|
import sys
|
|||
import fiemap
|
|||
def main():
|
|||
if len(sys.argv) < 2:
|
|||
print 'ERROR: not enough arguments provided'
|
|||
return -1
|
|||
base_path = sys.argv[1]
|
|||
# Statistics variables
|
|||
smallest_extent = 2**20
|
|||
largest_extent = 0
|
|||
number_extents = 0
|
|||
number_chunks = 0
|
|||
total_extent_size = 0
|
|||
directory_count = 0
|
|||
# Iterate over all of the "file" directories
|
|||
directories = [d for d in os.listdir(base_path)
|
|||
if os.path.isdir(os.path.join(base_path, d))]
|
|||
dir_total = len(directories)
|
|||
for directory in directories:
|
|||
path = os.path.join(base_path, directory)
|
|||
directory_count += 1
|
|||
sys.stdout.write('(%d of %d) -- file: %s --- analyzing ... ' %
|
|||
(directory_count, dir_total, directory))
|
|||
sys.stdout.flush()
|
|||
# Iterate over all of the chunk files
|
|||
for file_ in os.listdir(path):
|
|||
file_path = os.path.join(path, file_)
|
|||
number_chunks += 1
|
|||
# Open a chunk file to perform the fiemap call
|
|||
with open(file_path, 'r') as fd:
|
|||
map_ = fiemap.get_all_mappings(fd)
|
|||
# Update statistics variables
|
|||
number_extents += len(map_.extents)
|
|||
for extent in map_.extents:
|
|||
if extent.length < smallest_extent:
|
|||
smallest_extent = extent.length
|
|||
if extent.length > largest_extent:
|
|||
largest_extent = extent.length
|
|||
total_extent_size += extent.length
|
|||
sys.stdout.write('DONE\n')
|
|||
sys.stdout.flush()
|
|||
# Print out final statistics
|
|||
print '-' * 80
|
|||
print 'Smallest extent size: %8d' % smallest_extent
|
|||
print 'Largest extent size: %8d' % largest_extent
|
|||
print 'Average extents per chunk: %8d' % (number_extents / number_chunks)
|
|||
print 'Average extent size: %8d' % (total_extent_size / number_extents)
|
|||
if __name__ == '__main__':
|
|||
sys.exit(main())
|