The Filesystem

While everything in Unix is considered to be a file, including data, executables, directories, and devices, the most common type of file is the regular file, which is simply a stream of data bytes. There is no distinction in Unix between text files and binary files. Our principal concern in serving web content is how to access regular files as quickly as possible. In order to understand the issues involved in access speed, we have to know a bit about the Unix filesystem.

There are many kinds of filesystems in use in Unix systems, but the most common kind is the Unified File System (UFS), derived from the Berkeley Fast Filesystem. UFS filesystems consist basically of inodes, directories, and data blocks. Inodes are 128-byte records on disk that describe files. Each inode contains a list of pointers to the data blocks on the disk that make up a file. Given the number of pointers in an inode and the size of the data blocks, we can see that each inode can point to only a fixed amount of data storage. The size of the data blocks is often 512 bytes or maybe 2 kilobytes by default, which is fine if you have a lot of small files, but it is suboptimal if you are going to be serving only a few large files. For larger files, at least one of your inode pointers must point to a sort of second level inode called an indirect block that contains pointers to other data blocks. And this can continue on to doubly indirect blocks, but there is a performance penalty in accessing parts ...

Get Web Performance Tuning now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.