Posted
by
Unknown Lameron Wednesday December 07, 2011 @01:20PM
from the rotating-disks-are-so-90s dept.

ScuttleMonkey writes "A joint venture between Intel and Micron has given rise to a new 128 Gigabit die. While production wont start until next year, this little beauty sets new bars for capacity, speed, and endurance. 'Die shrinks also tend to reduce endurance, with old 65nm MLC flash being rated at 5,000-10,000 erase cycles, but that number dropping to 3,000-5,000 for 25nm MLC flash. However, IMFT is claiming that the shrink to 20nm has not caused any corresponding reduction in endurance. Its 20nm flash uses a Hi-K/metal gate design which allows it to make transistors that are smaller but no less robust. IMFT is claiming that this use of Hi-K/metal gate is a first for NAND flash production.'"

I love SSDs, especially for development work. Nothing like having a dev VM per client each on their own little SSD isolated from your non-work related default operating system. But SSD's are dangerous...

SSD's are like crack to bad applications. The magically make them feel better, while masking the underlying problem. I'm worried what the future is going to hold when the average desktop comes with an SSD drive. Already I've already seem some development companies demo financial software on striped SSD's as if that's what everyone runs these days. I guess it's no difference then an abundance of RAM and an abundance of CPU power. < Insert in my day rant here >

Well, that's the problem, isn't it? Lazy programmers aren't writing efficient code, they're just relying on Moore's Law to push them through. Of course, I don't think the average consumers understand much about efficiency, seeing as eyecandy is so popular, even a selling point.

Well, that's the problem, isn't it? Lazy programmers aren't writing efficient code, they're just relying on Moore's Law to push them through. Of course, I don't think the average consumers understand much about efficiency, seeing as eyecandy is so popular, even a selling point.

This moralistic spin ("lazy" programmers) is absurd. The tradeoff between development cost and hardware requirements is obviously affected by cheaper yet higher-spec hardware. If you want to run WordPerfect for DOS at insane speeds on modern hardware, go right ahead. That piece of that software cost $495 in 1983 (cite [answers.com]) and was written in assembly language for speed. (I hope the connection there is not lost on anybody).

There are some of us who are quite proficient with assembly language. We also had some very sloppy compilers back then, so the two went hand-in-hand.

Back then, I would build a first prototype in straight C (or whatever), then identify the bottlenecks and rewrite those functions in assembly. Heck, in school I wrote a few QBasic games/apps that linked in some assembly calls. Sometimes I'd get cocky and copy the assembled code directly into a QBasic variable, then execute it. For common stuff like blits and mouse calls, I could type those opcodes from memory. You wouldn't think a QB game could handle 3D graphics as 320x200 on a 386, with sound effects and digital (MOD) music, but with a modest application of hand-tuned code, you can write the script-like glue in whatever language you want with only a minimal impact on final performance.

I'm not saying we need to write all apps in raw assembly, that's absurd. We rarely did that back in the day, except for extreme situations and bragging rights. Today's compilers seem to do a good-enough job, but the faster they get, the more our so-called developers push into truly wasteful practices like nested script interpreters - most PHP and Ruby frameworks fall into that category. Do we really need 16-core machines with 48gb of Ram to push a few pages of text ? Not if we were writing actual computer code, and not this navel-gazing techno poetry that's more for humans than machines.

There are still people coding video games for 8- and 16-bit platforms that don't lend themselves well to the abstractions of C. These platforms include retro consoles, Chinese SoCs, and Chinese SoCs compatible with retro consoles.

I occasionally do use assembly, but not for the entire program. I just apply it sparingly where it yields the greatest benefits. Most C compilers have gotten quite good at automatic optimization, but there are some scenarios where a bit of hand-tuning still helps.

I kind of got into a pro-assembly rant there, but what I meant to say is that assembly was a tool, to be used where appropriate. The only times I wrote software in pure assembly were when I had nothing but DEBUG.COM, or if I was participating in

