{'fraction_non_alphanumeric': 0.025233132199670872, 'fraction_numerical': 0.004936917169500823, 'mean_word_length': 4.96078431372549, 'pattern_counts': {'":': 0, '<': 0, '<?xml version=': 0, '>': 0, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
Trace-based analyses and optimizations for network storage servers

In this thesis, I show how network storage servers can infer useful information about the requests they are likely to see in the future by analyzing the history of requests they have observed in the past. I also show that this information can be used to improve future decisions about disk block allocation and read-ahead and thereby increase network storage server performance without any change to its clients or the applications running on its clients. 
The contributions of this thesis are: (1) A new suite of utilities for gathering and analyzing NFS traces. (2) Long-term traces of three contemporary workloads. (3) An analysis of these workloads, showing that they differ in important ways. These differences may offer an opportunity for workload-specific optimizations. (4) Optimizations to the NFS read-ahead heuristic for sequential and non-sequential access patterns that have sequential subcomponents. For the latter type of access pattern, end-to-end read performance can be improved by more than 50%. (5) The discovery that for most files, the create-time attributes of the file (such as its name) are strongly associated with the operations that will be performed on the file. These associations can be discovered automatically by analysis of the network traffic between an NFS server and its clients. (6) A demonstration that these associations can be used to automatically construct models that accurately predict properties such as the eventual size, lifespan, and access patterns of new files. (7) A demonstration that these models can be used to improve on-disk locality of reference by using predictions to enhance the file and directory layout heuristics and thereby arrange for the hottest blocks on the disk to be grouped together.