On Tue, May 22, 2012 at 06:59:25PM -0700, Wolfgang S. Rupprecht wrote:
The first sync was to queue up the blocks to be written. That
sync(1)
call would not block. The second call would block until the flush
finished. The third one was just for luck. Or something.
"Just to be sure."
Sync under Unix used to be systemwide--dunno if that was changed later, or
is different in Linux. But it caused some major headaches--essentially,
any user could cause the system to stop what it was doing and sync.
Not too bad if there are only a few users.
Very bad if there are, say, 300 users.
Back around 1983 or so, I was on contract at at Bell Labs working on the
5ESS Field Test Set. (This was the first portable Unix system--an 8086
with a custom MMU running System III in a box that _just_ fit under
an airline seat; weighed about 40 pounds. Booted from a floppy--my
work, that. I walked in one day with a floppy drive on my desk, and
a note that "we need a diskette driver written for the FTS by Friday."
My introduction to driver design in Unix...by fire.)
ANYWAY, one day the development server just...slowed...to...a...crawl. As
there were a few hundred users, and we were desperately trying to get 5ESS
out the door, this was a Bad Thing(TM). The OS support staff couldn't find
anything wrong with the system; we had everyone who knew anything looking
for the cause.
About this time, a new guy came to me to show me his nifty vi macro. He
was absolutely paranoid about losing anything he was editing if the system
crashed. SO, he wrote a macro that did "sync;sync;sync"...after *every*
keystroke.
We'd found our problem.
Cheers,
--
Dave Ihnat
dihnat(a)dminet.com