They aren't lazy, they're productive, and taking advantage of the resources available.

When they're tired of putting the first-to-market markup and the bleeding-edge markup in their bank accounts, then they'll address reports of sluggishness or resource starvation in less-profitable market segments.

Right now, though, the fruit that are hanging low are fat and ripe and still fit in their basket.

Well, that's the problem, isn't it? Lazy programmers aren't writing efficient code, they're just relying on Moore's Law to push them through. Of course, I don't think the average consumers understand much about efficiency, seeing as eyecandy is so popular, even a selling point.

Most of the programmers I know don't care about timelines, eyecandy, popularity or selling points. These guys are computer nerds. Just as car nerds want their hot rods to purr when idle and roar when pushed, most programmers want their code to run fast, efficient and clean. The problem is that programmers are under thumb of timelines and feature bloat put on them by management and sales.

This is not necessarily a bad thing as if it were not for deadlines, no programs would ever be finished. Yes, code is more inefficient, but that is only because the hardware has allowed it to be. It does not hurt the bottom line if a customer has to wait 1.5 seconds for program to launch or 3. The bottom line is what management cares about, and to be fair, it is what drives business and keeps Red Bull stocked in the break room fridge.

It does not hurt the bottom line if a customer has to wait 1.5 seconds for program to launch or 3.

What does hurt the bottom line is device makers who reject a slow-launching application from the device's official application repository because the repo curator feels slow-launching applications reflect poorly on the platform. In such a case, an application developer has to at least put up a splash screen while the program is launching.

Well, that's the problem, isn't it? Lazy programmers aren't writing efficient code, they're just relying on Moore's Law to push them through. Of course, I don't think the average consumers understand much about efficiency, seeing as eyecandy is so popular, even a selling point.

Your comment is either naive or disingenuous. There are plenty of reasons that lead a specific software to do a good job under a specific scenario but do poorly under another which is completely different, and all this without incompetence being a factor. Let me explain.

Consider one of the most basic subjects which is taught right at the start of any programming 101 course: writing data to a file. For that task, a programmer relies on standard interfaces, either de-facto standards such as platform-specific interfaces or those defined in international standards such as POSIX. This means that a programmer tends to not be aware of any specification regarding the file system or even the underlying hardware when developing a routine that dumps data to a file. Basically, what tends to be taught is to open a file, write to it and then close it. This tends to be acceptable in most scenarios, but this is a dangerous thing to do. After all, just because some data is written to a file it doesn't mean the data is immediately written to that file. The underlying platform may rely on IO buffers to be able to run things with a bit more efficiency. This means that even though your call to write() does succeed, and even though your program can successfully read your data back, that data isn't in fact stored in your file system. This means that if your program is killed/crashed or if your computer dies then you risk losing your data and corrupting the file. If this happens, does it mean that the programmer is incompetent?

This problem can be mitigated by flushing the data to a file. Yet, calling flush() doesn't guarantee that every single bit of your data will be successfully stored in your file system. The thing is, this only guarantees that, when flush() returns, the data is flushed. If the system dies while your program is still writing away your data then you quite possibly lose all your data, and no call to flush() can save you from that. If this happens, does it mean that the programmer is incompetent?

Some clever people took a bit of time to think about this, and came up with some techniques which avoided any the risk of corrupting your data. One of the techniques is to dump the data to temporary files and then, after they succeed in saving the data, the old file is deleted/renamed to a backup file name and the newly created temporary file is renamed back to the original name. With this technique, even if the system dies then the only file which might have been corrupted is the newly created temporary file, while the original file is kept in its original state. With this approach, the programmer guarantees that the user's data is preserved. Yet, this also has the nasty consequence of storing what's essentially the same file in entirely different inodes. This screws with a lot of stuff. For example, it renders hard links useless and screws around with the way versioning file systems work. If this happens, does it mean that the programmer is incompetent?

