K
krw
I'd be perfectly happy to go back to Win2K. Unfortunately, thatXP goes for longish periods (ms) with the interrupts off too.
isn't a reasonable choice.
I'd be perfectly happy to go back to Win2K. Unfortunately, thatXP goes for longish periods (ms) with the interrupts off too.
On Sep 15, 11:09 am, John Larkin
[....]
architecture. In a few years we'll have, say, 1024 processors on a
chip, and something new will be required to manage them. It will be a
thousand times simpler and more reliable than Windows.I think that the number of virtual cores will grow faster than the
number fo real cores. With extra register banks and a bit of clever
design, a single ALU can look like two slightly slower ones.
Not register banks, just a couple of bits in the rename register
files.
I think you mistook my point. You would have as many set of registers
as there are virtual CPUs, perhaps plus some. When a task hits a
point where it needs to wait, its ALU section starts doing the work
for the lower priority task. This could be all hardware so no context
switching time other than perhaps a clock cycle would be needed.
I figure they would form some kind of repeating pattern along the
chip. This way the problems have to be solved only once. The amount
of hardware in a FPU is more than is in the integer ALU and floating
point operations are less common so I think it would work out.
On the later X86 machines there is a second ALU just for doing
addressing. We already have sort of more ALUs than FPUs in the current
machines.
On operations like 1/sqrt(X), doubling the number of transistors can
more than double the speed. You can make the initial guess very good
and loop much less.
krw said:^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
It? Which "it"?
I'd be perfectly happy to go back to Win2K. Unfortunately, that
isn't a reasonable choice.
Where I work, we just did another install of SUSE Linux. We have a
huge investment in DOS based code in the test department. Running
"dosemu" under SUSE they work just fine. Under XP there were lots of
problems. Under Vista there was no hope at all.
XP has a character dropping rate on the RS232 of about 1 in 10^5 to
10^7. This is much worse than the "its broken" limit on what is being
tested.
XP also doesn't let DOS talk to USB to RS-232 converters. Under SUSE,
it works just fine.
One of the machines is not on a network. XP seems to get unhappy if
it is not allowed to phone home every now and then.
Where I work, we just did another install of SUSE Linux. We have a
huge investment in DOS based code in the test department. Running
"dosemu" under SUSE they work just fine. Under XP there were lots of
problems. Under Vista there was no hope at all.
XP has a character dropping rate on the RS232 of about 1 in 10^5 to
10^7.
On Sep 15, 11:09 am, John Larkin
[....]
architecture. In a few years we'll have, say, 1024 processors on a
chip, and something new will be required to manage them. It will be a
thousand times simpler and more reliable than Windows.
I think that the number of virtual cores will grow faster than the
number fo real cores. With extra register banks and a bit of clever
design, a single ALU can look like two slightly slower ones.
Not register banks, just a couple of bits in the rename register
files.I think you mistook my point. You would have as many set of registers
as there are virtual CPUs, perhaps plus some. When a task hits a
point where it needs to wait, its ALU section starts doing the work
for the lower priority task. This could be all hardware so no context
switching time other than perhaps a clock cycle would be needed.
I don't think I did. My point is that you don't need banks of
registers, simply use the renaming that's already there and a couple
of bits to mark which registers are renamed to which virtual CPUs.
No context switch and no bank switching. All the hardware is already
there. More registers are needed in the register files but multiple
copies of the unused ones aren't.
Yes, I think I mistook your point.
The way I had imagined it was that the registers of the virtual CPUs
that are not currently running would be in a different place than the
ones that are actually being used. My concern was not increasing the
fan in and out of the busses on the ALU so that there would be no
increase in the loading and hence delay in those circuits.
I also imagined the register exchanging having its own set of busses.
Perhaps I was too worried about bus times and not worried enough about
ALU times.
FPUs are small. I dint remember exactly but the FPU I worked on
wasn't a lot bigger than the FXU. It certainly wasn't a large as the
VMX units and those weren't all that big compared to the instruction
decoder, sequencer, and arrays. AFAIC instruction units aren't the
major issue. In fact, they're often duplicated because they can be
cheaply.
You may have a point here. I've never actually measured the sizes of
such things. I was thinking back to the designs of bit slice
machines.
Doubling it again likely won't have the same results though.
Diminishing returns bite hard.
The throughput continues to grow fairly quickly but you end up with a
pipeline. When the circuit gets to a certain point, the stages become
equivelent to a multiplier circuit.
BTW:
There are four ways of getting to a sqrt() function. If you are doing
it on a micro controller or other machince where dividing is very
costly Newtons method is the slowest. If you have a fast multiply
finding 1/sqrt(X) is much quicker.
John said:You don't install OS patches? How do you manage that?
It's interesting that you didn't know about Patch Tuesday.
John said:Sounds sort of like Sun's Niagra chips, which have (IIRC) 8 cores, eachJohn said:On Sep 15, 11:09 am, John Larkin
[....]
architecture. In a few years we'll have, say, 1024 processors on a
chip, and something new will be required to manage them. It will be a
thousand times simpler and more reliable than Windows.
I think that the number of virtual cores will grow faster than the
number fo real cores. With extra register banks and a bit of clever
design, a single ALU can look like two slightly slower ones.
I expect to see multicore machines with less actual floating point
ALUs than actual integer ALUs.
with 4 threads, but only a few floating point units. For things like
web serving, it's ideal.
That's not going to work for Linux, anyway - there is a utility threadYup. Low-horsepower tasks can just be a thread on a multithread core,
and many little tasks don't need a dedicated floating-point unit.
My point/fantasy is that OS design should change radically if many,
many real or virtual CPUs are available. One CPU would be the manager,
and every task, process, or driver could have its own, totally
confined and protected, CPU, and there would be no context switching
ever, and few interrupts in fact.
spawned per cpu at the moment (work is underway to avoid this, because
it is a bit of a pain when you have thousands of cpus in one box).
However, there is no point in having a cpu (or even a virtual cpu)
dedicated to each task. Many sorts of tasks spend a lot of time
sleeping while waiting for other events - a cpu in this state is a waste
of resources.
Only if you think of a CPU as a valuable resource. As silicon shrinks,
a CPU becomes a minor bit of real estate. It makes sense to use it
when there's something to do, and put it to sleep when there's not.
Lots of power gets saved by not doing context switches.
My point is that large numbers of CPU cores *will* become common and
cheap, and we need a new type of OS to take advantage of this new
reality. Done right, it could be simple and astoundingly secure and
reliable.
I'd be happy to waste a little silicon if I could have an OS that
doesn't crash and that doesn't go to sleep for seconds at a time for
no obvious reason.
What is interesting is that you actually think that is how it is done.
Overkill. You likely won't manage those worth a shit... either.
John said:John Larkin wrote:
On Sep 15, 11:09 am, John Larkin
[....]
architecture. In a few years we'll have, say, 1024 processors on a
chip, and something new will be required to manage them. It will be a
thousand times simpler and more reliable than Windows.
I think that the number of virtual cores will grow faster than the
number fo real cores. With extra register banks and a bit of clever
design, a single ALU can look like two slightly slower ones.
I expect to see multicore machines with less actual floating point
ALUs than actual integer ALUs.
Sounds sort of like Sun's Niagra chips, which have (IIRC) 8 cores, each
with 4 threads, but only a few floating point units. For things like
web serving, it's ideal.
Yup. Low-horsepower tasks can just be a thread on a multithread core,
and many little tasks don't need a dedicated floating-point unit.
My point/fantasy is that OS design should change radically if many,
many real or virtual CPUs are available. One CPU would be the manager,
and every task, process, or driver could have its own, totally
confined and protected, CPU, and there would be no context switching
ever, and few interrupts in fact.
That's not going to work for Linux, anyway - there is a utility thread
spawned per cpu at the moment (work is underway to avoid this, because
it is a bit of a pain when you have thousands of cpus in one box).
However, there is no point in having a cpu (or even a virtual cpu)
dedicated to each task. Many sorts of tasks spend a lot of time
sleeping while waiting for other events - a cpu in this state is a waste
of resources.
Only if you think of a CPU as a valuable resource. As silicon shrinks,
a CPU becomes a minor bit of real estate. It makes sense to use it
when there's something to do, and put it to sleep when there's not.
Lots of power gets saved by not doing context switches.
CPUs *are* a valuable resource - modern cpu cores take up a lot of
space, even when you exclude things like the cache (which take more
space, but cost less per mm^2 since you can design in a bit of
redundancy and thus tolerate some faults).
The more CPUs you have, the more time and space it costs to keep caches
and memory accesses coherent. There are some sorts of architectures
which work well with multiple CPU cores, but these are not suitable for
general purpose computing.
My point is that large numbers of CPU cores *will* become common and
cheap, and we need a new type of OS to take advantage of this new
reality. Done right, it could be simple and astoundingly secure and
reliable.
I would be very surprised to see a system where the number of CPU cores
was greater than the number of processes. I expect to see the number of
cores increase, especially for server systems, but I don't expect to see
systems where it is planned and expected that most cores will sleep most
of the time.
Multiple cores gives absolutely no benefits in terms of reliability or
stability - indeed, it opens all sorts of possibilities for
hard-to-debug race conditions.
On Sep 15, 11:09 am, John Larkin
[....]
architecture. In a few years we'll have, say, 1024 processors on a
chip, and something new will be required to manage them. It will be a
thousand times simpler and more reliable than Windows.I think that the number of virtual cores will grow faster than the
number fo real cores. With extra register banks and a bit of clever
design, a single ALU can look like two slightly slower ones.
Not register banks, just a couple of bits in the rename register
files.
I think you mistook my point. You would have as many set of registers
as there are virtual CPUs, perhaps plus some. When a task hits a
point where it needs to wait, its ALU section starts doing the work
for the lower priority task. This could be all hardware so no context
switching time other than perhaps a clock cycle would be needed.
Well, I remember 64-bit static rams, and 256-bit DRAMS. I can't see
any reason we couldn't have 256 or 1024 cpu's on a chip, especially if
a lot of them are simple integer RISC machines.
They don't if you insist on running a copy of a bloated OS on each. A
system designed, from scratch, to run on a pool of cheap CPUs could be
incredibly reliable.
It's gonna happen.
Dear John,
Try developing a perfect OS of your own. I did. That was a very
enlightening experience of why certain things have to be done by the
certain ways. Particular questions welcome.
1024 CPUs = 1048576 software interfaces and a hell of the bus arbitration.
The weak link is a developer. It is obviously more difficult to
develop multicore stuff; hence it is a higher probability of flaws.
Especially if you remember about the 50-page silicon erratas for pretty
much any modern CPU.
What do you think in particular would be better for a typical desktop
applications?
You have to listen to the screams of the SEL software developers...
John Larkin said:But my PC doesn't
have hardware problems, it has software problems.
John said:CPUs *are* a valuable resource - modern cpu cores take up a lot ofJohn said:On Sun, 16 Sep 2007 22:07:42 +0200, David Brown
John Larkin wrote:
On Sep 15, 11:09 am, John Larkin
[....]
architecture. In a few years we'll have, say, 1024 processors on a
chip, and something new will be required to manage them. It will be a
thousand times simpler and more reliable than Windows.
I think that the number of virtual cores will grow faster than the
number fo real cores. With extra register banks and a bit of clever
design, a single ALU can look like two slightly slower ones.
I expect to see multicore machines with less actual floating point
ALUs than actual integer ALUs.
Sounds sort of like Sun's Niagra chips, which have (IIRC) 8 cores, each
with 4 threads, but only a few floating point units. For things like
web serving, it's ideal.
Yup. Low-horsepower tasks can just be a thread on a multithread core,
and many little tasks don't need a dedicated floating-point unit.
My point/fantasy is that OS design should change radically if many,
many real or virtual CPUs are available. One CPU would be the manager,
and every task, process, or driver could have its own, totally
confined and protected, CPU, and there would be no context switching
ever, and few interrupts in fact.
That's not going to work for Linux, anyway - there is a utility thread
spawned per cpu at the moment (work is underway to avoid this, because
it is a bit of a pain when you have thousands of cpus in one box).
However, there is no point in having a cpu (or even a virtual cpu)
dedicated to each task. Many sorts of tasks spend a lot of time
sleeping while waiting for other events - a cpu in this state is a waste
of resources.
Only if you think of a CPU as a valuable resource. As silicon shrinks,
a CPU becomes a minor bit of real estate. It makes sense to use it
when there's something to do, and put it to sleep when there's not.
Lots of power gets saved by not doing context switches.
space, even when you exclude things like the cache (which take more
space, but cost less per mm^2 since you can design in a bit of
redundancy and thus tolerate some faults).
The more CPUs you have, the more time and space it costs to keep caches
and memory accesses coherent. There are some sorts of architectures
which work well with multiple CPU cores, but these are not suitable for
general purpose computing.
I would be very surprised to see a system where the number of CPU coresMy point is that large numbers of CPU cores *will* become common and
cheap, and we need a new type of OS to take advantage of this new
reality. Done right, it could be simple and astoundingly secure and
reliable.
was greater than the number of processes. I expect to see the number of
cores increase, especially for server systems, but I don't expect to see
systems where it is planned and expected that most cores will sleep most
of the time.
Well, I remember 64-bit static rams, and 256-bit DRAMS. I can't see
any reason we couldn't have 256 or 1024 cpu's on a chip, especially if
a lot of them are simple integer RISC machines.
They don't if you insist on running a copy of a bloated OS on each. A
system designed, from scratch, to run on a pool of cheap CPUs could be
incredibly reliable.
John said:I did write three RTOS's, one for the 6800, one for the PDP-11, one
for the LSI-11. As far as I know, they were perfect, in that they ran
damned fast and had no bugs. The 6800 version included a token ring
LAN thing, which I invented independently in about 1974.
No worse a software interface than if each process was running on a
single shared CPU; much less, in fact, since irrevelant interrupts,
swapping, and context switches aren't going on. Each process
absolutely owns a CPU and only interacts with other processes when
*it* needs to, probably through shared memory and semaphores.
As far as bus arbitration goes, they all just share a central cache on
the chip, with a single bus going out to dram. Cache coherence becomes
trivial.
Putting a few hundred RISC cores on a chip, connecting to a central
cache, is easy. You only have to get it right once. In our world,
incredibly complex hardware just works, and modestly complex software
is usually a bag of worms. Clearly we need the hardware to help the
software.
Intel, maybe. Are any of the RISC machines that bad? But my PC doesn't
have hardware problems, it has software problems.
Oh, 256 CPUs and, say, 32 FPUs should be plenty.
Sure it does (have hardware problems), Intel was just smart enough to allow
patching of the microcode so that buggy features are worked around or simply
not used. When the buggy simply can't be fixed, it's the compiler writers who
get burdened with having to keep up which bugs are still present and insuring
that code isn't generated that would expose them (very few people program x86
CPUs in assembly anymore!). Intel is also smart enough to do a lot of testing
any time a new CPU comes out -- I'm sure there are still plenty of people
there who remember the nasty FDIV bug, as well as the lesser-known problem
with the first 1GHz CPUs that would randomly fail to compile the Linux kernel
I've been surprised at just how buggy a lot of OC software is if you actually
start pushing it to its limits -- it's clear that much software today only
gets very rudimentary testing. (And as I've stated before, I personally know
"programmers" who believe they can claim on a progress report that they
"finished such and such software" as soon as it *compiles*. :-( )
But it knows what chunks of memory it has allocated to a particular
process. As long as it's in your own memory space, who cares if you
overwrite/overrun your own buffers?
Nobody said:With modern hardware (e.g. 80286 and later running in protected
mode), the address space of one process (or the OS kernel) simply isn't
"visible" to another process.
So you agree at this point.
Yes go back a re-read it carefully.
You seem to be confused about what we are talking about.
We are
talking about making an OS safe. If an application task commits an
overrun that causes that task to fail, it is quite a different matter
than talking about a buffer over run based exploit.
He is talking about process isolation and it not being violated by a
buffer overrun if the OS is well written. He is correct in what he
said.
You have assumed that by causing the over run the attacker has gained
control. As I explained earlier this need not be the case.