Dan Cross wrote in <CAEoi9W6HFi8J4FOQXWkpd007gQfwVWMYVRqNcMY8VEPUE2M=r...@mail.gmail.com>: |On Sat, Apr 8, 2023 at 10:37 AM Charles Forsyth |<charles.fors...@gmail.com> wrote: |> It was the different characteristics of hard drives, even decent \ |> SATA, compared to SSD and nvme that I had in mind. ... |In short, when you change storage technologies, assumptions that were |made with, say, a filesystem was initially written may be invalidated. |Consider the BSD FFS for example: UFS was written in an era of VAXen |and slow, 3600 RPM spinning disks like RA81s attached to relatively |unintelligent controllers; it made a number of fundamental design |decisions based on that, trying to optimize placement of data and |metadata near each other (to minimize head travel--this is the whole |cylinder group thing), implementation that explicitly accounted for |platter rotation with respect to scheduling operations for the |underlying storage device, putting multiple copies of the superblock |in multiple locations in the disk to maximize the chances of recovery |in the event of the (all-too-common) head crashes of the era, etc. |They also did very careful ordering of operations for soft-updates in |UFS2 to ensure filesystem consistency when updating metadata in the |face of a system crash (or power failure, or whatever). It turns out |that many of those optimizations become pessimizations (or at least |irrelevant) when you're all of a sudden writing to a solid-state |device, nevermind battery-backed DRAM on a much more advanced |controller.
Funnily Kirk McKusick committed on March 29th fe5e6e2cc5d6f2e4121eccdb3a8ceba646aef2c9, saying Improvement in UFS/FFS directory placement when doing mkdir(2). The algorithm for laying out new directories was devised in the 1980s and markedly improved the performance of the filesystem. In those days large disks had at most 100 cylinder groups and often as few as 10-20. Modern multi-terrabyte disks have thousands of cylinder groups. The original algorithm does not handle these large sizes well. This change attempts to expand the scope of the original algorithm to work well with these much larger disks while still retaining the properties of the original algorithm for small disks. ... This change updates the ffs_dirpref() routine which is responsible for selecting the cylinder group into which a new directory should be placed. If we are near the root of the filesystem we aim to spread them out as much as possible. As we descend deeper from the root we cluster them closer together around their parent as we expect them to be more closely interactive. Higher-level directories like usr/src/sys and usr/src/bin should be separated while the directories in these areas are more likely to be accessed together so should be closer. And directories within commands or kernel subsystems should be closer still. We pick a range of cylinder groups around the cylinder group of the directory in which we are being created. The size of the range for our search is based on our depth from the root of our filesystem. We then probe that range based on how many directories are already present. The first new directory is at 1/2 (middle) of the range; the second is in the first 1/4 of the range, then at 3/4, 1/8, 3/8, I only took a shallow look as i have no glue, but is sprung into my eyes so i remembered it. --steffen |Der Kragenbaer, The moon bear, |der holt sich munter he cheerfully and one by one |einen nach dem anderen runter wa.ks himself off |(By Robert Gernhardt) ------------------------------------------ 9fans: 9fans Permalink: https://9fans.topicbox.com/groups/9fans/T354fe702e1e9d5e9-Mc6cf9913394dadc41af96812 Delivery options: https://9fans.topicbox.com/groups/9fans/subscription