So, no. This hasn't anything to do with what you arrogantly referred to as "lazy programmers" or even incompetence. Times change, technical requirements change, hardware requirements change, systems change.... And you expect that the software someone designed a couple of years ago will run flawlessly and avoid each and every issue which are only being discovered today and might only be discovered tomorrow. How can programmers avoid these issues, if they don't even have a working crystal ball? This isn't realistic, and you can only make such claims by being completely clueless and out of touch with reality. So, please tone down your arrogance and spend a moment thinking about this issue.

Some clever people took a bit of time to think about this, and came up with some techniques which avoided any the risk of corrupting your data. One of the techniques is to dump the data to temporary files and then, after they succeed in saving the data, the old file is deleted/renamed to a backup file name and the newly created temporary file is renamed back to the original name. With this technique, even if the system dies then the only file which might have been corrupted is the newly created temporary file, while the original file is kept in its original state. With this approach, the programmer guarantees that the user's data is preserved.

Actually, you don't - this is what caused massive data corruption under the development of ext4. Write to temp file, rename over, crash, boom 0 byte file. There's no guarantee in POSIX that the data is written before the rename happens, even though this is a common technique and broke hundreds of applications. The "solution" was to call flush() before every rename(), which would put your application on hold until the file system returns every time. Eventually they realized everyone wasn't going to fix their

Writing inefficient bloated code more often than not has nothing to do with being lazy. It frequently has to do with looking at the big picture. Spending $100k in developer time to optimize code that could run unoptimized on $100 worth of extra hardware isn't being industrious. It is wasting resources.

There are plenty of places that optimization makes sense, but more often than not, ease of future maintenance should be much higher on the list of priorities.

It is true that consumers might choose a competitor if your software runs too slow. They might also not see any difference in speed because their equipment is fast enough that your software runs faster than they use it. Then when you add the extra cost of optimization, and the delay to market, you can just as easily find the consumer choosing the product of another company BECAUSE you decided to optimize your code.

Most software written isn't sold. It is customer written for a single company. Your comment doesn't even work when the software is sold to the public. If the same decision is made by 1000 different software companies since the extra $100 that each customer pays will allow every software development company to save on developer cost for optimization.

Software sold to the public is not a one to many relationship. It is a many to many relationship.

Indeed, as Carmack said in an interview once, more important than computer hours these days are programmer hours. He's rather use super high-powered CPUs rather than fiddle around with less costly GPGPU implementations simply because of developer time constraints.

Lazy programmers aren't writing efficient code, they're just relying on Moore's Law to push them through.

Wrong.

It's not about lazy programmers, it's all about calculating managers.

To cite one of my managers during a project review: Next time you're not going to perfect our code like you did on this project. If we measure software quality on an A to F scale, and if our client is satisfied with quality level C, then stop improving your code once you hit that C level. Going for the A will only increase project cost, but not our revenues..

Of course if you volunteered to pay for the increased project costs out of your own wallet, maybe you would have a case. But since you have already been told it won't increase your revenue, much less your profit, I don't see anyone going for that deal. So why should your boss? There is a reason you trained as a programmer and not as a manager/businessman. Get back inside the box.

As a sanity check - I found some data from Mtron (one of the few SSD oems who do quote endurance in a way that non specialists can understand). In the data sheet for their 32G product - which incidentally has 5 million cycles write endurance - they quote the write endurance for the disk as "greater than 85 years assuming 100G / day erase/write cycles" - which involves overwriting the disk 3 times a day.

That's for old-ish tech and a smallish drive. For consumers, large drives get written to exponentially less. Consider, the vast bulk of consumer "big" drives are and movies. These are big, chunky files that don't get overwritten very much. As a consequence the vast majority of your

I'm not sure that these "large files" prove what you think it does. Then again, I'm not entirely confident that the opposite is true, either. Even if it doesn't prove what you think it does, I think your point still largely stands.

