View Full Version : FreeBSD on AMD64
shupienis
03-01-04, 01:21 PM
First, a word of encouragement for the coders... THANKS for even being aware of FreeBSD! I appreciate the efforts you all have put forth to make my favorite OS work with my favorite video cards!
My question is, are you working on a 64-bit clean version for AMD64 on FreeBSD? I know that there are huge problems since the AMD64 kernel does not support loadable modules (at least "NOT_YET"). This starts a chain of events which includes no Linux (32-bit OR 64-bit) binary compatibility, which I imagine has put a halt to further development.
Might I suggest (as a long-time nVidia buyer -- I recommend your products in all the bid specs I write for my school) taking advantage of the unique opportunity you have to be the first kid on the block with BSD 64-bit clean code for video cards?
It is my considered opinion that AMD64 systems will take off like wildfire, and what with SCO's frivolous lawsuit interest in *BSD will continue to grow.
You might sell a lot of video cards -- certainly enough to justify paying your programmers a few hours' overtime! And who can count the intangible value of all the goodwill you would generate in the BSD/AMD64 community?!
Regards!
// Joe
Is there a document describing the overall status of FreeBSD/x86-64? You say that the kernel doesn't currently support loadable modules, do you have (or can point us (as in the forum members) to) more information on this?
shupienis
03-01-04, 03:15 PM
Originally posted by zander
Is there a document describing the overall status of FreeBSD/x86-64? You say that the kernel doesn't currently support loadable modules, do you have (or can point us (as in the forum members) to) more information on this?
AMD64 on FreeBSD is currently "Tier 1" which means "fully supported". With apologies to Bill Clinton, however, that depends on what the meaning of the word "fully" is...
The "official" homepage of the FreeBSD/AMD64 Project can be found at:
http://www.freebsd.org/platforms/amd64.html
(which doesn't really say much about the status, except to give the impression that AMD64 is "Fully Supported").
From My Own Experience dep't
I built a dual-Opteron on an MSI KT8 motherboard, with the intention of using it as a mail server, web server and internet gateway for my school. About 1 month later, here I sit, using it at this very moment.
FreeBSD-amd64-5.2-RELEASE
2x Opteron 2400 mp
1GB DDR memory
600 GB software RAID (using vinum, which I managed to compile!)
I've been testing it under load, really beating the crap out of it. It laughs at my feeble attempts to load it. This thing is REALLY fast. Almost fast enough to render Open-GL screensavers in realtime with the default nv driver (Non-GL). But not quite.
The only things that I found missing (other people will find many more) is GL driver support for the nVidia card (5900) and I can't get Sun's JDK to compile. Once I do that, I can compile OpenOfficeOrg 1.1 and have a full workstation for office uses, Graphic uses and audio. All 64-bit and insanely fast.
If a 50-yo old fart like myself can get this far with AMD64, think what the rest of the world can do. I've always been a year or two ahead of the curve. I don't think my acceptance of AMD64 is any different. While Intel plays catch-up, AMD will be pumping out LOTS of systems, and the MoBos will only get better.
Regards
// Joe
Tier 1 without support for loadable modules wouldn't help third-party driver development; where could one read up on the technical details behind this limitation?
shupienis
03-01-04, 04:15 PM
Originally posted by zander
Tier 1 without support for loadable modules wouldn't help third-party driver development; where could one read up on the technical details behind this limitation?
I agree. I think they are rushing things to call it "Tier 1".
You can google for it but won't find much, even in groups. I think the general problem is that FreeBSD/AMD64 is Very New. It works -- all the big bugs are ironed out. I think the committers decided it was in the best interests of everyone involved to do a MS-style release: As soon as it boots without a blue screen, put it on the store shelves!
I don't disagree totally with this philosopy for bleeding-edge technology -- it allows the curious (like myself) to play with an almost-ready-for-prime-time state-of-the-art set of CPUs to see what the future holds.
The nice thing about AMD64 is it covers my butt: I could always revert to FreeBSD i386 with the same machine and still have a noticeable improvement over the single-cpu P-III /1ghz machine it's replacing. Fortunately, it seems I won't have to. The missing pieces are not show stoppers (vinum would have been, but my persistence paid off) -- they're just "Nice To Have".
There is a broad hint in line 29 of the kernel config (/usr/src/sys/amd64/conf/GENERIC) which says "makeoptions NO_MODULES=not_yet", which leads me to believe that kld modules are planned for the future. But I'm not holding my breath.
I will say this... I "Needed" to use Vinum. It's usually a module. It only took me 3 days to fool around and succeed in compiling it into the kernel as an included, static part of the kernel. An I know NOTHING about C programming.
From what I can gather, if something can be loaded as a module, it can be also be compiled into the kernel. I'll also add that I could NEVER successfully compile a Linux kernel, but my experience with BSD has been quite positive (for a USER-NOT-A-DEVELOPER). The word I've heard from Developers (people other than me who can look at C source code and not get a migraine) is that BSD is easy to write for -- everything is in a standard location, and the existing codebase is Very Well Documented.
Nice chatting!
// Joe
Assuming that it is technically possible to link the NVIDIA driver code into the core kernel (it may not be), the solution really wouldn't be realistic from a licensing and/or maintenance point of view. I seriously doubt an effort will be made to support FreeBSD/x86-64 without support for loadable modules (there may be other technical obstacles as well).
shupienis
03-01-04, 04:59 PM
Originally posted by zander
Assuming that it is technically possible to link the NVIDIA driver code into the core kernel (it may not be), the solution really wouldn't be realistic from a licensing and/or maintenance point of view. I seriously doubt an effort will be made to support FreeBSD/x86-64 without support for loadable modules (there may be other technical obstacles as well).
I don't see how licensing becomes an issue. Granted I am completely ignorant of C programming, but it seems to me that if (and that's a big IF) the same code can be EITHER a module OR linked into the kernel, then it wouldn't be fundamentally different from being ONLY a module, as far as licensing goes. I haven't tried it but I wonder if I could include the 32-bit driver into my next 32-bit kernel build. I guess it would take me 5 minutes to find out!
It doesn't appear to me to be necessary to make the driver a part of the core kernel to be distributed with the release. In fact it is my understanding that there are one or two kernel modules that require downloading from a commercial site after validating and jumping through whatever flaming hoops the IP owner insists upon, whether the code is to be used as a module or as part of a monolithic kernel.
Oh! I just noticed something... are we talking about the same CPU? I'm using AMD Opterons, not Intel anything... I'm saying AMD64 and you're saying x86-64. Are they two different things, or are they different names for the same thing? Please forgive my ignorance, I'm new to this whole 64-bit thing.
Of course if I boot with the 32-bit OS, everything is perfect. But I'd rather not have to dual boot to run a screensaver. Or a video editing program. But, try as I might, I can't make any 32-bit code execute with the 64-bit kernel -- if I could, then the problem would be moot!
Thanks for your patience and civility with me!
// Joe
We're talking about the same platform, I just prefer x86-64 over amd64 since it describes the architecture better and seems more reasonable considering Intels latest offerings. I'm not sure if the kernel component of the NVIDIA driver could be linked into the kernel proper (it's rather large), but even if it was possible from a technical and legal point of view, I wouldn't consider it a viable solution.
shupienis
03-01-04, 08:58 PM
Originally posted by zander
We're talking about the same platform, I just prefer x86-64 over amd64 since it describes the architecture better and seems more reasonable considering Intels latest offerings. I'm not sure if the kernel component of the NVIDIA driver could be linked into the kernel proper (it's rather large), but even if it was possible from a technical and legal point of view, I wouldn't consider it a viable solution.
But isn't the upcoming Intel XEON-64 supposed to use a completely different instruction code from the AMD46? I would suspect that they would also have incompatible pinouts, requiring different sockets and support chipsets, as well.
Back to the kernel, you raise a key issue. Developers vs. Users.
The good developer wants to make clean, compact code, no matter how long it takes -- even if it means "never".
The user wants it NOW, regardless of how big, ugly and kludgy it is. Mr Gates owes his billions to realizing that, and acting appropriately on it.
I would presume that best practice lies somewhere in between the two conflicting mindsets.
For my part, I'd be perfectly fat, dumb and happy compiling some huge blob of code into my kernel. It's already 6+ meg -- what's a few more meg going to hurt? You see, for ME (I don't speak for anyone else), for ME, compiling a large piece of code into MY kernel IS viable. For me. Not necessarily for anyone else. Even if it makes my dog go bald and the neighbor's cat start singing opera.:D
As I recall from a few years ago, space in the Linux Kernel is precious because it has to fit on a floppy (or was that overcome several versions ago?), but BSD has no such limitation that I am aware of.
Here's an interesting thought/question... OS-X for the Mac G5. The G5 is a 64-bit extension to a 32-bit architecture, just like the current AMD64 and the proposed future Intel Xeon-64. OS-X is a BSD kernel. What's the 64-bit driver status there?
Warmest regards!
// Joe
Originally posted by shupienis
But isn't the upcoming Intel XEON-64 supposed to use a completely different instruction code from the AMD46? I would suspect that they would also have incompatible pinouts, requiring different sockets and support chipsets, as well.
Back to the kernel, you raise a key issue. Developers vs. Users.
The good developer wants to make clean, compact code, no matter how long it takes -- even if it means "never".
The user wants it NOW, regardless of how big, ugly and kludgy it is. Mr Gates owes his billions to realizing that, and acting appropriately on it.
I would presume that best practice lies somewhere in between the two conflicting mindsets.
For my part, I'd be perfectly fat, dumb and happy compiling some huge blob of code into my kernel. It's already 6+ meg -- what's a few more meg going to hurt? You see, for ME (I don't speak for anyone else), for ME, compiling a large piece of code into MY kernel IS viable. For me. Not necessarily for anyone else. Even if it makes my dog go bald and the neighbor's cat start singing opera.:D
As I recall from a few years ago, space in the Linux Kernel is precious because it has to fit on a floppy (or was that overcome several versions ago?), but BSD has no such limitation that I am aware of.
Here's an interesting thought/question... OS-X for the Mac G5. The G5 is a 64-bit extension to a 32-bit architecture, just like the current AMD64 and the proposed future Intel Xeon-64. OS-X is a BSD kernel. What's the 64-bit driver status there?
Warmest regards!
// Joe
There is no Xeon 64 so i have no clue what you are talking about...
Perhaps you mean the Itanium? it has been out for five years, the IA64-II is probably what you mean, this is not a processor for even the mainstream generation of servers, it is EXPENSIVE and from what i have seen performs pretty badly unless you restructure every single line of code, Intel does not have the authority to make companies do that anymore...
Or perhaps you mean the Ia32-e? The cpu that implemented some of the parts of the AM-64 arch but forgot the most important part?
There are kernels for AM-64 for all versions of linux and BSD that are stable...
It would be an interesting question if it wasn't for the fact that the G5 uses a 32bit interpreter to execute the code, the Intel Xeon-64 will never exist and the AMD64 have had it's own kernel for BSD for months...
Regarding the linux kernel, that is a warning you get if your kernel exceeds 1.44 mb (in 2.4 kernels, in 2.5 and later you will not even get the warning) that was it... so, wrong on that too...
So you have absolutely no clue about any of this, i suggest you read before you write...
shupienis
03-01-04, 10:10 PM
Originally posted by SnapIT
There is no Xeon 64 so i have no clue what you are talking about...
Perhaps you mean the Itanium? it has been out for five years, the IA64-II is probably what you mean, this is not a processor for even the mainstream generation of servers, it is EXPENSIVE and from what i have seen performs pretty badly unless you restructure every single line of code, Intel does not have the authority to make companies do that anymore...
Or perhaps you mean the Ia32-e? The cpu that implemented some of the parts of the AM-64 arch but forgot the most important part?
There are kernels for AM-64 for all versions of linux and BSD that are stable...
It would be an interesting question if it wasn't for the fact that the G5 uses a 32bit interpreter to execute the code, the Intel Xeon-64 will never exist and the AMD64 have had it's own kernel for BSD for months...
Regarding the linux kernel, that is a warning you get if your kernel exceeds 1.44 mb (in 2.4 kernels, in 2.5 and later you will not even get the warning) that was it... so, wrong on that too...
So you have absolutely no clue about any of this, i suggest you read before you write...
Thank you for your informative reply. I'm a proud owner of a dual-opteron BSD box, which is in sad need of a working 64-bit nVidia driver.
As to Intel, perhaps I was misled by the news items I read last week about Intel announcing a future Xeon-based CPU with 64-bit extensions.
Perhaps when you read my initial question, you missed what I asked, so here it is again, in a nutshell:
Is there any work going on at nVidia to provide an AMD64 64-bit video driver which could be compiled into the 5.2 or -CURRENT 64-bit FreeBSD kernel? (That kernel does not support modules, so Linux-compatibility mode and kld modules are out of the question.)
Thanks again for your information. You helped me see more clearly.
Regards!
// Joe
Originally posted by shupienis
Thank you for your informative reply. I'm a proud owner of a dual-opteron BSD box, which is in sad need of a working 64-bit nVidia driver.
As to Intel, perhaps I was misled by the news items I read last week about Intel announcing a future Xeon-based CPU with 64-bit extensions.
Perhaps when you read my initial question, you missed what I asked, so here it is again, in a nutshell:
Is there any work going on at nVidia to provide an AMD64 64-bit video driver which could be compiled into the 5.2 or -CURRENT 64-bit FreeBSD kernel? (That kernel does not support modules, so Linux-compatibility mode and kld modules are out of the question.)
Thanks again for your information. You helped me see more clearly.
Regards!
// Joe
Actually, i have to admit that i have not gone into any great depths with the AM-64 Current kernel because of lack of time, but i have a system that i intend to use it on, but the non support of modules sounds horrible, that means that only an integral part of the kernel can be used for drivers...
IE that means that every driver has to fit inside EBDA too, which would suck for servers with RAID, LVM, and several GB E drivers along with standard drivers and filesystems... it would be impossible to implement...
I have to look into this a bit more, but it has to be a temp solution...
The CPU you are thinking of is probably the ia32-e, it does not implement any of the per page permissions, so i consider the ia32-e a second rate CPU...
Actually rereading Theos mail makes me realize that it will not only not implement any 64-bit permissions, it will not implement any 32bit permissions either... WIDE OPEN...
Hopefully they are working on that though... Theos cpu was pre-production so maybe some of it will be implemented in the finished work, time will tell...
To clarify my earlier post, explaining the importance of per page permissions in the AM-64 implementation...
On IA32 if a page is writable it's also executable, meaning once the overflow happens you just have to find a way to make EIP point to the overflow area to execute your code. What AMD64 (and everyone else that's not IA32 compatible) does is include an extra security bit that allows you to set pages writable but not executable, so even though the overflow still happens and the app crashes there's no chance to execute code from the overflow. Userland programmers don't see any difference, the kernel is what manages the page permissions.
Intel is planning to eventually release an AMD64 compatible chip based on both Xeon and Prescott cores later this year. You can get the manuals now off Intel's site. Intel calls it ia-32e and it implements all the AMD64 instruction and architecture changes other than the No-Execute bit (which they mark as reserved, so maybe it'll still make it into the final release).
Reading through the Intel docs is rather funny. First, they make it seem like this was all their idea and that it's just a coincidence that it happens to be compatible with AMD64. You won't find an acknowledgement of AMD anywhere in the manual. Second, they try very hard not to scare away their Itanium customers. ia-32e (AMD64) is NOT a 64 bit processor, rather, it's just an extension to 64 bit addresses. However, since the addresses are 64 bits long, the registers need to be 64 bits long too. And since the addresses are 64 bits long, you need 64 bit operations to do 64 bit pointer operations. In no way are you to believe that makes it a 64 bit processor competing with Itanium. ;) :D
Linux went with the symbol x86-64 because Linus preferred that to AMD64. BSD went with AMD and used AMD64. Microsoft also went with AMD64 after Intel swore they'd NEVER make an AMD64 compatible chip. So MS is in the peculiar position of having 64 bit Windows software compiling with the AMD64 symbol which will run on Intel chips. :rolleyes:
As far as load modules go, this is the closest I could find on the FreeBSD AMD64 mailing list -
Date: Wed, 11 Feb 2004 12:39:50 -0800
From: Peter Wemm <peter@wemm.org>
Subject: Re: kld support
To: Petri Helenius <pete@he.iki.fi>, obrien@freebsd.org
Cc: freebsd-amd64@freebsd.org
Message-ID: <200402111239.50639.peter@wemm.org>
Content-Type: text/plain; charset="iso-8859-1"
On Wednesday 11 February 2004 01:01 am, Petri Helenius wrote:
>> Since the kld support for amd64 is pending, is there a way to compile
>> netgraph modules statically into the kernel to get for example
>> ng_ether support?
>>
>> I would also be happy to try out early code if such thing exists. (to
>> enable KLD) For the time being, I have a spare opteron box.
I have bad news and some good news on this front. I thought we might be
able to get away with a quick hack to binutils to get it to work.
Indeed, I've been able to produce .ko files that can be loaded and
almost even work. But thats the problem... almost.
Check out these lines in sys/conf/NOTES:
options NETGRAPH #netgraph(4) system
options NETGRAPH_ASYNC
options NETGRAPH_BPF
options NETGRAPH_BRIDGE
options NETGRAPH_CISCO
options NETGRAPH_ECHO
options NETGRAPH_ETHER
options NETGRAPH_FRAME_RELAY
options NETGRAPH_GIF
......[lots more]....
Thats how you chose what you want to compile in.
Anyway, the problem with binutils is subtle but massive. There is a
sanity check that prevents you producing shared libs without -fpic
mode. Because *everybody* knows that ld.so cannot guarantee that it
can load the library within the first 2GB of address space on linux, so
binutils enforces this policy. The problem though is that all the wold
is not linux. And there are legitimate reasons for doing this. One of
which is our kernel modules where we can provide those guarantees.
Anyway, removing the sanity check lets you produce them. BUT... because
those code paths have never been tested on linux, binutils neglects to
support the rest of the relocation types that would be needed, and none
of the linux folks have noticed. Binutils is a freaking nightmare to
try and work in, and it has me totally beaten on this one.
So, I thought.. since I can do something about the in-kernel linker,
perhaps I can add PIC mode support? The problem with that though is
that gcc says "-fPIC mode not implemented in kernel mode" and errors
out. There's no way in hell that I'm going to try and implement that
in gcc either, so plan B is a bust.
The good news though is that Plan C is possible. Plan C is to stop
using -shared for kernel modules and use a simple .o file, like linux
does. I think I can write code for the kld subsystem without too much
pain. And because linux does the same thing already, we dont have to
worry about treading on landmines in binutils/gcc, because that path
should be well trodden already.
We already produce these files in kmod.mk. If you have a look at the
obj dirs, we have:
ld -d -warn-common -r -d -o if_sl.kld if_sl.o slcompress.o
touch /home/src/sys/modules/if_sl/obj/export_syms
awk -f /home/src/sys/modules/if_sl/../../conf/kmod_syms.awk
if_sl.kld /home/src/sys/modules/if_sl/obj/export_syms | xargs -J%
objcopy % if_sl.kld
ld -Bshareable -d -warn-common -o if_sl.ko if_sl.kld
ld: if_sl.kld: relocation R_X86_64_32S can not be used when making a
shared object; recompile with -fPIC
..... ls obj/
-rw-r--r-- 1 root src 19608 Feb 11 12:32 if_sl.kld
That file was the immediate step prior to conversion to a .ko file, and
thats what we can load.
On another machine with the hacks to produce a .ko anyway, we have:
peter@hammer[12:37pm]/home/obj/home/src/sys/modules/if_sl-105> ls -l
if_sl.*
-rw-r--r-- 1 root wheel 19608 Feb 6 14:46 if_sl.kld
-rwxr-xr-x 1 root wheel 23179 Feb 6 14:46 if_sl.ko*
-rw-r--r-- 1 root wheel 15760 Feb 6 14:46 if_sl.o
-rw-r--r-- 1 root wheel 24668 Feb 6 14:46 if_sl.s
Also of note is that the .kld file is smaller than the .ko file.
So yes, there is light at the end of the tunnel. I think its time to
give up on binutils/gcc hacking and take the path of least resistence
and write some code that we control. The original reasons for having
-shared kernel object files are mostly obsolete these days. We dont
use the DT_NEEDED tags for dependency tracking anymore, for example.
I think we can actually get a superior system as a result.
-- Peter Wemm - peter@wemm.org; peter@FreeBSD.org; peter@yahoo-inc.com "All of this is for nothing if we don't go to the stars" - JMS/B5
Hope it helps answer your question. If you need more info, I suggest emailing Peter.
shupienis
03-01-04, 11:16 PM
Originally posted by SnapIT
IE that means that every driver has to fit inside EBDA too, which would suck for servers with RAID, LVM, and several GB E drivers along with standard drivers and filesystems... it would be impossible to implement...
You betcha! I fought for the better part of a week to get vinum compiled in. Succeeded. 600G Raid now read/write at 60Meg/second sustained, with 100% redundancy! Then I needed netgraph. Then after doing netgraph, I found out I DIDN'T need it. :(
Modules woulda made it a lot easier! But the line in the kernel config that says "no_modules=not_yet" or somesuch give me hope that modules will appear soon. Meanwhile, I'm happy to live with lumpy software. Since the machine will live on the Net, I take a short solace in the fact that no 64-bit rootkits are floating around yet...
Kind of like the promised Xeon-64. Have a read...
(from slashdot...)
Now comes the shocker: Intel boss Craig Barrett today anounced that Xeon-class 64-bit server CPUs codenamed Nocona will be coming out the second half of 2004. (http://zdnet.com.com/2100-1103_2-5160169.html) It isn't clear whether they will support AMD's Opteron AMD64 extensions. Barrett is quoted saying, 'There will be one operating system that will support all (64-bit) extended systems.' Maybe 64-bit computing is right around the corner after all, and we may even see compatible instruction sets from Intel and AMD! And does this mean that Intel will be dumping Itanium, which never caught on as expected in the server market, and forget the billions spent on developing it?"
I have to look into this a bit more, but it has to be a temp solution...
The CPU you are thinking of is probably the ia32-e, it does not implement any of the per page permissions, so i consider the ia32-e a second rate CPU...
Actually rereading Theos mail makes me realize that it will not only not implement any 64-bit permissions, it will not implement any 32bit permissions either... WIDE OPEN...
Hopefully they are working on that though... Theos cpu was pre-production so maybe some of it will be implemented in the finished work, time will tell... [/B]
Sir William of Bluescreen would like that chip! At any rate, Itanium is dead, total sales of 400k units overall. Not good. Xeon is dying of old age. The "pentium-4/64" or ia32-e is dead meat, too. Nobody wants a chip with no software!
Originally posted by J.F.
Intel is planning to eventually release an AMD64 compatible chip based on both Xeon and Prescott cores later this year. You can get the manuals now off Intel's site. Intel calls it ia-32e and it implements all the AMD64 instruction and architecture changes other than the No-Execute bit (which they mark as reserved, so maybe it'll still make it into the final release).
Reading through the Intel docs is rather funny. First, they make it seem like this was all their idea and that it's just a coincidence that it happens to be compatible with AMD64. You won't find an acknowledgement of AMD anywhere in the manual. Second, they try very hard not to scare away their Itanium customers. ia-32e (AMD64) is NOT a 64 bit processor, rather, it's just an extension to 64 bit addresses. However, since the addresses are 64 bits long, the registers need to be 64 bits long too. And since the addresses are 64 bits long, you need 64 bit operations to do 64 bit pointer operations. In no way are you to believe that makes it a 64 bit processor competing with Itanium. ;) :D
Linux went with the symbol x86-64 because Linus preferred that to AMD64. BSD went with AMD and used AMD64. Microsoft also went with AMD64 after Intel swore they'd NEVER make an AMD64 compatible chip. So MS is in the peculiar position of having 64 bit Windows software compiling with the AMD64 symbol which will run on Intel chips. :rolleyes:
As far as load modules go, this is the closest I could find on the FreeBSD AMD64 mailing list -
Hope it helps answer your question. If you need more info, I suggest emailing Peter.
Well, hopefully intel will realize their mistake and implement it, without it, the cpu in itself needs a bugfix, can you imagine the overhead for such a bugfix in sw in a separately loaded part of nvram? every single instruction would have to pass through... or just give it up and realize that you have a wide open system no matter what you do...
Regarding the post from Peter, i find it rather strange to change the path so soon after a closer integration goal on the other branches, it makes no sense to me, but i will look into it closer and repost what i find...
Thanx for the info....
//Patrick
Originally posted by shupienis
You betcha! I fought for the better part of a week to get vinum compiled in. Succeeded. 600G Raid now read/write at 60Meg/second sustained, with 100% redundancy! Then I needed netgraph. Then after doing netgraph, I found out I DIDN'T need it. :(
Modules woulda made it a lot easier! But the line in the kernel config that says "no_modules=not_yet" or somesuch give me hope that modules will appear soon. Meanwhile, I'm happy to live with lumpy software. Since the machine will live on the Net, I take a short solace in the fact that no 64-bit rootkits are floating around yet...
Kind of like the promised Xeon-64. Have a read...
(from slashdot...)
Now comes the shocker: Intel boss Craig Barrett today anounced that Xeon-class 64-bit server CPUs codenamed Nocona will be coming out the second half of 2004. (http://zdnet.com.com/2100-1103_2-5160169.html) It isn't clear whether they will support AMD's Opteron AMD64 extensions. Barrett is quoted saying, 'There will be one operating system that will support all (64-bit) extended systems.' Maybe 64-bit computing is right around the corner after all, and we may even see compatible instruction sets from Intel and AMD! And does this mean that Intel will be dumping Itanium, which never caught on as expected in the server market, and forget the billions spent on developing it?"
Sir William of Bluescreen would like that chip! At any rate, Itanium is dead, total sales of 400k units overall. Not good. Xeon is dying of old age. The "pentium-4/64" or ia32-e is dead meat, too. Nobody wants a chip with no software!
The new xeon is basically ia32-e with a larger cache as i see it, i have faith in itanium II for larger systems, like SGI CC-NUMA systems, but for smaller servers i do not see the IA-64 as an alternative to AM-64 the ia32-e is somewhat a bastard child of intels where they are trying to emulate AMD (sucks to be intel these days) without implementing the extra bit for security...
The new XEON will be per byte compatible with AM-64 and so will the rest of the ia32-e cpu's, but if they do not include per page permissions, it won't last a week on the pro market...
Itanium was more of a pre production chip to set a standard to build on...
Originally posted by shupienis
Here's an interesting thought/question... OS-X for the Mac G5. The G5 is a 64-bit extension to a 32-bit architecture, just like the current AMD64 and the proposed future Intel Xeon-64. OS-X is a BSD kernel. What's the 64-bit driver status there?
Warmest regards!
// Joe
G5 is not an extension to the 32 bit architecture. You forgot that the PowerPC architecture was just a stripped down version of the POWER architecture, which was 64 bit originally. The PowerPC has ALWAYS had 64 bit instructions and architecture, but in the 32 bit processors, the 64 bit opcodes generate an exception to allow them to be emulated. Motorola's first CPUs were the 601, 603, 604, and 620. The 620 was a 64 bit PPC, while the others were 32 bit. Motorola never bothered to improve the 620, so IBM went back to the latest POWER CPU to make the G5.
Mac OSX 10.3 allows you to freely use 32 or 64 bit operations however you like. However, it restricts you to 32 bit addresses by setting a bit that makes the CPU truncate all pointers to 32 bits. The kernel then converts the 32 bit address into an address in the the 8GB they currently support. All that is immaterial though. Although Apple's drivers support at least 8 GBytes, they are NOT BSD drivers! Apple didn't care for the BSD driver model and tossed it out. They used a model based on the Next Mach-O kernel drivers. So OSX drivers cannot be used with other BSDs, even though OSX is mostly BSD.
shupienis
03-02-04, 12:01 AM
Originally posted by J.F.
G5 is not an extension to the 32 bit architecture. You forgot that the PowerPC architecture was just a stripped down version of the POWER architecture, which was 64 bit originally. The PowerPC has ALWAYS had 64 bit instructions and architecture, but in the 32 bit processors, the 64 bit opcodes generate an exception to allow them to be emulated.
Thank you. I stand corrected.
Apple didn't care for the BSD driver model and tossed it out. They used a model based on the Next Mach-O kernel drivers. So OSX drivers cannot be used with other BSDs, even though OSX is mostly BSD.
Now that is really interesting, and pertinent to my own selfish little corner of the universe, because -- as I understand it -- the FreeBSD AMD64 kernel is also a Mach-based kernel. (How fitting that I sing weekly (weakly?) across the street from the CMU Software Engineering Institute here in Pittsburgh!)
This discussion is getting interesting, now!
... // Joe
Originally posted by J.F.
G5 is not an extension to the 32 bit architecture. You forgot that the PowerPC architecture was just a stripped down version of the POWER architecture, which was 64 bit originally. The PowerPC has ALWAYS had 64 bit instructions and architecture, but in the 32 bit processors, the 64 bit opcodes generate an exception to allow them to be emulated. Motorola's first CPUs were the 601, 603, 604, and 620. The 620 was a 64 bit PPC, while the others were 32 bit. Motorola never bothered to improve the 620, so IBM went back to the latest POWER CPU to make the G5.
Mac OSX 10.3 allows you to freely use 32 or 64 bit operations however you like. However, it restricts you to 32 bit addresses by setting a bit that makes the CPU truncate all pointers to 32 bits. The kernel then converts the 32 bit address into an address in the the 8GB they currently support. All that is immaterial though. Although Apple's drivers support at least 8 GBytes, they are NOT BSD drivers! Apple didn't care for the BSD driver model and tossed it out. They used a model based on the Next Mach-O kernel drivers. So OSX drivers cannot be used with other BSDs, even though OSX is mostly BSD.
Yup, the cpu in itself is 64, so was G4 in essence but the programmers are still stuck on old code and implements, so interpreted code is what it runs today...
I just realized that the prescott does not support the NX bit at all, not in any implementation, i cannot figure out why, it could just be available, all code that i know of would run fine... If not, AMD are true wizards...
I assume JAVA could write write to a processes stack space, but other than that... well... and it would be simpler to do the workaround...
Can anyone explain how NX would present a compatibility issue?
Originally posted by SnapIT
Well, hopefully intel will realize their mistake and implement it, without it, the cpu in itself needs a bugfix, can you imagine the overhead for such a bugfix in sw in a separately loaded part of nvram? every single instruction would have to pass through... or just give it up and realize that you have a wide open system no matter what you do...
Actually, a sw fix is pretty easy with only a small performance hit. When a page fault occurs, set the MMU tables and do an access to force the TLBs to load the entry, then go back and use the test registers to invalidate the instruction TLB for that page. This leaves the data TLB with a valid translation, but any instruction accesses will cause another page fault. In the second page fault, simulate the no-execute. This works on x86 CPUs allowing access to the TLB through the test registers AND uses separate TLBs for data and code access. This means you can simulate NX with a little extra code in the page fault handler of Pentium and newer chips, but not on the 486 or older. The 486 allows the access of the TLB via the test registers, but only had one TLB to handle both data and code.
Originally posted by shupienis
Now that is really interesting, and pertinent to my own selfish little corner of the universe, because -- as I understand it -- the FreeBSD AMD64 kernel is also a Mach-based kernel. (How fitting that I sing weekly (weakly?) across the street from the CMU Software Engineering Institute here in Pittsburgh!)
This discussion is getting interesting, now!
... // Joe
Well, you could always check out the Darwin page.
http://developer.apple.com/darwin/
That is the kernel and drivers for OSX. The latest code equivalent to 10.3 is freely available. What is interesting is that Apple supports Darwin on x86 machines. It's not got as many drivers as the PowerPC version, but there are folks running Darwin and X11 on their PCs. I don't think they've modified the x86 version to handle AMD64 though.
Originally posted by J.F.
Actually, a sw fix is pretty easy with only a small performance hit. When a page fault occurs, set the MMU tables and do an access to force the TLBs to load the entry, then go back and use the test registers to invalidate the instruction TLB for that page. This leaves the data TLB with a valid translation, but any instruction accesses will cause another page fault. In the second page fault, simulate the no-execute. This works on x86 CPUs allowing access to the TLB through the test registers AND uses separate TLBs for data and code access. This means you can simulate NX with a little extra code in the page fault handler of Pentium and newer chips, but not on the 486 or older. The 486 allows the access of the TLB via the test registers, but only had one TLB to handle both data and code.
Actually, no, it does not work like that as the software can only control its own instructions if NX is only in software, malicious code can be run at any overload, your program will crash and the code can run, i can see some heavy problems coming with that...
There is no bit to set NX if it is not implemented so...
Now, for the ia32 implementation this is no biggie as you can easily simulate NX, but that will not work on AM-64, so there IS a very real problem with this...
Originally posted by shupienis
Thank you. I stand corrected.
Now that is really interesting, and pertinent to my own selfish little corner of the universe, because -- as I understand it -- the FreeBSD AMD64 kernel is also a Mach-based kernel. (How fitting that I sing weekly (weakly?) across the street from the CMU Software Engineering Institute here in Pittsburgh!)
This discussion is getting interesting, now!
... // Joe
Apple took the Mach arch and created something that is basically a 64 bit kernel with 32 bit drivers and a layer to interpret external syscalls from 32-64...
A PPC native 64 kernel COULD be extremely fast on a G5, in time we will see that happen though, Apple are doing what MS did with win95 16-32...
shupienis
03-02-04, 01:03 AM
Originally posted by SnapIT
A PPC native 64 kernel COULD be extremely fast on a G5, in time we will see that happen though, Apple are doing what MS did with win95 16-32...
I get that feeling, too... Deja vu all over again. And again. I'm geezer enough to remember the Radio Shack Model 12, which dis 8 bit or 16 bit. Seems the Model 4 did likewise...
The nurse here at the rest home says I should take my meds and go to sleep, now...
One final note -- since all the current crop of 32/64 bit machines are transitory by design, I really don't care all that much if I have to hang a bag on the side to make my video card work.
Anyone care for a challenge of compiling in a 64-bit nvidia driver into the freebsd AMD64 kernel? No matter how crufty and ugly it may be?
Now, where's my meds???
Goodnight Nurse!
// Joe
vBulletin® v3.7.1, Copyright ©2000-2012, Jelsoft Enterprises Ltd.