Torvalds Has Harsh Words For FreeBSD Devs
An anonymous reader writes "In a relatively technical discussion about the merits of Copy On Write (COW) versus a very new Linux kernel system call named vmsplice(), Linux creator Linus Torvalds had some harsh words for Mach and FreeBSD developers that utilize COW: 'I claim that Mach people (and apparently FreeBSD) are incompetent idiots. Playing games with VM is bad. memory copies are _also_ bad, but quite frankly, memory copies often have _less_ downside than VM games, and bigger caches will only continue to drive that point home.' The discussion goes on to explain how the new vmsplice() avoids this extra overhead."
Do I have that right?
If so, I'm not really seeing his issue. Or at least not as hard-line as he sees it. The issue of memory copy performance is a tricky one, especially since CPU cycles are not the be-all to end-all of performance. Does the exception generated really cost that much more than he believes, or is it often eclipsed by the cost of the extra memory read/writes and CPU waits that are normally generated by a copy? Is it really feasible to expect program developers to do manual memory management in a day in age when programs easily weigh in at hundreds of megs?
I'm just not sure that Torvalds is really looking at all sides of this. He may be right, but I'd like to hear more discussion between the *BSD guys and Torvalds before we put this matter to rest. And preferrably without the insults this time.
Links:
Copy on Write as explained by Wikipedia
FreeBSD page on Zero Copy Patches
Duke Uni Research
Javascript + Nintendo DSi = DSiCade
Development-wise, how much is Debian's FreeBSD port from Debian versus FreeBSD? Or are its advancements in tandem with both projects. And does either half suffer from the combination of the other?
Playing games with VM is bad.
:(
I know, I hate it when I have to listen to 26 hang up messages in my inbox only to find out someone is playing games with me.
He who knows best knows how little he knows. - Thomas Jefferson
Methinks we need to start tagging "tantrum" to this type of thing.
It sounded like the opening volley of the second great Unix war, only this time instead of pitting proprietary Unix vendors and systems against each other... it is two open source ones.
It will be interesting to see what weapon the BSD crowd will retaliate with.
Help Brendan pay off his student loans
I respect him and all, and it's not like this sort of thing hasn't happened to me (the called people idiots and the like). Generally, it means that I need a break. Maybe he does too. Take the kids and the missus, go off for about a month, no computer.
-- Who is the bigger fool? The fool or the fool who follows him? --
Pac, Biggie, Proof... How many gangstas gotta die before these turf wars end?
Linus - if you're reading this, which I know you are, and if you take my advice, which I know you do: Beer, barbeque, and your woman. Or a spliff. Whatever you like. Just relax. Breathe deeply. Yoga. Meditation. Tantric sex. Kinky sex. Whatever. Just relax man. You've done the hard work. And now just sit back, and watch Linux trounce over Windows and *BSD.
Get your own free personal location tracker
Maybe it's the stress, dunno but this guy is developing a chip on his shoulder that needs to be knocked off.
In the spirit of open source community development, he can't make statements like this and expect to be a role model for the open source community.
kernels, me thinks it's just sour grapes because Linus can't compete in that area.
What is with this guy slamming on people. I am sure he's bright and all but would it hurt him to try and be constructive instead of just being rude. He could simply provide a example of what problems will occur and then stop.
Is that my COW?
it goes "incompetent idiots."
It is a Torvalds.
That is not my COW.
If Linux is so much better, then everyone will use it over Mach, right?
Won't take long before Linus starts throwing chairs.
Is it me, or "powerful" people are never humble?
gah, i meant Linus in the subject.. jeeez
-- Who is the bigger fool? The fool or the fool who follows him? --
When OS developers attack!
Is it just me, or does the hype outstrip the events?
As a Slashdot user there is no way in hell you have 26 messages on your phone machine. Maybe 3 messages, but thier probably your mom calling to ask you when your coming out of the basement, your friend inviting you to stand in line for tickets to the latest Sci-Fi flick and the Pizza guy confirming your order of 2 large and a 2 liter of Mt. Dew on a Friday night.
"I claim that Mach people (and apparently FreeBSD) are incompetent idiots." I'd imagine that a compentent idiot is one who's smart at being stupid. A incompetent idiot is someone who's not smart at being stupid. That would make them simply smart.
Not likely. Oh, yeah. BSD is dead...
Are the *BSD people are nicer? Or at least more tactful?
If Mach people are idiots, and Apple uses Mach - doesn't that make Apple (and in turn its users) a bunch of idiots too? But don't worry, Apple can redeem itself once it switches to the NT Kernel.
I think Linus has gotten to the point where he just really enjoys trolling. Like, this was OBVIOUSLY uncalled-for, and he's usually such a laid-back guy. Maybe's he's read too much Slashdot. I don't know.
+++ATH0
East Coast kernel-fu vs. West Coast kernel-fu.... FIGHT!
This is so tech I don't even undersatnd what they are talking about yet I am very "Intellectually Curious".
I like-a do-the cha-cha.
Netcraft confirms linux is dying. /FreeBSD user. //who am I kidding, uses linix too
'Go for the eyes, Boo, go for the eyes, aaarrrrrrrr!' -- Minsc
"Windows Vista(tm) will use a patented algorithm for copy on write, called SuperCOW(tm)"
The basic idea is to fake some memory to memory copying operations by using the virtual memory hardware. More specificially, the idea is that when you do a big "write", the space just written becomes read-only to the writing process, rather than being actually copied. When the write is complete, read-only mode is turned off. This eliminates one copy.
The trouble with this is that when you manipulate the page table to do that, you have to do some cache invalidation. That usually results in cache misses, which outweigh the cost of the copy. So this usually is a lose. Linus points out that it looks good on benchmarks, because benchmarks typically aren't using data for anything and thus don't experience the cache misses.
Actually, copying is a relatively cheap operation in modern CPUs unless the copy is huge, since most of the work is done in the caches. The mania for "zero copy" complicates systems considerably, makes them less reliable, and, in the end, usually doesn't speed up real work by much.
Some of this mania comes from Microsoft FUD. At one time, Microsoft was claiming that an "enterprise OS" must be able to serve web pages from inside the kernel. This led to more Linux interest in "zero copy" approaches to be "competitive".
Solaris 10/11 and openSolaris are looking better each and everyday
.. this will help you keep yourself calm.
the oracle has spoken and we are struck with awe...
linus is just a guy, quite opinionated, and quite harsh in his words at times. are we gonna see this kind of slashdot story everytime he misbehaves somewhat? (i hope not)
ah, the joys of a friendly, community driven operating system. I'm 100% sure they'll never, ever become all spiteful over choices that other people want to make in software design.
I think torvalds should spend more time hanging out with steve ballmer, and learn how to properly go ape shit on people.
....more rivalry between the BSD folks and the Linux folks. Using phrases like "incompetent idiots" lifts this out of 'friendly sibling rivalry' towards Holy War territory.
I dig Linus, he's a smart, capable and funny guy, but this kinda dissapointed me. He's better than that.
do() || do_not();
We have a saying in Dutch that goes 'what doesn't come out of the length, must come out of the width', meaning, in this case, that when you want increased performance, you should stop playing games with VM page tables. This seems obvious, but it is really only obvious in an era when memory is cheap relative to CPU power. And of course the reverse is also true; when you want to save memory, you will deliver on performance and you can start playing games with VM tables, shared libraries, and zipped memory to boot if you like, but the saying never stops being true; memory and performance are on opposite sides of a scale.
... lighten up, will 'ya? We all know you're a genius that wrote his own OS at age 19, can't work with Gnome because you're such a power user that Gnome is "for idiots" and NOW you shoot yourself in the foot with arguments not fully covered in all angles and using harsh language towards developers that have crafted something over the years, *democratically* (asbestos suit on), that is stable and with a very altruistic licensing policy (1. don't claim it's yours ; 2. don't blame us if it breaks something ... basically).
:)
Maybe some redmeat-reduction on your diet will help keep your agression levels down a notch.
Pot, meet kettle...
I saw it on Slashdot, it must be true!
Mod that up and spin the meat!!!
Install COX in your backend today!
It's been a while since we had a huge linux vs BSD flame feast.
I'll start.
BSD user: Linux is a confusing mess of programs and is less stable than BSD.
Linux user: Your still here? I thought you were dead by now?
If you wanna get rich, you know that payback is a bitch
You missed the key factor -they are hang-up calls from someone playing a joke.
He didn't say they were legitimate messages from real people who actually wanted to talk to him.
thier probably your mom calling to ask you when your coming out of the basement, your friend inviting you to stand in line for tickets to the latest Sci-Fi flick and the Pizza guy confirming your order of 2 large and a 2 liter of Mt. Dew on a Friday night
You were almost right, but it was my abusive step-dad to tell me to come out of my attic room and clean up his beer cans, my online friend from Japan inviting me to come to Tokyo for a Manga festival, and the Thai delivery service confirming my order of Green Curry, Tea and Tom Yum Gai on a Saturday night.
He who knows best knows how little he knows. - Thomas Jefferson
Who pissed in Linus' Wheaties?
Or did someone dress his plush tux up with an "I love Windows" sign and BSD daemon horns?
There is no "-1 offended" or "-1 you don't agree with me" mod options for a reason.
I was wondering if you were projecting when saying that Linus needed to take a break....
pfft...another linux snob
And in other news...
Grass is green;
Oil is overpriced;
Absolute power corrupts absolutely.
Stop the presses!!!!!!!
Seroiusly folks, is this really that exciting?
- Andrew
I meta-moderate because I care.
Here we go again, imposing "role model" status. Linus is just a guy. Sometimes he gets his buttons pushed, sometimes he's doing the pushing. BFD. Maybe you'd be a little pissy too if Slashdot posted a story every time you did or said something. Linus Prefers Gas-X, Says Bean-o Is For Douchebags. Who cares? (BTW, Linus didn't really say that, I made it up. Don't wanna get the Bean-o people on his case too.)
As far as this whole VM thing goes, time and testing will tell the true story. Meanwhile, maybe we could try NOT deifying Linus (any more)?
I saw it on Slashdot, it must be true!
Our top story tonight, uber geek Linus Torvalds unleashed a scathing indictment of some other geeks, claiming they are skating on thin ice by using Virtual Memory calls to improve performance. The words sparked outrage in the dark rooms of colleeg geek programmers from Berkley to Berlin. The angry geek mobs said they're going to launch a flame war from their computers "to teach Linus a lesson."
In the words of George Takei "Hoooooooly geeeez!" This is news??
IT IS OFFICIAL; WIRED NEWS CONFIRMS: LINUX IS SUPERIOR TO *BSD
*BSD is Dying, Says Respected Journal
Linux advocates have long insisted that open-source development results in better and more secure software. Now they have statistics to back up their claims.
According to a four-year analysis of the 5.7 million lines of Linux source code conducted by five Stanford University computer science researchers, the Linux kernel programming code is better and more secure than the programming code of FreeBSD.
The report, set to be released on Tuesday, states that the 2.6 Linux production kernel, shipped with software from Red Hat, Novell and other major Linux software vendors, contains 985 bugs in 5.7 million lines of code, well below the average for FreeBSD software. FreeBSD, by comparison, contains about 40 million lines of code, with new bugs found on a frequent basis.
FreeBSD software typically has 20 to 30 bugs for every 1,000 lines of code, according to Carnegie Mellon University's CyLab Sustainable Computing Consortium. This would be equivalent to 114,000 to 171,000 bugs in 5.7 million lines of code.
The study identified 0.17 bugs per 1,000 lines of code in the Linux kernel. Of the 985 bugs identified, 627 were in critical parts of the kernel. Another 569 could cause a system crash, 100 were security holes, and 33 of the bugs could result in less-than-optimal system performance.
Seth Hallem, CEO of Coverity, a provider of source-code analysis, noted that the majority of the bugs documented in the study have already been fixed by members of the Linux development community.
"Our findings show that Linux contains an extremely low defect rate and is evidence of the strong security of Linux," said Hallem. "Many security holes in software are the result of software bugs that can be eliminated with good programming processes."
The Linux source-code analysis project started in 2000 at the Stanford University Computer Science Research Center as part of a large research initiative to improve core software engineering processes in the software industry.
The initiative now continues at Coverity, a software engineering startup that now employs the five researchers who conducted the study. Coverity said it intends to start providing Linux bug analysis reports on a regular basis and will make a summary of the results freely available to the Linux development community.
"This is a benefit to the Linux development community, and we appreciate Coverity's efforts to help us improve the security and stability of Linux," said Andrew Morton, lead Linux kernel maintainer. Morton said developers have already addressed the top-priority bugs uncovered in the study.
I, for one, welcome our new Antichrist overlord.
"I claim that Mach people (and apparently FreeBSD) are incompetent idiots."
Linus, who's becoming more outspoken as he ages, needs to find that line between anonymous forum geek and software spokesperson...and then not cross it. Calling anyone an incompetent idiot is both non-constructive if you're hoping to improve a situation, and just plain unfriendly in an area where cooperation amongst developers is so crucial (open source).
I claim that Mach people (and apparently FreeBSD) are incompetent idiots
From where you cab conclude who's actually an idiot.
Don't have a COW, man
Linus Torvalds: "Don't have a COW, man!"
``And in what universe is anyone who can intelligently speak about (much less code around) memory and VM management [be called] an "incompetent idiot"?''
The Universe In Which Spock Has A Beard?
-- Terry
how many stable releases lately?
If you think that were harsh words than you should thank god that he doesn't use autoconf.
Just imagine...
I'm somewhat disappointed in Linus' tone. Having said that... This just begs a response from Theo...
Time to go make some popcorn.
Wasn't there an article a couple days ago about the snobbery and snubbery experienced by newbies to Linux when dealing with the 'community'? When the FOUNDER of Linux would talk that way about fellow Linux Pros then I guess the attitude trickle down is not so surprising. 433t 4 41FE!
-AC
I think we are missing the real issue here. BSD is dead, so really for Linus to even bring it up is to beat a dead horse.
Linus is a gifted engineer ,let him be rude . Aside from Linus being rude , there is no actual story here .
I used to own restourant and also an Office supplies shop . It was quite interesting and made me some money , but I hated the fact that the most important factor in my life was pleasing(customers) or fighting(suppliers) other people . I had to constantly think what to say and how to behave .
I am no longer a business owner , and now I work with a rather gifted bunch of engineers , and frankly it gives me great pleasure to know that neither I nor the people I work with dont really care about being polite , clean shaven well spoken or good looking . I can be rude if I want to , they can be rude if they want to , and we all get along very well .
My Starcraft 2 Blog
In practice I think the FreeBSD approach probably does have speed advantages in most cases, and the fact that it's transparent to the userspace developer would seemingly be a big advantage.
But Linus makes a good case, and I'm glad to see him taking a more conservative approach after the troubles with getting some decent stability out of 2.6. write() and sendmsg() aren't that slow, and the new way will be faster and less fragile. It provides opportunities for optimization for those willing to do platform specific stuff, and it provides a reasonably fast portable way for everyone else. This is nothing new, there's plenty of platform-specific system calls on Linux, like epoll(), and the BSDs do it too with stuff like kqueue().
This sort of thing matters almost exclusively to people doing really deep performance tuning, and for them it's better to present a simple API with large rewards for tuning, instead of transparently doing something weird to an existing API that will break in the field without you noticing and requires really weird usage to get the best performance.
I rarely criticize things I don't care about.
Mod grandparent down!
Captcha word tiresome. How appropriate.
...like Transmeta. Good one, Linus.
Off the top of my head:
Linux to BSD: "Don't have a COW, Man!"
Linus UnMOOved by COW.
Penguin: Demon COW Dog.
... Linus, Ballmer, and Jobs locked in a room, playing musical chairs. Someone's going to come out with a concussion.
Has Linus been taking notes from Theo?
Linus, you may be right and you may be very smart, but you should try a little tact. Here's a good definition for it that I learned from a drill sergeant: "Tact is the ability to tell someone to go to hell and look forward to the trip."
Being nice and respectful doesn't mean you can't tell it like it is.
Do what is right and let the consequence follow
People who live in glass houses should not throw stones
I predict a major fork() of Linux within 5 years.
http://outcampaign.org/
As much as I like Linus, he's starting to be an old fart whose only excuse for throwing insults around seems to be the fact that he's right.
I hope *I'm* wrong on this one ^^
Woohee, that's telling them sumbitches about sumthing!
Or whatever. Er, which one represents Micro$oft?
http://netbsd.org/Documentation/kernel/uvm.html
1 .6.html
http://www.netbsd.org/Releases/formal-1.6/NetBSD-
Zero copy by avoiding *both* the FreeBSD copy on write, AND the Linux vmsplice().
Instead, one piece of code "loans" the pages to another. It disappears from the first ones
address space (or is marked r/o), and appears in the seconds address space. When the second one is done with it, it hands the pages back.
This avoids *all* copies, include the one that Linux still has. The only cost is that
the original user can't write to the pages while the other one is accessing the pages.
But see the release notes on "page loaning". This is true *zero* copy for pipes and
tcp/udp data. No copies. Ever.
Why not focus on the real content instead of write tabloid style articles.
Linus has frequently called people idiots, and ignored patches, and done stuff his own way for a very long time now. He's quite successful at it. Perhaps what most people need to realize is that he is that good, that he can. The average read-Slashdot-during-work-while-coding Slashdotter is not in his league, so decrying his adhominem attacks, or "I would do X instead" arguments just dont hold much water.
I want to delete my account but Slashdot doesn't allow it.
You'll scream! I'll vmsplice ya, it's gonna hurt.
>Mach people (and apparently FreeBSD) are incompetent idiots.
No *you're* a towel.
Linus is not saying COW is bad. He is saying in this specific case it's not necessarily a gain. In fact, he is right that if your "COW hit ratio" is now low enough, it's a loss due to the setup and fault handling cost. In process fork time COW is a win because the ratio is low enough.
An article from Kernel Trap, who probably didn't pay to get it posted.
/., before it turned into a chamber pot for the Big Names.
Smacks of the old days of
More of this sort of article, please.
It's a fair point to comment that the evaluation of server stability compared a stable release of Linux against a development branch of FreeBSD that was not intended for production systems. One might make the case that it was fraudulent to compare the versions that they did, since it's unreasonable to expect stability or scalability out of a development branch that was undergoing significant overhaul and change at the time.
it was not until FreeBSD 5.21 that FreeBSD 5 was recommended for production systems.
spork = fatter
I can appreciate Linus' devotion to lean code. I have seen the results. My workstation (at work, no less, duh) in 1999 was so incredibly slow and my company was bitten in the pockets by the ram price surges that Windows would barely run on it. The company that I worked for used a web-based system, so a gui web browser would be vital to my needs. Without waiting for a miracle (that never came) I fixed the problem by installing linux on the machine.
The difference in performance between windows and linux on that machine was night and day. Even with only 32 megs of ram, the machine was responsive enough for me to be able to do much more than surf the company's internal web management site. Linux worked where windows 95, 98, nt failed miserably. I ran xfree86 on it, latest version of Mozilla at the time, gaim (was gaim even around back then? surely so), and psdoom (everyone must have it!). Windows versions of these programs would drain so much memory, it wasn't funny.
Needless to say, I can appreciate any angry rants revolving around computer performance. Larger the operating system and the apps get, every bit counts.
From a recent LKML email: I got slashdotted! Yay! On Thu, 20 Apr 2006, Linus Torvalds wrote: > > I claim that Mach people (and apparently FreeBSD) are incompetent idiots. I also claim that Slashdot people usually are smelly and eat their boogers, and have an IQ slightly lower than my daughters pet hamster (that's "hamster" without a "p", btw, for any slashdot posters out there. Try to follow me, ok?). Furthermore, I claim that anybody that hasn't noticed by now that I'm an opinionated bastard, and that "impolite" is my middle name, is lacking a few clues. Finally, it's clear that I'm not only the smartest person around, I'm also incredibly good-looking, and that my infallible charm is also second only to my becoming modesty. So there. Just to clarify. Linus "bow down before me, you scum" Torvalds
My views: A page fault's expense seems to vary quite a bit among architectures/processor and also the entire system setup and assumptions on VM system. x86 architectures aren't too good at it and Linux is quite x86 minded. Sure, there aren't many other relevant architectures these days. Also, these days, VM systems aren't used today as they were back when they have been designed. Back in 1988 or 1990 (or before), a typical Unix/BSD system would often page all the time - RAM was never enough - and page in small memory portions. Today, RAM is also not always sufficient, but if not - usually one or some large process(es) gets paged out - usually doing something related with media files or other interactive stuff. For me, COW was a quite efficient overall aproach. Maybe there are some more efficient but less general aproaches around, and maybe a general purpose VM strategy would be different if designed today having all the current hardware setups in mind (and not 20 years ago). This doesn't make someone else an idiot. h.
Copy On Write sounds so cool.
For example, aio_write() writes to the file descriptor, allows you to poll for success a la select, and tells you not to modify the buffer before it's done (but doesn't try to stop you with copy-on-write).
This sounds exactly like what Linus wants.
I hate how all the fools have signed on solely to criticize the language in a conversation between linus and some freebsd devs. If all the uninvolved and clueless fanboys would just stay out of it, we'd have a more useful discussion on this topic.
During that first sentence there I thought you were talking about Theo de Raadt.
The merit of COWs is milk and the occasional fucking by the farmer, that's all.
May be I should have posted this one anonymously...
PS : BTW FreeBSD's better than Linux. (Duck).
rePS : I definitively should have posted anonymously.
malheureusement la stupidité n'est ni curable, ni mortelle.
Funny you should say that Linus, seeing how much of a fucking disaster was changing the VM in the middle of the 2.4 kernel branch that is supposed to be STABLE.
If noticed, the provocation will harden many non-technical Mac faithful against Linux in ways that can not be amended and atoned later. If one side's methods trump the other's, the technical geeks will see the truth and forget the provocations. Most of the Mac faithful will not see these technical resolutions but they'll remember only the venom that Linus spouted here and now.
Does this have any impact on acceptance of Linux? It's questionable but I'd say it does. People and markets imitate Macs, and Mac users therefore have a much bigger impact on market and user acceptance than their size indicates. Linux has a huge, rapidly evolving developer community, but not a solid user-only community. Digging yourself into any sort of hole with the potential user-only group is bad no matter how shallow the depth seems now.
I just hope Linus' little tirade blows over without making headlines on the mac evangelist web sites first.
Its not COW in general that he has a problem with. COW when using rarely modified pages in userspace is fine. Linux relies on this for lightweight kernel threading behavior (cheap forks)... and a bunch of other stuff.
The issue at question here is transient userspace buffers for use in streaming type operations. The FreeBSD approach is to use COW semantics from userspace so that the fast case (when userspace doesn't attempt to write its own buffer) is fast, but if it does, it magically gets mapped to a new PTE with its own copy.
Linus thinks (and he's probably right) that if the user space code intended to touch a buffer that may be in flight, it might as well just do the copy anyway and use write() instead of playing with the VM so that the kernel can do things behind the userspace's back. He thinks that the extra TLB flush delay on top of the actual copy amortized over the expected rate of occurences is greater than the just always-do-it time.
And that's probably a good guess considering that if the code is "streamlined" to modify a buffer right after "submission" that it was going to have to wait for a copy to be made at some point... or to wait for DMA to finish.
Plus TLB flush gets VERY EXPENSIVE when you go SMP. And with all the multi-core/hyperthreading/NUMA stuff we're seeing up the wazoo out there, that's a very valid point.
So in summary... Linus wants: write() always copies... splice() lets the kernel see your page (don't touch it if you don't want to change it at the "wrong time").
Which is different than COW page buffer/mmaps/anonymous memory semantics. Different purpose completely.
THIS THING CAN TURN ON A DIME, MACROSSZERO STYLE ALSO FUCK BETA, ~NYORON
If Linux isn't an incompetent idiot, how come he didn't have a vmsplice() function in the kernel until now?
A Government Is a Body of People, Usually Notably Ungoverned
Thank you. Finally someone gets the big picture and the whole argument here.
THIS THING CAN TURN ON A DIME, MACROSSZERO STYLE ALSO FUCK BETA, ~NYORON
The complaint is not about general copy-on-write, it's about BSD's ZERO_COPY_SOCKET feature vs. vmsplice().
Basic explanation: Suppose that a program is doing a lot of output to a file or socket. The program can generate data faster
than the kernel can consume it, say. So what should the kernel do with the buffer it receives from the user on each write()?
There are three options.
1) Copy its content immediately elsewhere, so that on return to User Mode, the buffer remains writable and writes are safe.
2) Change the access rights of the page containing the buffer, so that no copy need be made unless User Mode attempts
to modify its content before the kernel has completed the write(). If the user attempts to write, it either gets
permission to do so (because the kernel is done) or it gets a writable copy.
3) Let User Mode promise to not modify the buffer's content until told that it's safe to do so, leaving it writable in
the meantime.
The default behavior is (1); BSD's zero copy socket feature is (2), and the point of Torvalds' complaint; vmsplice() is (3).
"Skill shows through where genius wears thin." -Wittgenstein || Religion: uniting aviation and architecture.
I can certainly see the value in explicit notification of page usage, but I have to wonder if this isn't attacking the problem at the wrong level. It seems that these problems are caused by the semantics of read() and write() calls, requiring data to be read/written to an arbitrarily aligned userspace buffers.
Zero copy can definitely make things complex, and in the current implementations, the value is arguable. (and being argued...) Still, memory copies have an associated cost. While they may be better than COW with explicit notification, it is still a performance hack, and represents a non-optimal way of dealing with data transfers. (It could be the easiest and best hack to be made, I can't say. In any case, Linus is acting like a git with his name calling here.)
Perhaps more consideration should be given to the API instead. Using zero copy is obviously a good goal, and it is primarily hindered by the ancient API and protocols. Something where the buffer management is explicit, and the devices themselves actually own the them. (After all, they are the only entities which know what the buffer requirements are.) Arranging it so that the user applications have access to the actual network buffers would be far preferable to playing any of these "games".
Unfortunately, Ethernet and the IP protocols are not particularly conducive to such an optimal implementation. With enough intelligence in the network adapters though, many of the issues should be manageable, and allow for a good zero copy implementation with a suitable API. It may be more trouble for the application, but if you need the performance, it is a small price to pay.
This article had NOTHING TO DO with forking and shared memory between processes. That is very COW and will never change.
And really there is very little COW that happens on forking. Generally process share inhereited mmaps to library files and programs across fork that are read only anyway. Buffer cache is buffer cache and forking just copies pointers. Pages which are mmap shared get the COW semantics and thats a known quantity.
This is entirely about streaming and zero copy networking (where user-space gives buffers to the kernel or vice versa). This is a tricky area and the semantics are difficult.
THIS THING CAN TURN ON A DIME, MACROSSZERO STYLE ALSO FUCK BETA, ~NYORON
The dispute is not about fork(). It is about techniques to avoid copying the contents of I/O buffers from user space to kernel space - aka "zero copy" writes.
Linus (minus the ad hominem characterizations) is arguing that the FreeBSD method of VM based copy on write is a poor performer under real world loads, due to the cost of handling the page faults.
He says that an effective zero copy I/O system requires more explicit coordination between the application and the kernel.
Option A) 80% i686 ASM + 20% C.
Option B) 20% i686 ASM + 80% C.
Test 1) Applications where the performance of COW is very superior.
Test 2) Applications where the performance of vmsplice is very superior.
Test 3) Applications where the performance of merge_ideas_of(COW,vmsplice) is very superior.
Test 4) Applications where the performance of NO-COW,NO-vmsplice is very superior.
Please, don't call them 1D10T5 !!!
This is about streaming.
fork() never entered the discussion.
Everyone uses COW on fork(). That's never been an issue.
The "issues" you bring up about linux systems with slow startup times or whatever you wrote 4 paragraphs about are non-existant. And copying memory pages certainly wouldn't result in a freeze in any case. Apparently you've never used a decent Unix system so how the hell would you know anyway. Please go take a class in OS design while you're add it, then you can contribute your ill-informed non-sequitirs to the discussion.
This is about big-boy networking stuff. You go play with your toy OS.
THIS THING CAN TURN ON A DIME, MACROSSZERO STYLE ALSO FUCK BETA, ~NYORON
...what COW means.
May be people like myself should just stay away from this thread...
I do not believe in karma. "Funny"=-6. Do good and forbid evil. Yours, Oft-Offtopic Flamebaiting Troll.
Should invading one's peaceful neighbours be opposed, or rewarded with trade deals?
Andy went out and said that he thought the Linux approach was wrong, and archaic, and that people should go and wait for GNU.
Linus said that he felt this was wrong, and that being a prof is no excuse for Minix being the mess it was (and Minix was a mess in the late 1980s/early 1990s). He also apologized if he came off as too harsh for his writing about how people should be able to throw away an old design in favour of a new one anyway, etc.
It was very polite compared to some of the non-Andy/Linux replies.
--
Internet Explorer (n): Another bug -- that is, a feature that can't be turned off -- in Windows.
The fake memory copy is still stupid... but for different reasons. It looked good on paper, but it even didn't work very well on a single CPU system. The mach case was not for the kind of implicit COW you get for forking and file sharing and stuff, but for "sending" a userspace buffer to another thread.
But yes, the COW overhead still comes into play which invalidates it all. But he also mentions that really the "copy" if it was explicit instead is in fact very light since its handled by the caches and doesn't involve a TLB flush as the sizes are small. If the sizes are large, then you're doing something fundanmentally wrong and perhaps you should be using SHM and semaphores explicitly.
Anyway his comment about Microsoft is pretty accurate. They were the first people to start pushing the idea of exposing the file buffers directly to network DMA to get speed. Windows NT is actually a good platform for this what with IO completetion ports and other nice backend stuff. But IIS would be the last platform I would want to deploy something like that on (especially in version 4/5).
But having some many layers of caches and coherency protocols makes trying to circumvent all of it dicey unless you OOB communicate your intentions. You also have to balance accounting overhead vs. slow method with no overhead -- common fast case vs. fast case "predicition misses" in all types I/O handling.
Linus is making a claim of bad balancing in fast case vs. prediction miss and overemphasizing overhead costs in the case of the COW sendfile/zero_copy semantics.
Mach was making a similar mistake... hence the grandparents' comment. This parallel was insufficiently shown.
THIS THING CAN TURN ON A DIME, MACROSSZERO STYLE ALSO FUCK BETA, ~NYORON
"When Linus is forced to sit there and watch for three minutes while Photoshop forks to run some simple helper ("
He will ask the question why the Photoshop programmers chose to use a fork and then exec, instead of a call that creates a new process without duplicating the parent memory space. If the Photoshop programmers did not have this choice, we have to ask what is wrong with POSIX that there is not a call to create a new process with some initial values in its argv/envp from a parent process without duplicating its memory space.
Conceptually, COW fork tricks worked well when CPU and memory didn't have as much of a Neumann bottleneck as they now have. Machines in the 1980s had maybe a 2x or 3x divider on memory to CPU. I recently benchmarked several machines for a thesis where the memory bus was 6x slower than the CPU, assuming peak conditions. The moment you get above cache size, performance falls through the floor; you don't want to dick around handling page faults in that situation, you want it to run as smoothly as possible. Linus is right about this.
--
Internet Explorer (n): Another bug -- that is, a feature that can't be turned off -- in Windows.
He is not talking about COW in general. Linux *does* use COW for fork.
He is referring to a specific "optimization" of zero-copy I/O where instead of copying the user buffers to temporary kernel buffers the I/O is performed directly from the user buffers and the pages are COWed to make sure the program doesn't change them after the write call but before the data has actually been transmitted to the network, written to disk, etc.
Using COW in this case may sound clever but the fact is that linear memory copy is extremely fast and updating the page table and flushing the TLB cache across multiple CPUs is very slow.
It seems that the FreeBSD developers were "too clever" in this case. I am still somewhat surprised at the words he used to express his opinion of them. Linus is usually pretty diplomatic.
Stop worrying about the risks of nuclear power and start worrying about the risks of not using nuclear power.
Following this rule, Linus has enough bitching rights on any OSS software that even his grandchildren will have some.
MSFT is the beast lets not have a Linux BSD fight!
Oh, and then there is that article a while back about "linux users being snobs" or some such.. I think maybe the longer you spend around *nix the more introverted and judgemental you get.
just a theory.
Windows has more viruses because linux has more virus coders.
This story was interesting, but not especially newsworthy. However the folks on slashdot explaining/arguing and counter-arguing made this one of the most interesting forums on slashdot that I've seen in a LONG while.
I don't know about the rest of you, but I like the news that really for Nerds. I don't have a big interest in google,patents, American politics etc.
But a story about a Linus having a COW over a COW (pun intended) makes my day, especially when there is a worthwhile argument about it.
PTE overhead is 1K per 1M of (actively) mapped memory. This is the sum of used (not allocated) user pages, memory maps/buffer cache, and kernel buffers.
:-)
Generally speaking a linux system tends to want to push the overall usage towards the physical memory limit. If a system has 2G of physical RAM, the linux system generally will end up with about 2M worth of PTEs and directories after running for awhile.
The reason why the system slows down when you trounce all over 80% of memory is because a very large portion of that memory space is dedicated to file buffers and the data segment of dormant daemons and such. By trouncing all over active memory you evict many process spaces to swap and free read-only shared memory... forcing daemons to reload libraries and such when they wake up and start page faulting. Also the kernel uses heuristics to determine when a program is misbehaving and writing to abnormally large "working sets" and it can evict you before you allocate and write to the theoretical limit you should be able to. The kernel reserves overhead of possibly usable memory for DMA destinations and other processes, swapin space, whatever.
Sounds like you needed more swap anyway, if that was the case. I've been able to exceed 100% easily... its slow, of course.
THIS THING CAN TURN ON A DIME, MACROSSZERO STYLE ALSO FUCK BETA, ~NYORON
Ideally, if time and resources allow it, I would think that one would make the copy when one has some free time between the time the memory gets shared and the time the memory is attempted to be written to. It isn't garbage collection in the strictest sense, but the same concept is involved.
Very nice summary !
.. like .. forever, i.e. since Linus bought his first 80386.
I think the main problem underlying this sitution is that page size on x86 has been 4K since
However, in the mean time, both RAM size and RAM bandwith have increased by 2..3 orders of magnitude, i.e. from 4M to 4G(Ram) or from 16MB/s (250ns cycle time, 32 Bit) to 8GB/s (Bandwidth).
Unfortunately, latency has not improved nearly as much, maybe from 300ns to 100ns for a page miss.
Copying 4K of Ram on recent x86 hardware, if properly done, will take on the order of 1us, even if both source and destination are not in the cache, or if you include the cost of writing back the write-allocated destination from the cache.
If the data to be written by the user app has just been handled, which would likely be the case, and the socket buffer is reused from a pool, you may even be copying from cache to cache, in perhaps 300ns for a 4K transfer.
On the other hand, incurring a couple of page misses due to flushed TLB's and cache-lines takes around 100ns each, even on a single CPU systems, which is are rapidly being phased out and replaced by multiprocessor systems even in home PCs.
Even a substantial amount of data piled up between the user process and the kernel (and this doubled without "zero copy"), say 1Meg, will not noticeably affect Machines with >1GIG of Ram, so I think the performance arguments seem very convincing, and even more so if future developments in hardware are taken into consideration.
There seem to be a LOT of misconceptions about the discussion of vmslice() vs COW vs copy. This has nothing to do with conserving memory and everything to do with high performance I/O. If your app just needs to send a couple small files from A to B, you probably don't care about this at all.
A little background is needed on the terminology and mechanisms of I/O for any of this to make sense. For an example, let's say your app is a very busy web server sending dynamic (but trivial to compute) pages out.
The oldest and simplest method is copy. The app calls write(int sock, char *buffer, int length) on a socket. The kernel coppies the contents of buffer from userspace memory into a kernel space buffer and at least queues the data to the TCP stack before returning.
COW is an attempt to avoid the cost of copying the outgoing data.. In that case, the reference count on the physical pages that make up buffer is bumped up (since now kernel and application are both interested in them), and marks the pages as COW. That is, the virtual memory addresses are set as read only and a flag bit is set (more or less). The latter is done so the kernel needn't worry about them again. By the time the write call returns, the app is able to immediatly write to that memory (sorta) without worry.
When that write happens, the app takes a page fault (writing to a read-only page). The kernel sees that the pages are COW, copies the data to a new physical page, and maps the page in read/write. Then it returns from the fault. OTOH, if the kernel finished with the page first (the data goes on to the wire), it re-marks the page(s) so the app can access them without a copy.
The hope is that often enough, the app WON'T try to write to the pages while they're busy and so the cost of that copy is saved. If that hope comes through often enough it MIGHT be vaguely uesful. I say MIGHT since there is a significant cost just for marking the pages (the CPU's TLB must be flushed for the change to take effect). If the faults happen, it's a BIG loss since handling a fault takes thousands of CPU cycles.
So, for it to have any chance to help, the application programmer must already know enough to TRY to avoid writing to the same buffer again until it gets to the wire. Unfortunatly, it can never be sure so most apps don't bother.
The vmsplice() proposal is fairly simple. In this case, the app explicitly requests special treatment of the write. The pages are NOT marked as read only at all. Instead, the app is on it's honor to leave them alone until the kernel notifies it that they are again available. This saves the copy and the costs of TLB flush AND the (potential) cost of page faults. If the app breaks it's promise, it is the only one to suffer as the data it sent is corrupted (no kernel housekeeping is ever stored in such pages so there are no security implications). Any damage the app might do by sending screwy data could also be done using the old copy method.
What it all comes down to is that playing tricks with page mapping LOOKS nice at first glance since it SEEMS reasonable that not copying bytes around will save CPU cycles and memory bandwidth. The re-mapping (or just permission changes) on pages SEEMS lightweight. Unfortunatly, in fact, re-mapping or changing permission forces cache invalidations and page faults are just plain expensive. With the direction CPU design is going, these things will likely get more expensive rather than less (as they have for most of the history of microprocessor design).
It's really not that complex for an application to use. At least in comparison to the complexities and level of knowledge required to write an app that performs well enough to need this in the first place.
-=- ThE DaRK MaN oF tHe ObScURiTY -=-
They don't have Mt. Dew.
This guy is becoming more and more of a tool.
He acts like he has the answer to every dam thing when in reality there are more ways to skin a chicken than 1.
Frankly Linus you're an arrogant ass and it's showing in your work as well..
Thank you. I've read more than 30 high-modded posts in this article, and yours is the best explanation of the issue by far.
Linux's had copy-on-write on fork pretty much since v0.1.
I'm not familiar with the particular issue involved in TFA, but it's definitely not this.
I also claim that Slashdot people usually are smelly and eat their boogers, and have an IQ slightly lower than my daughters pet hamster (that's "hamster" without a "p", btw, for any slashdot posters out there. Try to follow me, ok?).
/. crowd to put up with his attitude, what reaction does he expect to get from people who don't give a microchannel's @ss about kernel code?
Furthermore, I claim that anybody that hasn't noticed by now that I'm an opinionated bastard, and that "impolite" is my middle name, is lacking a few clues.
Finally, it's clear that I'm not only the smartest person around, I'm also incredibly good-looking, and that my infallible charm is also second only to my becoming modesty.
So there. Just to clarify.
He forgot most mature! Most mature person around! *sigh* Well, if he can't trust the
Interesting that the PDF you linked specifically states: FreeBSD 5.1 was released on Mon, 9 Jun 2003, or approaching 3 years ago. Note that he did his comparison in October of 2003, 4 months after 5.1R was published (but he did not use FreeBSD 5.1 for his tests). As an aside, The initial FreeBSD 5.x offerings were pretty well known to be of less quality than previous releases, partly because of some major structural changes. I'm not making excuses, just stating observations. By the way, FreeBSD 6.1 is about to be released. Your referenced PDF is quite outdated.
Hey, if you want to cherry-pick quotes, I'll take some quotes out of context from the same PDF you referenced above:
OK, a normal quotes, from the same PDF you referenced:
I like FreeBSD, but I have nothing against linux. It's fine. You can't take a single man's opinion (or even his experiences from 3 years ago!) and spread it around as current "fact". You are simply spreading FUD, with no real point.
I was told that I could listen to the radio at a reasonable volume from nine to eleven...
Somebody mod this guy + "insightful" re: drive-by shouting match. Hey, it happens every so often.
C|N>K
So where are the new tests?
So the big question is, what happens if user mode breaks the promise, either intentionally or through lousy programming? If the program fucks up, well, then, I'd rather have FreeBSD's model (actually, I'd rather have someone come up with a thread-safe wrapper function, and keep I/O the way it's supposed ot be, i.e., atomic).
I even have to go so far as to question his honesty, here.
There are two interesting cases: (1) programs that generate so many writes, so quickly, that no matter what they will have to periodically block waiting for I/O subsystems to catch up; (2) programs that generate bursts of writes mixed with bursts of computing or idling, during which time I/O subsystems have a chance to catch up.
Case (2) is quite extremely well solved by COW simply by using a ring of user-space buffers large enough to hold all the writes in a single burst. The resulting code is portable. On a COW system it makes optimal use of memory and time. You could add lots of linux-specific "vmsplice" (or whatever) code to get the same effect on Linux.
Case (1) is also handled by a ring of buffers if the COW implementation has a particular feature. The feature needed from the COW system is to keep a queue of recent writes. If a page fault occurs on the COW buffer for write N, then don't just copy buffer N, copy buffers N....N+K for some appropriate K. Then all the overhead that Linus is talking about goes away. With that version of COW, applications never lose, sometimes win, and always have portable code. Meanwhile, if you just grow your buffers indefinately waiting for the kernel to tell you it's ok to re-use some, you risk thrashing.
Where I think Linus is being less than frank is that he must know these basic queuing theory observations. I don't want to accuse him of incompetence so it must be an issue of frankness, no?
-t
Look, all he's saying is "Don't have a cow, man." Nobody complains when Bart says it.
So the big question is, what happens if user mode breaks the promise, either intentionally or through lousy programming? If the program fucks up [...]
If the programmer didn't know any better, he wouldn't be calling vmsplice() in the first place. Rather, he'd just be using a plain write(), which would work fine, minus the performance boost.
OS/2 actually had a neat solution for this senerio.
A process can allocate pages of memory from the operating system, fill it with data before giving those pages to another process (who becomes responsible for freeing the memory back to the operating system). OS/2 had a number of API calls to make this easy... Allocate memory marked as "giveable"... fill it with data... post it in a message queue... operating system posts message to consumer and has given the memory to the consumer... consumer does something with it... comsumer frees the memory back to the operating system for reuse. OS/2-style zero-copy inter-process communication.
That way, it is clear who owns the memory... In a similar way, such handovers can be done to implement zero copy for all kinds of things...
No sig. Move along - nothing to see here.
The more I read the sample code in these threads, the more I think that this is an arguement between Java/Ruby style code with GC, and C code. Of course, I base this on nothing, but it sounds like BSD style kernel would run code written in higher level languages faster, with a finely tuned GC memory manager, but the Linux way enables C programmers to be the control freaks they are. Not because C programmers would be better or worse than Java/Ruby programmers at memory management, but because the user level code would wind up allocating new memory each iteration through a loop, rather than re-using a static block.
Tough to say what's best without a test or 4, even if I am right...
-Chris
From: Linus Torvalds [email blocked] Subject: Re: Linux 2.6.17-rc2 Date: Fri, 21 Apr 2006 10:58:46 -0700 (PDT) I got slashdotted! Yay! On Thu, 20 Apr 2006, Linus Torvalds wrote: > > I claim that Mach people (and apparently FreeBSD) are incompetent idiots. I also claim that Slashdot people usually are smelly and eat their boogers, and have an IQ slightly lower than my daughters pet hamster (that's "hamster" without a "p", btw, for any slashdot posters out there. Try to follow me, ok?). Furthermore, I claim that anybody that hasn't noticed by now that I'm an opinionated bastard, and that "impolite" is my middle name, is lacking a few clues. Finally, it's clear that I'm not only the smartest person around, I'm also incredibly good-looking, and that my infallible charm is also second only to my becoming modesty. So there. Just to clarify. Linus "bow down before me, you scum" Torvalds
Apparently, all of the major harware venders disagree with your definition of "entry level". I don't know who you are or what you do, but you might not want to program for embeded hardware. You're probely one of those jerks that writes a custom media player for a third party vendor (creative labs?) that requires 512 mb of memory to run. If so, I loathe you, sir.
Well.. maybe. Or Maybe not. But Definitely not sort of.
Wouldn't there be a constant (an unknowable one) representing the percentage of the instances in which memory is reused? If a piece of memory used in a copyOnWrite scheme is never written to by another process, none of the page table updates occur, right? If K is the (often unknowable) constant indicating this percentage of the time when the copyOnWrite exception is generated, I'm thinking the equation you describe would need to be modified to something like:
for Linus' argument to stand up...- First they ignore you, then they laugh at you, then ???, then profit.
You must be one of those smelly, booger-eating, hamster-IQ'd (w/o the 'p', naturally) Slashdotters he mentioned. He seems to like bowing. Are you bowing?
http://www.modmeup.net/wp-content/Linus_cow.jpg Don't have a cow man!
"Consider how lucky you are that life has been good to you so far. Alternatively, if life hasn't been good to you so far
As I remember, the FreeBSD code in question was only compiled when explicitly configured, and the option and code was clearly marked EXPERIMENTAL. The way I see it is that Linus is really uncomfortable with people pushing Linux in that direction because their code is messier and more difficult to refactor (and change directions) in general. In FreeBSD people who implement this code are required to keep the dangerous stuff in a sandbox that can be applied optionally to encourage lots of high quality real-world testing. You can talk about the theoretical cost to caching performance, but the proof is in the pudding. If Linus is right, the best argument is a working example. If he is wrong, the best argument is a working example. Who is he to make disparaging remarks about other peoples' toys anyway?
--- Nothing clever here: move along now...
How can you resist something abbrivated COW?
MOO!
Staring at a white background [on a computer screen] while you read is like staring at a light bulb — Maddox
In a large memory machine with moderate size "write often" memory allocations (i.e. the typical desktop) the Linux scheme would have benefits. In machine that uses datasets much larger than memory that are written rarely, the COW scheme has benefits. An example would be a large page-locked database where the page fault and page lock mechanisms are intertwined.
The proper thing would be to split MAP_PRIVATE into two options MAP_PRIVATE_COW and MAP_PRIVATE_COM (COM=copy on map) with MAP_PRIVATE being defined to one or the other. Whether Linux will be giving user mode applications the option of one or the other, I don't know. I certainly hope it's not going to be a separate userland API from mmap().
Support SETI@home
To be popular, you must say bold things. And Linus Torvalds do it very well...
I'm sure someone said the same thing about the total size of segmented ICMP packets.
Linux does not have the same design. COW may or may not be appropriate. User code does not normally need to be aware of read ahead and write behind. Does it really need to be aware of COW?
Recently, I saw the creator of mach. I asked him if he ever uses mach any more. He said no. :)
(end quote)
Isn't this what BSD folks are looking for to counter the threat of the Menacing Penguin? All your COWs are belong to UVM!
Seriously, I could find very little information on the elusive anflush() system call, and I've got no access to a NetBSD source tree to grep through. Does it even actually exist?
The Hacker's Guide To The Kernel: Don't panic()!
The grandparent poster, like most of slashdot, has taken Linus' comment out of context.
Votka on täysin hyväksyttävä kostuke muroille. Haluaisitteko tulla kanssani piehtaroimaan alasti jäätikölle?
Need we say more ?
I'm running 2.6.16, I was curious about your claim that: /usr -exec cat {} >/dev/null \;
find
hung "the system". Doesn't hang mine. Are you sure your system is configured correctly? Perhaps you are configuring swap @1-2x a physical memory size of 1-2G? Most people don't realize how bad a performance impact that will have on systems. Disk speeds haven't increased at the same pace as system memory. The swap formulae of the 1980's doesn't scale to large memory systems.
?
-l
*BSD's people uses the K.I.S.S. principle ("Keep It Simple Stupid").
Linux's people uses the P.I.S.I. principle ("Program It Strange Idiots").
Linux will say the modern buffers must to be 4KiB aligned, awesome if there are many "100 bytes buffers"!.
-=- ThE DaRK MaN oF tHe ObScURiTY -=-
I also don't think the pagefault takes nearly as many cycles with APIC.
It's worth a note that what Linus is talking about, is basically what Windows NT does with its "Overlapped I/O" mechanism: the pages containing data are locked in memory and used directly by the kernel, and the application receives a notification when it's done. It's on the honor system for not modifying data that's in use, instead of relying on something like COW. There are a few different notification mechanisms to choose from.
There's a good article that describes how high-performance network I/O under Windows NT works in general.
Well aligned buffers are a win, but are not strictly necessary to do zero copy write. The kernel just has to make sure to build a map of all involved physical pages and apply the correct page offsets. For example, you can have 32 128 byte buffers in a single page. If you don't bother trying to align the buffers, they might be in two pages (and the kernel can map them both).
Just mount a floppy disk as a filesystem then eject it and try and read
and write to the filesystem a few times with maybe a sync or 2. It won't
take long. And if thats up to date enough for you you can play the same
game with mounted USB sticks. Yes , 6.0 crashed nicely when I pulled out
a stick before I unmounted it. When i complained about the floppy disk
bug around version 4.3 i was told it wasn't a priority. Typical arrogant
BSD team.
Yes, pretty incompeteable:
Box1:
reboot ~ Mon Apr 24 22:15
reboot ~ Mon Apr 24 00:34
reboot ~ Thu Apr 20 17:41
reboot ~ Tue Apr 18 00:33
reboot ~ Sun Apr 16 19:52
reboot ~ Wed Apr 12 16:26
reboot ~ Mon Apr 10 05:55
reboot ~ Sun Apr 9 19:40
reboot ~ Mon Apr 3 13:05
Box2: (won't turn up anything in the last two months so I give the uptime):
4:07pm up 106 days, 22 min, 2 users, load average: 1.76, 1.82, 2.09
Both are home to 1000 webservers, both running at a normal load of 2. Guess which is which?
Yes, you most probably guessed wrong; the constantly crashing upper one is the FreeBSD; and its not the hardware which has a problem...
"The more prohibitions there are, The poorer the people will be" -- Lao Tse