Let's say I have a 32G SSD device. If I put some movies on here, I'm left with, say, 16G, of "active" disk space usage. If I then go and use what's left very actively, the write endurance for that section falls given the same usage patterns. For example, at 100GB/day erase/wr

And don't forget that if you overwrite a single byte in a block, then that's going to result in a full block write.

Given that people who use their SSDs for compilations have said they can wear them out in under a year with older generation disks that supported many more write cycles, a crappy application could easily wipe out the next generation of SSDs in a few months by continually writing to the idsk.

Not exactly. The older SSDs didn't do write leveling. Also, most OSs don't force a write to disk when a single byte in a sector changes (perhaps it does on linux, I don't know). Most SSDs also have write caching today so even if the OS was silly enough to request a write to disk, it would quickly get invalidated by the next request to write to the same sector before it even hit the flash portion of the SSD.

Lastly, even if you disregard all of that, then you also must realize that you don't need to do an erase if all the changes you are making are turning bits on. In that case, you just do a write instead of erase and write, and that doesn't wear out the SSD at all (I believe).

Also, there is nothing keeping the SSD from periodically moving data with low write counts to the high write count portions of the disk in the background in hopes that the semi-static data will remain semi-static.

For as much as anecdote != data, I took a recent (installed it Thanksgiving 2010) OCZ MLC SSD (30G) SSD, and gave it a database workload wherein a commit was made every 5 seconds. Wore it out in a year. Replaced it in August.Relevant SMART data (cleaned up so/. doesn't hate on it)205 Max_PE_Count_Spec 0x0000 - - - Old_age Offline - 10000206 Min_Erase_Count

Except this isnt true. Flash lifetimes are dropping due to process shrinks, but SSD lifetimes are remaining steady due to increasing capacity made possible by those process shrinks.

This is the problem with you SSD critics. You get that one nugget of information and then gleefully go on spitting bullshit at everyone on forums like this one. To be quite clear, YOU DO NOT KNOW WHAT YOU ARE TALKING ABOUT.

Why do you volunteer to talk about a subject that we both know that you are poorly informed about? You dont see me talking about JAVA performance because... guess what... even though I know a couple things about JAVA, I refuse to make declarative statements about topics where I know that I only know a couple of things about.

If you are an expert in something... wait for that topic before you act like an expert.

There is an upside to less knowledgeable people discussing, and that's that it becomes a sort of brainstorming, as those in the know tend to think along similar lines (even when they have differing opinions) while those who don't know often come with orthogonal ideas that the knowledgeable can convert into new constructive ideas (though admittedly that's pretty damn rare).

Yes, you get the same number of writes if you buy a much bigger disk. But if you have a fixed need like "I need 128GB for my OS disk, I'm just waiting for the price to come down" then you get lower prices - and lower write cycles. If I'm buying one 3TB disk instead of 3x1TB disks, it's very likely that 3TB disk will see 3x the data traffic that a 1 TB disk would. You are the idiot that keeps ignoring that.

You are absolutely right... on the desktop. On laptops/tablets/phones you have the battery to contend with. Most of the time when I notice my battery bar go down really fast on my laptop it is some stupid flash thing hogging the CPU in an open web page. Sometimes it is some other poorly written application running wild. I can close it, but by then I've already lost time.

Who cares? It might be a truism, but the people who care, care. As a programmer, there's a balance between maintainability, performance, and ease of development that I care deeply about. I'm proud of my work and I'm not willing to slap something together with no regard for efficiency or longevity.

If I were making a game, I would probably be willing to sacrifice some ease of development for the sake of better efficiency. If I were making a prototype to demo UI concepts, ease of development might be paramount

Ha! My reaction is opposition, not really debate;) . Most rants are overreactions, so I don't take them seriously.

Of course I care about efficiency, and I can tell a software patch that brings O(n) to O(sqrt(n)) is instantaneously better and cheaper than spending extra bucks in chips and power.

My point still applies, though: adding horsepower to your machine can be a faster solution than optimizing your code, if you have the resources available and need a solution *today*. I did it one or two times, when I

Agreed. It is even more frustrating when you know how little effort would be required to drastically improve performance in many of these apps.

There's one app I love to pick on, because it is legendary in its inefficiencies, and that is Cubase - the multitrack audio production tool. Just to launch it on this $10k PC takes about 15 seconds, because it looks through a few directories for a number of plugins, does god-knows-what with each of them, and eventually presents a blank workspace for me to actually

I understand what you're saying but at the same time software that wastes compute resources is also wasting dollars. Dollars needlessly spend on employee hours (waiting for operations to complete), new/upgraded hardware to cope, and one that many people might not realize extra software development, maintenance and support costs. Inefficient software quite often reflects a poor implementation under the hood and frequently behind the wheel. One thing nearly every engineering discipline recognizes is that the fewer moving parts a system has the inherently more reliable and maintainable that system becomes. This is no different with software. Software bloat is the bane of those trying to implement features to support new requirements and a nightmare for those trying to ensure quality control. Software bloat often shows up in the user interface as well in poorly implemented workflows that further slow down productivity.

Contrary to popular opinion, fancy GUIs replete with eye-candy generally aren't the problem--normally they're built on top of highly abstracted, well optimized and tested frameworks--it's evolution. One of the more common sources of inefficiency is software bloat. Bloat can even plague software that was initially well constructed. Over time, after several iterations of evolution the feature requests, the various modifications and the resulting baggage train required to support them can grow substantially and weigh down a system. It isn't that the bloat is a requirement of a given feature set per-se but rather reflects a set of compromises made necessary by an initial architecture that wasn't designed to support them. Management and even sometimes the engineers have a hard time accepting that a significant or even complete tear down and reconstruction with a new architecture is the best and most appropriate choice. One of the easiest and most notable places this problem can be recognized is in web browsers. Take a trip down memory lane and compare the features, bloat, and usability of the various web browser throughout time.

It's not though, because were that software properly written in the first place, we would already be at the 1 second swap on the "old" hardware, and the SSD would make it 1/10th of a second. If all these dramatic improvements in hardware performance are met with equal regressions in the software, then why the heck are we upgrading in the first place ?

Does Firefox need 10 seconds and 400mb of Ram just to launch ? Yes, it does, but according to the functionality it provides, this should be possible with les

Don't say sorry. Your right. Spending $100k on code optimization to avoid spending an extra $100 on hardware makes no sense at all. Code optimization makes sense if $1000 worth of development time will save $10000 in new hardware, sure. But using the sky rocketing of hardware speed and plummeting of hardware prices to avoid large amounts of development cost is certainly a valid path.

It could be argued that the problem lies with hard disks and not the applications. SSDs are nice because you aren't forced to artificially contort data access to fit the slow-seek/fast-linear-throughput model of magnetic hard disks. Removing an arbitrary restriction on program style is a good thing.

CDs, DVDs, and BDs need even more such contortion. And until high-speed Internet reaches rural areas of the United States, distributing really big applications on optical disc isn't going anywhere soon..

This is nothing new. There was a time that I vividly remember in which memory cost over $200 a meg (and it cost even more before that.) A single line of redundant code was considered a sin. The price of memory and hard drive space came down and now software is more bloated as programmers focus on other things like security and usability. Is that bad? Yes and no. Like all things, the effect of an improvement in something is many fold. There are positives and negatives... we just hope it's mostly positive.

The fact that people in the software industry think bloat security and usability are separate independent things and not related is a horrible thinking. People keep doing designed like they aren't related to each other. This i sloppy engineering.

If it's a one-off, and the upgrade route actually does only cost $50 for more memory, yeah, sure, add the Ram. The problem with the Wilhelm anecdote is that nobody sane would have overlooked that simple detail, unless it's one really stupid dead-dumb-and-blind company.

If your software is being deployed to thousands of machines, which would each require an upgrade, you'd better optimize the crap out of it.

If your software is being deployed to a group of servers, where an 8% reduction in CPU and memory usage

Already I've already seem some development companies demo financial software on striped SSD's as if that's what everyone runs these days.

I think it's a fair assumption if you are selling financial software to a financial company that they will buy a SSD if that's a requirement. Just because developers aren't optimizing for a small footprint these days it doesn't mean there's no optimization being done. It just means that they optimize for something else (development cost, feature set, or whatever their business plan says is most important).

By the way when you see a computer game demo these days, do you think "These guys are on crack if th

By the way when you see a computer game demo these days, do you think "These guys are on crack if they think everyone's got one of those cards?", or "With these recommended specs what is this written in, VisualBasic?" ?

Sometimes, yes. There's one game in particular, that I play a fair bit. It has roughly Xbox (1) era graphics, yet manages to stutter on my balls-to-the-wall quad-SLI GTX 295 system. Even just one of those GPUs should be able to run the stupid game at 300 fps, but the engine is such a mess that it somehow wastes all that time doing nothing useful. I'm also going to mention that the entire game is only 2.5 gigabytes, yet takes about a minute to load one level. With my absurd hardware, I can copy the enti

I'm worried what the future is going to hold when the average desktop comes with an SSD drive. Already I've already seem some development companies demo financial software on striped SSD's as if that's what everyone runs these days.

By any chance do those companies also sell the hardware where their software is supposed to run at peak efficiency? And do those companies also sell support contracts to maintain and tweak those systems? Because if they do then I bet dollars to doughnuts that their main motivation isn't technical perfection but the maximization of their company's bottom line.

This is what I thought when I bought a Mac, not long ago. My initial impression was that this overpowered laptop was running a lot slower than it should. I don't know what OSX does under the hood, but goddamn that thing was slow. Then I threw one of those hybrid drives at it, with the 4GB of SSD cache, and now it feels "normal". Maybe it's because I'm spoiled by the truly ridiculous SSDs in my PC, or maybe Mac users are accustomed to things being a bit laggy, but to me it screamed of excess background I

Even though it sounds like "market speak," there are lots of hard problems out their that require efficient code skill (DNA sequencing/analysis, anyone?). Your efficient coding will just shine that much more now.

How do you know those are bad applications? Is optimizing for rotational media really the measure of a well-written program? What about programs that run well on spinning disks, but destroy SSDs? What about when SSDs are our primary storage medium, or arrays of squid with eidetic memories and pizeoelectric tentacles? Should every program be optimized for rotational media, SSDs, and EMPTS? Or is rotational media the end-all-be-all of a program's optimal storage environment?

Average desktops come with the slowest bargain-basement hard drives the manufacturer can buy by the truckload. There is an excess of processing power and RAM, which apps haven't wasted. There is sure as hell no excess of disk speed.

RAM is certainly not the bottleneck in terms of speed, but quantity is never excessive. In fact, most of the performance penalty you feel on low-end machines is when you run out of RAM and start swapping more heavily to the slow fixed disk.

It doesn't help that Windows uses swap regardless of how much RAM is free (on my gaming machine, if I enable the swap file it is used when there is MORE THAN 10GB RAM AVAILABLE). Switch to Linux and that limitation disappears, it will only start swapping when the RAM is somewhere between 2/3 full and completely full, depending on the (much more sane) default setting. 4GB RAM is actually pretty hard to use up - especially without help from a Firefox instance with a zillion tabs open. Most average users will

If you have 12GB in your PC, and you're using it normally, you can disable swap entirely. Sure, your commit rate will jump a bit, but you still have several times more Ram than you need. Swap space has a usefulness even when you have memory available, because a properly tuned VMM will treat it as low-priority commit fodder - meaning if an app requests 10 gigs of buffer space, but has not yet put anything in there, the VMM will earmark swap first, so as to not tie up physical RAM until it is actually needed (if at all). In a sense, it's an accounting trick that allows the OS to "borrow" memory without necessarily using it. It's like a line of credit for memory; you're best to avoid using it, but if you need a security deposit for something, that mastercard is ideal. Swap is like that mastercard. It can help swing you through tight spots, but if you abuse it, you enter a world of pain...

Warning: some applications (such as the Java VM) more or less depend on the swap to be present; unused memory can be swapped away, leaving you more memory for other applications. Futhermore, on many OS platforms, you need at least the amount of swap as the amount of RAM to be able to hibernate your computer.

It doesn't help that Windows uses swap regardless of how much RAM is free

Right, I wasn't really referring to the use of swap that you are experiencing - I was mostly talking about when a process gets out of control <cough>Firefox <cough> and the OS starts swapping like mad.

Um, by using the system utilities to see disk activity and the associated files (the windows equiv of lsof).

The OS will commit memory to swap when it is not being used yet to free up more real memory for other applications.

Even with 10gb free? Why? Since this is his gaming machine, I'm assuming that he's talking about enabling the "minimum suggested" pagefile of 512mb in size. Even with 16gb of ram, windows will waste time with io to this pagefile.

Anyone pairing a C2D with less than a gig of Ram should be tarred, feathered, then chucked into a wood chipper. I haven't built a desktop with less than 2 gb of Ram in at least 6-7 years - and I don't mean my own, I'm talking about PCs I've built for non-techy friends and family.

This isn't about storage size. That war is lost for the desktop ( see Bloatware ). If it wasn't for smart phones and tablets cause people to still think about storage size for some applications, it would be even worse.

When we talk about SSD drives vs HDD drives, were are primarily talking about drive bandwidth and access times. SSD's have no seek time, no spin up time, and their bandwidth in read/writes are at least 2x as fast, and can be up to 4x or 5x as fast.

Think of the engineering and time that goes into making an application 'snappy' to load. Like say Chrome or Word or Photoshop. Now weight that engineering cost vs simply installing an SSD. Now you see how this is going to affect future software development.

But GP ( or uncle, or 2nd cousin) is right, this is a Rant. Each of these Moore's law watermarks tend to have similar effects on software development. I think bleeding edge apps ( including games ) generally herald what is to come....

A lot of the tablets, etc. are coming out with eMMC type flash instead of raw flash for internal nonvolatile memory. How come?

I would think eMMC would be more expensive (has built-in controller) than raw flash chips. And slower, too, because eMMC has no concept of file-systems and therefore cannot do optimal space selection or wear-levelling. I'm sure the teeny, tiny controller in the eMMC does the best that it can, but I'm also sure that JFFS2 and YAFFS manage flash chips a lot better. The only savings I see are is that the device manufacturer has to layout and route a fewer traces on a circuit board when using eMMC.

A lot of the tablets, etc. are coming out with eMMC type flash instead of raw flash for internal nonvolatile memory. How come?

I would think eMMC would be more expensive (has built-in controller) than raw flash chips. And slower, too, because eMMC has no concept of file-systems and therefore cannot do optimal space selection or wear-levelling. I'm sure the teeny, tiny controller in the eMMC does the best that it can, but I'm also sure that JFFS2 and YAFFS manage flash chips a lot better. The only savings I s

NAND does not have its own reliability controls on-die. Items such as wear-leveling, file management, and ECC mechanisms need to be handled somewhere. So the options are in software, which would then need to be validated and designed for each NAND manufacturer, die, and process; and would consume CPU and batter power from the tablet OS, or it can be done via a separate off-die controller.

And as to the choice of eMMC, it's a cost/performance/reliability trade-off. eMMC is relatively inexpensive (very small die), and includes all of the aforementioned reliability mechanisms at a low-power, and low-cost method, in an I/O language supported by most mobile architectures (SD/MMC). However, it severely lacks in relative performance to an SSD. The other option is an optimized SSD controller, which may cost many times more, but has much higher performance. The problem is how to include a $100 SSD in a $100-200 tablet BOM... impossible.