This document contains only my personal opinions and calls of judgement, and where any comment is made as to the quality of anybody's work, the comment is an opinion, in my judgement.
Today we were given a chance to see the first prototype wafer they will be using for production of 80-core processors. Each CPU like that will have 80 simple floating-point dies and each die is capable of teraflop performance and can transfer terabytes of data per second. They claim that it will be commercially available in a 5-year window and will be ideal for such tasks as real-time speech translation or massive search, for instance.To some extent the ClearSpeed CSX600 is already like that, with 96 FPUs each with around 6KiB of onchip memory for operands. It has a somewhat different usage profile, and I suspect that for now it costs a lot more than what would be the target for regular desktop usage.
automount
I have realized that I sometimes still want to disable it and
mount things manually and permanently. Unfortunately the
format of automounter maps different from that of
/etc/fstab
therefore I would have to maintain the
same information twice. Fortunately the automounter can
synthetize map lines on the fly by invoking a script, and it
is pretty easy to select the relevant /etc/fstab
line (to which noauto
should be added of course
if necessary) and turn it into an automounter map entry
dynamically, with a script like this:
#!/bin/sh SP='[:space:]' : ' Copyright (C) 2006 PeterG. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. We need to look up the key to find type, options and device to mount. This means we need the name of an "fstab" file and the prefix under which the key appears in it. These can be different depending on the "autofs" mount point, under which this script is run. ' case "$PWD" in *) FSTAB='/etc/fstab'; FSPFX="$PWD/";; esac KEY="$1" grep '^['"$SP"']*[^\#'"$SP"']\+['"$SP"']\+'"$FSPFX$KEY"'/\?['"$SP"']' \ "$FSTAB" | if read DEV DIR TYPE OPTS REST then case "$TYPE" in ?*) case "$OPTS" in '') OPTS="fstype=$TYPE";; ?*) OPTS="fstype=$TYPE,$OPTS";; esac;; esac case "$DEV" in *':'*) :;; *) DEV=":$DEV";; esac : ' We must omit the key in a map program like this. key -[fstype=TYPE,][OPTION]* [HOST]:RESOURCE ' echo "-$OPTS $DEV" fiand then running the automounter like this from
/etc/inittab
:
af:2345:wait:/usr/sbin/automount -t 300 /media program /etc/auto.fstabBy the way, too bad that
automount
is designed to
always background itself, because if it did not it that line
could have action respawn
instead of
wait
.
-t 300
seconds instead of 60 because some server I use intermittently
accesses some directories on some mounted filesystems, which
causes a large number of mounts. This adds pointless lines to
the log, and some filesystems like ext3
impose a
periodic check every so many mounts. To avoid the latter I
have actually disabled the force check every some number of
mounts and retained only the one every some number of days.microarchitecture. The first one definitely supports the AMD dual CPU chips vs. the
I have been able to try out a dual-dual-core Opteron machine, and it flies.which is not unexpected, while the second mentions that for something as highly parallel as a DBMS running many transactions, Intel's Hyper-Threading seemed to work pretty well too:
In fact, it flies so well that we ordered one that day. So, in short £3k's worth of dual-opteron beat the living daylights out of our Xeon monster. I can't praise the Opteron enough, and I've always been a firm Intel pedant - the HyperTransport stuff must really be doing wonders. I typically see 500ms searches on it instead of 1000-2000ms on the Xeon)
Actually, believe it or not, a coworker just saw HT double the performance of pgbench on his desktop machine.This is rather unexpected, as the author hints, because Hyper-Threading tends to result, even on custom coded applications, something like 20-30% better performance (I did some work on that custom coding).
Granted, not really a representative test case, but it still blew my mind. This was with a database that fit in his 1G of memory, and running windows XP. Both cases were newly minted pgbench databases with a scale of 40. Testing was 40 connections and 100 transactions. With HT he saw 47.6 TPS, without it was 21.1.
The machine is to be built entirely from commercially available hardwareso that explains why no custom dual Opteron and Cell BE boards, but the BladeCenter H is commercially available. I suspect that with several thousand racks involved a common physical format is not that important.
Roadrunner's construction will involve the creation of advanced "Hybrid Programming" software which will orchestrate the Cell B.E.-based system and AMD system and will inaugurate a new era of heterogeneous technology designs in supercomputing. These innovations, created collaboratively among IBM and LANL engineers will allow IBM to deploy mixed-technology systems to companies of all sizes, spanning industries such as life sciences, financial services, automotive and aerospace design.which seems to be a remarkably optimistic statement.
only2GiB of main memory, and while many 64b applications tend to run a bit faster than 32b ones on an AMD chip, they take significantly more memory. Not quite a doubling, because in practice only pointers double in size, but still often significantly larger.
proxy
cache, I also had a look at another one that seems especially promising:
Polipo is a small and fast caching web proxy (a web cache, an HTTP proxy, a proxy server) designed to be used by one person or a small group of people. I like to think that is similar in spirit to WWWOFFLE, but the implementation techniques are more like the ones ones used by Squid.The attention to detail in the features listed above is notable. I am still using Apache as a proxy cache though, because I have to run it anyhow as a web server, and seems to be adequate.
Polipo has some features that are, as far as I know, unique among currently available proxies:In short, Polipo uses a plethora of techniques to make web browsing (seem) faster.
- Polipo will use HTTP/1.1 pipelining if it believes that the remote server supports it, whether the incoming requests are pipelined or come in simultaneously on multiple connections (this is more than the simple usage of persistent connections, which is done by e.g. Squid);
- Polipo will cache the initial segment of an instance if the download has been interrupted, and, if necessary, complete it later using Range requests;
- Polipo will upgrade client requests to HTTP/1.1 even if they come in as HTTP/1.0, and up- or downgrade server replies to the client's capabilities (this may involve conversion to or from the HTTP/1.1 chunked encoding);
- Polipo has complete support for IPv6 (except for scoped (link-local) addresses).
- Polipo can optionally use a technique known as Poor Man's Multiplexing to reduce latency even further.
proxy
cachebut also occasionally Apache which has proxying and caching modules (they are distinct: Apache can proxy without caching and cache non-proxy requests, and both modules must be enabled to provide proxy caching like Squid).
<IfModule mod_proxy.c> ProxyRequests on Listen *:3128 NoProxy 127.0.0.1 NoProxy 192.0.2.0/24 NoProxy .sabi.co.UK ProxyDomain .sabi.co.UK ProxyVia on ProxyTimeout 50 <Proxy *> Satisfy any Order deny,allow Deny from all Allow from 127.0.0.1 Allow from 192.0.2. </Proxy> </IfModule>The supposed effect of the above is to allow proxying (on port 3128 too, but then Apache does both local service and proxy service on all ports); servers with local addresses are not proxied, and only clients with local addresses are allowed to proxy (unrestricted proxying is a very bad idea). Even without caching Apache proxying has a value in a mixed IPv4 and IPv6 environment, because Apache has full support for both protocols, and it can proxy between them, so that IPv6-only clients can access IPv4-only servers and viceversa.
<IfModule mod_cache.c> CacheDefaultExpire 3600 CacheMaxExpire 86400 CacheLastModifiedFactor 0.1 CacheIgnoreNoLastMod on CacheIgnoreCacheControl off <IfModule mod_disk_cache.c> CacheEnable disk http:// CacheRoot /var/cache/httpd CacheDirLength 1 CacheDirLevels 2 CacheMinFileSize 1 CacheMaxFileSize 900000 </IfModule> <IfModule mod_mem_cache.c> CacheEnable mem / MCacheSize 10000 MCacheMinObjectSize 1 MCacheMaxObjectSize 200000 MCacheMaxObjectCount 2000 </IfModule> CacheDisable http://[::1]/ CacheDisable http://127.0.0.1/ CacheDisable http://localhost/ CacheDisable http://ip6-localhost/ CacheDisable http://example.com/ CacheDisable http://.example.com/ </IfModule>The supposed effect of the above is to allow disk caching of proxy requests involving HTTP URIs (FTP could also be cached, but I don't have a use for it) and memory caching for content served by Apache itself; and to permit no caching of any content on the local server or any server within my own domain.
CacheEnable
and
CacheDisable
directives:
/
pattern would match both
local and proxy URIs.http://
would match no
URIs.they are stable (because they don't depend on your ISP),Here the argument is that in IPv6 all global unicast address range allocated to users are not
portable, because while IPv4 routed each subnet independently, IPv6 only allows routing by
aggregation, that is hierarchically. The argument above, expanded, looks like:
prefixfrom an ISP, assigns addresses under it to nodes, and then changes ISP, one gets a different prefix, and has to change the address of all nodes.
leakonto the Internet they are not routable because no Internet router (hopefully) will accept routes for those well known address ranges, and most will simply drop packets to or from such addresses (which are listed in well known bogon list).
intranetssometimes) with one way address translation to the global Internet.
Note: it is of course possible to create a separate intranet which reuses the full 32 bit address space of IPv4 instead of just the private address ranges. But while the latter only requires NAT one way (because the intranet and the Internet address sets then do not overlap, only the intranet addresses at different sites overlap), a full separate internet would require two way NAT, mapping in-use Internet addresses to a subset of the intranet's address space, as well as in-use intranet addresses to a subset of the Internet's address space, and addresses in the DNS protocol would have to be mapped too.
The reason why unicast site local addresses have been deprecated was not that they were ambiguous, but that they were ambiguous and without NAT: because if there had been NAT then nodes could not be really belong to multiple sites ambiguously. The zone suffixes were an attempt to disambiguate the site locale addresses, but using relative instead of absolute addressing, and as Robert Stroud's thesis showed if absolute addresses work but do not scale, relative address scale but do not work.The only alternative is to sacrifice a deterministic notion of identity by using random identifiers to approximate global uniqueness with a known probability of failure (which can be made arbitrarily small if the overall size of the system is known in advance).But why bother for IPv6? Why not allocate a proper prefix? There is very little difference between that and a (partially) randomly generated one. The control (and weak security) of IPv4 private addresses is derived mostly from the necessity to use a NAT proxy to gain any access to the proper Internet, not from ambiguity in itself.
2001:0630:0050::/48
, and they could
have been given 2001:0630:0051::/48
as
well, with the idea that they would never publish any routing
table for the second prefix; or been given something like
fc00:0630:0050::/48
as well, with the idea that
no Internet router would route datagrams with addresses under
fc00::/16
. This would force any node with addresses
under 2001:0630:0051::/48
or
fc00:0630:0050::/48
prefixes to route via a proxy
under 2001:0630:0050::/48
to communicate
with the Internet, with the proxy having full flexibility on
how to remap (NAT) either internal prefix to the externally
routable one.
social definitionof
works, and I made some examples of long standing bugs in software that I use:
clean all
command, sometimes leaving hundreds
of MiBs of data in its cache.path MTU discovery, does not work well in IPv4, (largely because it was a later extension to IPv4 and many routers are misconfigured for it) and the other is that IP datagram size in IPv4 is limited to 64KiB. These issues have become increasingly frustrating and are discussed forcefully at the large MTU advocacy site in which MTU and datagram sizes of several hundred KiB are advocated for 10gb/s links, with a target of around 500 microsecond per packet, or 2,000 packets per second.
blackholeDNS servers:
The blackhole servers generally answer thousands of queries per second. In the past couple of years the number of queries to the blackhole servers has increased dramatically.Usual problem here: the average network administrator will not waste his precious time figuring out how to setup reverse mappings for the private address range he uses, especially if someone else pays the cost. Also, this reminds me of an article on Internet root DNS servers reporting that one of the most common queries to them was for the top level domain
It is believed that the large majority of those queries occur because of "leakage" from intranets that are using the RFC 1918 private addresses. This can happen if the private intranet is internally using services that automatically do reverse queries, and the local DNS resolver needs to go outside the intranet to resolve these names.
For well-configured intranets, this shouldn't happen.
WORKGROUP
(never mind all
those desktops with MS Windows 2000 or later trying to
register themselves via DNS in the root servers). The lesson
learned by Michael Stonebraker long ago about
Ingres catalog indices:
Users are not always able to make crucial performance decisions correctly. For example, the INGRES system catalogs are accessed very frequently and in a predictable way.has been lost in time, like so many other others.
There are clear instructions concerning how the system catalogs should be physically structured (they begin as heaps and should be hashed when their size becomes somewhat stable). Even so, some users fail to hash them appropriately.
Of course, the system continues to run; it just gets slower and slower. We have finally removed this particular decision from the user's domain entirely. It makes me a believer in automatic database design (e.g., [11]).
For an example of that on the customer side, we want to improve performance. The engineers said: "Rather than guessing what's bottlenecking performance, let's go and measure what's actually going on." We instrumented all the Steam clients, and the answer was surprising. We thought that we should go and build a deferred level-loader, so that levels would swap in. It turned out that the real issue was that gamers' hard drives were really fragmented, and all of the technology we wanted wouldn't have made a difference, as we were spending all our time waiting on the disk-heads spinning round.Note also the implication: installing Valve games (at least via their Steam service) means installing some software that does an exhaustive scan of the hard disk and reports its contents to Valve. This is most likely well advertised in the license.
The solution that we're trying is to break things into smaller chunks and to do them more regularly. So far, it seems to be working. When we look at how long it took us to build a minute of gameplay for Half-Life 2, versus how many man-months it takes us to build a minute of gameplay for Episode One or Episode Two, we seem to be about four times as productive. But we'll go through all three episodes to see... We sort of made a commitment to do it three times and then assess.That
four times more productiveis a big thing. It reminds me claims by Mark Rein of Epic that games based on their Unreal engine development tools only require about 15 developers. My impression is that the case they are making is not about episodic content or development tools, it is that games that are really
mods, reusing a lot of the engine and art of previous games, are much cheaper to develop than games developed from scratch. Which probably is possible because most platforms have sort of leveled in terms of functionality, so game engines don't have to be rewritten from scratch frequently, and thus can become somewhat stable platforms. Never mind
middleware, whether third party libraries or tools: a game engine is in effect its own middleware, when used as a modding platform.
modscan be very profitable. Especially when they release them via Steam: they get the whole price, instead of a fraction of it when released retail. No surprise that Valve is rather cautious when talking about Steam:
What is the split between sales of Episode One via Steam and boxed sales?Fabulously disingenuous argument about promotion: the goal of online game delivery is not to promote games, for which one can do web sites and demos; it is to cut out the middleman as much as possible, and that is also why massive online games like World of Warcraft are so enormously profitable for game developers (and most are not available for consoles, where the console brand owners really insist on getting a large cut). If online content becomes even more popular then games publishers will be reduced to the role of marketing and PR agencies, not resellers, and the other role that they perform, project venture capitalists, will probably split off into independent entities.
Gabe Newell: That isn't something that we've talked about. It's something we're keeping to ourselves.
So, how do you manage your relationship with EA when you're selling games via Steam?
Gabe Newell: Our relationship with EA is fine. I think that retailers are really frightened of these kinds of changes in the industry, and I think that we're learning stuff that is going to be very important for them. For example, Steam enables new ways of doing promotion: [ ... ] I think retailers are starting to understand that communicating more efficiently with customers is a way, not of taking money away from them, but of driving people into stores. It's not a way of cutting them out of the equation.
Right now, I think the benchmark game in the industry is World of Warcraft, and every platform could be measured against its ability to give advantage, or fail to give advantage, to building a better World of Warcraft.a notion that I have previously discussed as that game probably explains a lot of the falling sales of other PC games. As to that, I supect that if World of Warcraft were available on consoles, the sales of other console games would be impacted too.
One of the primary features is that the moving parts were all in the *plug* (all connectors have moving parts ... those little springy bits that apply pressure and make sure the connection is good and tight). This way the part of the connector/socket system that wears out is in the cable. When something goes wrong (as it will in any mechanical system), you throw out the cheap, easily replaceable component ... i.e., the cable.I was talking about this recently again in the context of a large scientific facility, which expects a lot of visiting scholars for relatively short periods of time. My argument was that for the user facing part of the network wireless network is a good idea (security can be sorted out) simply because it avoids a lot of plugging and unplugging of cabling by hasty and not very careful people, which is especially damaging as the insertion cycles to which many sockets are designed are pretty low.
This feature can also be used to debug a machine whose operating system has crashed, and in some systems for remote-console operations. On FreeBSD, the dcons driver provides both, with using gdb as debugger. Under Linux, firescope and fireproxy exist.These are classic examples of the
if life gives you lemons, make lemonadeprinciple.
2002
prefix encapsulation
for IPv4 addresses and then it is usually
autorouted
or explicitly configured and routed via a
tunnel broker.
Except in rare cases it is not supported by consumer grade
ADSL/cable gateways, but can be used if one connects to
the Internet via a simple
PtP connection
via a modem (either a phone or ADSL one). Autorouting
usually results in poor performance, so registering with a
6in4 tunnel broker is usually
better.sabishape
I was interested to find a nice detailed discussion about
shaping and QoS.
The author makes some useful points, for example about jitter
limitation requiring a far higher rate of examination
on low bandwidth links, and it is somewhat surprising how high
a rate is needed:
The only timer source of use at SME bandwidths are the high performance timers available in post-PentiumPro CPUs. These allow bandwidth estimation and policying at speeds lower than 64K on FreeBSD (with the HZ raised beyond 2KHz) and lower than 128K on Linux (at 1KHz HZ).and that high overhead, interrupt-per-packet cards are better for that purpose:
At the same time, cards that are considered "horrid" like Realtek 8139 (rl) provide much more interrupts and much more scheduling opportunities. As a result they provide considerably better estimator precision and policy performance. The difference is especially obvious on speeds under 2MBit. It is nearly impossible to achieve a working ALTQ hierarchy where some classes are in the sub-64Kbit range for a 2MB (E1) using Intel EtherExpress Pro (fxp). It is hard, but possible on a Tulip (dc). It is trivial to do this using Realtek (rl).The reason is that if we want to be sure that the maximum bandwidth used is under a certain level, the more variable it is, the lower the average must be to ensure the limit is not crossed. The overall discussion is quite agreeable, even if I think that:
Linux estimator entry points differ from BSD. As a result, the effects of hardware are less pronounced and system is more dependant on the precision of the timer source. Still, the same rules are valid for Linux as well. QoS on low bandwidth links (sub-2MB) cannot be performed on server class network hardware.
In reality the diagram is likely to contain 16-20 classes for an average company or 5-10 classes for an average home office network.exaggerates a bit. Because really one can do one class per source of traffic (e.g. sharer of the link) and three classes per type of traffic, like low, medium, high. More classes just make the situation more complex and don't really work that well especially if there is little bandwidth to share.
HTB is not a good choice for an SME or hobby network. Bandwidth will not be utilised fully and the link efficiency is considerably worse. Its only advantage is that its "ease of understanding" and "predictability" are easier to express in a subletting agreement.HTB is a a looser policy than CBQ (both also described in this Linux specific HOWTO) but it should not lead necessarily to lower utilization. If one specifies the ceiling for each class as the limit for the whole link.
ingress
discipline. The goal of dropping packets
on incoming is in effect to simulate a congested link and thus
trigger quenching at the source; dropping packets regularly as
ingress
does simulates a constant, steady
bandwidth limit. But letting incoming queue up and then drop
them as the queue becomes full simulates a full bandwidth link
that occasionally becomes very congested, and congestion
control algorithms don't react well to that. I'll ask the
author of the site about his reasons for that.getaddrinfo
.sparse capabilitiesagainst networking scanning attacks.
init
dæmon
it is pleasing to see that the
Ubuntu project
is replacing the standard System V style one with a
redesigned one called upstart
for which they have written a
neat paper describing it and comparing it
with similar projects like
OpenSolaris SMF,
initng
or
Apple's launchd
.
init
,
cron
and inetd
(and more). Never
mind that launchd
uses XML for configuration
files...
inetd
functionality, because it has been
traditional to allow a UNIX like
system to startup without any networking, for various reasons.
init
(almost)
just runs enough scripts to reach some state of readiness and
back at shutdown, cron
just runs
commands, not dæmons, and inetd
really manages sockets, not services.
upstart
:
In fact, any process on the system may send events to the init daemon over its control socket (subject to security restrictions, of course) so there is no limit.which seems to indicate that it is yet another mess like
udev
. And it was pretty scary to read that some
people wanted to integrate upstart
with
D-Bus, another mess.
Overall I think initng
is the more UNIX like
solution, simple and dependency based, but event based
upstart
may be not too bad, even if it is already
decided that it will use /etc/event.d
as its
configuration directory (UNIX style is not to have a
.d
suffix on directories). Let's hope that the
socket is actually a named pipe, at least.coprocessors, network oriented or otherwise. Many years ago for example Weitek had line of extra-performance x87 socket compatible floating point coprocessors. One can now imagine putting all sort of things like that in the HyperTransport capable, or more probably HTX capable, AMD64 motherboards.
Direct Connect Architecturebus give it a considerable advantage for 4-chip and 8-chip systems, which do not therefore require the SMP chipsets that Intel CPUs need.
high memory supportis enabled, and then real memory above 896MiB is mapped temporarily in a subwindow of the per-process kernel memory area of 128MiB, which involves a modest slowdown and some complications.
CONFIG_PAGE_OFFSET
setting in the
.config
file when building the kernel, or for
older kernels in redefining the macro __PAGE_OFFSET
in the kernel header include/asm-i386/page.h
before building it. The default is 0xC0000000
and the values that I think are sensible are:
Boundary | Process space |
Kernel space |
Real memory window |
---|---|---|---|
0xB8000000 |
2944MiB 3GiB-128MiB |
128MiB | 1GiB |
0xC0000000 |
3GiB | 128MiB | 896MiB 1GiB-128MiB |
0x98000000 |
2432MiB 2.5GiB-128MiB |
128MiB | 1.5GiB |
0x78000000 |
1920MiB 2GiB-128MiB |
128MiB | 2GiB |
0x38000000 |
896MiB 1GiB-128MiB |
128MiB | 3GiB |
0x78000000
, where the real memory map window is
2GiB and the per process address space is just under that, as
this allows direct mapping of most desktop real memory sizes,
and the 1920MiB per process address space is still pretty
large, and it still allows the full amount of real memory to
be used up by a single process.
0xC0000000
,
because unless high memory is enabled it wastes 128MiB of a by
now common 1MiB real memory endowment, for the dubious benefit
of a 3GiB per process address space. More useful would have
been 0xB8000000
as at least it allows full
mapping of the 1GiB, at the insignificant cost of 128MiB less
of per process address space.BCI's gCORE processors employ a new Grid on Chip architecture which arranges system elements such as processor cores, memory, and peripherals on an internal "grid" network. gCORE is one of the first commercial applications of "network on chip" technology, that has been at the forefront of research at leading universities in recent years. It is widely accepted that traditional bus architectures are no longer valid for large scale system on chip implementations in the sub 90 nanometer geometries. Traditional buses become too large, and too slow to support 16 or more processor cores. Ease of use has been one of the biggest obstacles for the widespread adoption of multi-core processors. BCI has taken an unique approach of incorporating a "Time Machine" module in the chip to dynamically assign tasks to each of the processor cores. By alleviating the need to explicitly program each core, this approach greatly simplifies the software development process.This chip is also designed to run Linux. Not surprising: just as the ready and cheap availability of UNIX source licenses considerably reduced initial cost to develop new minicomputers and workstation systems in the 1980s, Linux has done the same for small servers and PCs and even desktop boxes and ADSL routers in the 1990s.
equivalentperformance to a 5GHz processor, which is pretty remarkable.
partitionsper hosting PC, and with an OCTEON (or UltraSPARC-T1) CPU they can provide a real CPU per user, which solves a number of issues, and for a lot less watts than an equivalent 3-5GHz x86 style single-CPU chip.
microformatsare used to tag data for automatic processing (as the Semantic Web is not quite here yet), I feel like confessions that I use the sensible alternative to microformats, which is finer resolution text tagging. The reason for this is that often there is a need to put in evidence both some
parts of speechand point out
types of discourse(usually in the special case, but not only, of
levels of discourse, where the type is the degree of abstraction).
abbr
and acronym
.
proper names, because some proper names are not easy to distinguish from ordinary words (many are derived from them). In many languages there is some convention to indicate a proper name, and the one I use is to capitalize the first letter of each word of a proper name. I also reckon that the
cite
tag of HTML is the neatest way of
tagging proper names in general. So I would write:
<cite>Smith</cite> is an engineer, not a smith.Then however there are different types of proper names, and I wish often to be able to differentiate them. This is particularly valuable in talking about computer and business related matters, because often different entities, like companies and their products, have the same proper name; and many companies and products have all-lower case or mixed case names, and first letter capitalization cannot be used to indicate a proper name role for the word. For this I use not just the
cite
tag but
also the class
attribute to indicate what
type of proper name is being tagged, and then a slightly
different
CSS rule
to give them slightly different renderings. For example,
I would write:
<cite class="corp">Oracle</cite>'s main product is <cite class="thing">Oracle</cite>, and only an oracle can predict whether they will release a similarly name Linux distribution.because Oracle is the name of a corporate person and Oracle that of a thing. I have tried not to define too many classes of proper names, and currently the values I use for
class
of a cite
element are
corp
for corporate persons),
thing
for objects, place
for
locations, and uom
for units of measure.
cite
to tag bibliographic citations, not just citations of
proper names, thus I also have classes
author
for proper names of authors,
title
for names of the article or book,
part
for names of the specific part of a
book, which
for the name of the issue,
publ
for publisher names, and
date
for the date of publication.
blockquote
for large textual quotations and
q
for smaller quotations, and
code
for quoting code and a few others.
q
to
indicate the type of discourse of single words or longer
sequences, for example fl
for foreign
language, nlq
for non-literal quotes, and
toa
for terms of art.
A <q class="toa">type of discourse</q> can be recognized because it must be read in a non-<q class="nlq">plain</q> way to get the correct meaning: in <cite class="thing">French</cite> the word <q class="fl">chair</q> does not mean <q>chair</q>, but <q>flesh</q>.Apart from being useful to remove ambiguities, the use of finer pseudo-tagging of text has other advantages: it becomes a lot easier to search for stuff in text. For example, using tools like
sgrep
,
a version of grep
which has
matching operators
specifically for
SGML
style syntax.-dpi
dpi in
the X server's command line (usually X server command lines
are specified in the display manager's configuration file);
Monitor
section's DisplaySize
directive.microformats:
Every once in a long while, I read about an idea that is a stroke of brilliance, and I think to myself, "I wish I had thought of that, it's genius!" Microformats are just that kind of idea. You see, for a while now, people have tried to extract structured data from the unstructured Web. You hear glimmers of these when people talk about the "semantic Web," a Web in which data is separated from formatting. But for whatever reason, the semantic Web hasn't taken off, and the problem of finding structured data in an unstructured world remains. Until now.Ahhhhh the pain the pain, the memories :-). In a discussion a long time ago I was not happy with the tendency to use SGML or XML to define not markup languages but data description languages:
Microformats are one small step forward toward exporting structured data on the Web. The idea is simple. Take a page that has some event information on it -- start time, end time, location, subject, Web page, and so on. Rather than put that information into the Hypertext Markup Language (HTML) of the page in any old way, add some standardized HTML tags and Cascading Style Sheet (CSS) class names. The page can still look any way you choose, but to a browser looking for one of these formatted -- or should I say, microformatted -- pieces of HTML, the difference is night and day.
and here I find a variant of that monstrosity. The examples of microformats provided are also particularly repulsive because of less than optimal choice of the HTMLI'll spare myself the DTDs, but consider two instances/examples of two hypothetical SGML architectural forms; the first is called MarkDown: <ELEMENT TAG=html> <ELEMENT TAG=head> <ELEMENT TAG=title TEXT="A sample MarkDown document"></> </> <ELEMENT TAG=body ATTRS="bgcolor" ATTVALS="#ffffff"> <ELEMENT TAG=h1 ATTRS="center" ATTVALS="yes" TEXT="What is MarkDown?"></> <ELEMENT TAG=p> MarkDown is a caricature of SGML; it is an imaginary architectural form whose semantics are document markup, where the <ELEMENT TAG=code TEXT="tag"></> attribute is the one to which the MarkDown semantics are attached. </> </> </> Now this is a monstrosity, but I hope the analogy is clear, even if a bit forced in some respects.
tagsto pervert into data descriptions:
<div class="vevent"> <a class="url" href="http://myevent.com"> <abbr class="dtstart" title="20060501">May 1</abbr> - <abbr class="dtend" title="20060502">02, 2006</abbr> <span class="summary">My Conference opening</span> - at <span class="location">Hollywood, CA</span> </a> <div class="description">The opening days of the conference</div> </div>as there is too much use of generic tags like
div
and span
, and the abuse of abbr
,
where the data is in the title
attribute and its
verbose description as the body of the abbr
element.
Now trying to imagine the above data as text the second
example might be less objectionably marked up as:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <style><!-- dt { font-weight: bold; } cite.title:before { content: open-quote; } cite.title:after { content: close-quote; } cite.location:before { content: "["; } cite.location: { font-style: normal; } cite.location:after { content: "]"; } q.abstract:before { content: ""; } q.abstract { display: block; font-size:90%; } q.abstract:after { content: "."; } --></style> </head> <body> <dl class="vevent"> <dt id="20060501-20060502"> <a href="http://WWW.MyEvent/#opening"> <abbr class="dtstart" title="May 1 2006">20060501</abbr> to <abbr class="dtend" title="May 2 2006">20060502</abbr></a></dt> <dd><cite class="title">My Conference opening</cite> <cite class="location">Hollywood, CA</cite>: <q class="abstract">The opening days of the conference.</q></dd> <dt id="20060503-20060504"> <a href="http://WWW.MyEvent/#closing"> <abbr class="dtstart" title="May 3 2006">20060503</abbr> to <abbr class="dtend" title="May 4 2006">20060504</abbr></a></dt> <dd><cite class="title">My Conference closing</cite> <cite class="location">Hollywood, CA</cite>: <q class="abstract">The closing days of the conference.</q></dd> </dl> </body> </html>It might seem similar, but it isn't: because my version is just text with text markup, structured as text, not data (and never mind the use of SGML and XML instances that contain only markup, with no data or text). The idea of microformats is to decorate structured data with pseudo-markup so programs can extract individual data elements more easily. As the already mentioned by this blogger this is an abuse of HTML, which is about text, not data, markup, where some XML instance would be more appropriate. However there is a decent case to be made for finer resolution markup of text so that parts of it may be easier to identify and extract, and doing this by some finer grain HTML markup is not too bad. Using the
class
attribute to indicate finer classes of
semantics is a bit of an abuse, as they are meant to
indicate finer classes of rendering, but one can
make the case that different classes of rendering do
relate to finer classes of meaning, at least in the eye
of the average beholder.RSS
column in
the output of ps
on Linux and I said that in theory
is the number of resident pages the process has, but that is
somewhat unsatisfactory.
RSS
, and one is incidental and the other
deeper. The incidental one is that shared library (or other
mappings) resident pages are accounted for in every process
using them, with the result that the total sum of the
RSS
figures is larger than the memory actually
used.
exmap
which accounts for share mapping resident pages in proportion
to how many processes share them:
Exmap is a memory analysis tool which allows you to accurately determine how much physical memory and swap is used by individual processes and shared libraries on a running system. In particular, it accounts for the sharing of memory and swap between different processes.Now this useful tool accounts for shared pages equally among processe, but there might be other ways of accounting, like a more dynamic usage based count. But it already needs a kernel extension just to collect per-process ownership data for pages, because the Linux kernel does not:
To my knowledge, other tools can determine that some memory is shared, but can't determine how many processes are making use of that memory and so fairly apportion the cost between the processes making use of it.
Exmap uses a loadable kernel module to assign a unique id to each physical or swap page in use by each process. This information is then collated and 'effective' usage numbers calculated.That the Linux kernel does not already keep track of this leads to the deeper issue with determining how much memory a process is actually using: that Linux uses a global replacement policy for memory management, that is it treats all processes together, in other words pages from different processes compete as to residency.
working setof pages that are most active in that process, and they try to estimate only which pages should be part of that working set. The reason why that is better done per process than globally is that the working set of a process is supposed to change with time but slowly, under the
phase behaviourhypothesis: that processes execution is in distinct phases, and each phase usually has a different working set, which is something that a global policy does not take advantage of.
/etc/fstab
to
an automounter map
for most of my filesystem I have been disappointed to see that
I missed a subtle detail that means that the locate
database created by updatedb
only lists files in
filesystems mounted for other reasons.
-g
(ghosting) option to
automount
to create directories to act as virtual mount points, which
updatedb
would then descend, triggering the
mounting of the relevant filesystem. But currently I
use Fedora
on my desktop PC, and the updatedb
in it is from
the highly optimized
mlocate
variant,
which checks whether a directory is empty before descending in
it, and unfortunately the mere check does not trigger the
mounting of the filesystem, and the mountpoint directory
created by the -g
option is empty before the
filesystem is mounted. Indeed I just checked and the
stat64
system call does not trigger mounting, but
getdents
or getxattr
trigger the
mounting. Which is incorrect, because mounting should be
triggered by any access to the inode or its data contents, not
just the data contents (the extended attributes read by
getxattr
are in not in the inode).
updatedb
in
mlocate
to scan the relevant directories explicitly,
which triggers the mount, but then the locate
databases gets overwritten unless I create a separate database
file. But well, I can do so indeed, and simplify several
issues, by creating a separate mlocate
database
for each filesystem in a given list. The database by default
will be in the top directory of the filesystem, but optionally
the list will have a second field for an explicit name (to
cater to the case where the filesystem is read-only).
/etc/cron.daily/mlocate.cron
file now
contains:
/usr/bin/updatedb DBDIRS='/etc/updatedb.dirs' if test -e "$DBDIRS" then grep -v '^[ \t]*#\|^[ \t]*$' "$DBDIRS" \ | while read DIR DB do : ${DB:="$DIR/mlocate.db"} /usr/bin/updatedb -U "$DIR" -o "$DB" done fiand my
profile
initializes the
LOCATE_PATH
environment variable like this:
if test -e "$DBDIRS" then export LOCATE_PATH dbdirspath() { DBPATH="$1"; DBDIRS="$2" { grep -v '^[ \t]*#\|^[ \t]*$' "$DBDIRS"; echo ''; } \ | while read DIR DB do case "$DIR" in '') echo "$DBPATH";; ?*) : ${DB:="$DIR/mlocate.db"} case "$DBPATH" in '') DBPATH="$DB";; ?*) DBPATH="$DBPATH:$DB";; esac;; esac done unset DBPATH unset DIR unset DB } LOCATE_PATH="`dbdirspath \"$LOCATE_PATH\" \"$DBDIRS\"`" fi
/etc/inittab
perhaps some discussion of init
is useful to
justify that.
init
was a simple thing that just
run some script chain, and the script chain would define a few
nested run levelscorresponding usually to
modes, for example single user mode, multi user mode, where the system would pass through each lower level to the target level on startup, and viceversa on shutdown.
init
would execute first
thing something like a /etc/singleuser
script,
which would contain single user initialization commands, a call
to /etc/multiuser
and single user termination
commands; /etc/multiuser
would contain multiuser
initialization code, and a call to an upper level or just the
spawning of getty
, and multiuser termination
commands.
levels), in the sense that states are not ordered and the system can go from any state to any other state. To support this they added a configuration file
/etc/inittab
where each line is tagged by the
states in which it is valid.
init
can
monitor it and restart it if it terminates.
init
program reads the configuration file,
and when requested to switch run state, lists all commands that
are unique to the source and destination state, and the common
ones, dividing the latter in simple and dæmons, and does the
following:
/etc/inittab
.
This creates a problem if one has to goal to allow package
installation without manual intervention, because the package
may be a dæmon
init
, only much worse. Because it is
based on having nested run levels by convention (and many
distributions use different conventions, even if there is a
nominal Linux standard)
where however is not checked because the scripts run at each
level are put in a separate per-level directory. Even more
insanely, which script is run in which level is not configured
in a file, but by the mere absence or presence of a script (or
a symbolic link to one) determines what is run.
init
model, with
variants, so for example to enable/disable individual services
RedHat uses files in /etc/sysconfig
, SUSE first
used the file /etc/rc.config
and then this was
split into separate files under etc/rc.config.d
,
and Debian goes for gold by having only two levels, and which
scripts run in the upper one is determined solely by
configuration in various random files.
init
, for example by:
once
, wait
).include
all the files in
a directory.init
redesigns. There are however very small
chances that any of them will be used in a production
distribution, as the inertia of historical accidents probably
will prove too strong. However it may be still interesting to
have a look at some, for example
LFSinit,
boot-scripts,
the NetBSD 1.5 rcorder
system.for (unit = 0; unit < MAX_DRIVES; ++unit) { ide_drive_t *drive = &hwif->drives[unit]; if (hwif->no_io_32bit) drive->no_io_32bit = 1; else drive->no_io_32bit = drive->id->dword_io ? 1 : 0; }The perhaps inadvertent double obfuscation of the logical condition is all too typical. I would have written:
{ const ide_drive_t *const end = &hwif->drives[MAX_DRIVES]; ide_drive_t *drive; for (drive = &hwif->drives[0]; drive < end; drive++) drive->no_io_32bit = hwif->no_io_32bit || drive->id->dword_io; }I also wonder whether scanning all drives up to
MAX_DRIVES
is correct, without checking whether
the drive is actually present. But probably harmless. As a
final note, the code above is not, by far, the worst I have
seen recently; it is just obviously lame./etc/fstab
and the boot scripts. The two are
mostly equivalent, but the automounter maps are used by a
dæmon to mount filesystems dynamically instead of
statically and on usage; mounted filesystems are then unmounted
after they haven't been accessed for a while.
mount
command before accessing a filesystem, which
is trifling issue, but that they do so dynamically,
that is filesystems only stay mounted for as long as they are
used. This has the not inconsiderable advantage that most
filesystems will stay unmounted most of the time, and an
unmounted filesystem is cleanand does not need to be checked if there is a crash, and this is particularly useful if one does system development and these crashes occur during debugging. Sure, most file system types have journaling and they recover fairly quickly, but because of my PC has MS Windows dual boot, I also have a few (for historical reasons) FAT32 and
ext2
filesystems
that don't have journaling. Moreover keeping filesystems
inactive and unmounted reduces other chances of accidental
damage.
/fs
, called /etc/auto.fs
and it has two sections, one for mounting filesystem (mostly
from removable media) that might exist on any system, and
another for mounting PC specific filesystems, and it looks
like:
# vim:nowrap:ts=8:sw=8:noet:ft=conf #MOUNTP -fstype=TYPE[,OPTION]* :RESOURCE # Host independent ################## 0 -fstype=ext2,user,rw,defaults,noatime,nosuid,nodev :/dev/fd0 a -fstype=vfat,user,rw,nocase,showexec,noatime,umask=077 :/dev/fd0 A -fstype=msdos,user,rw,noatime,umask=077 :/dev/fd0 1 -fstype=ext2,user,rw,defaults,noatime,nosuid,nodev :/dev/fd1 b -fstype=vfat,user,rw,nocase,showexec,noatime,umask=077 :/dev/fd1 B -fstype=msdos,user,rw,noatime,umask=077 :/dev/fd1 sda1 -fstype=vfat,user,ro,nocase,showexec,noatime,umask=077 :/dev/sda1 sdb1 -fstype=vfat,user,ro,nocase,showexec,noatime,umask=077 :/dev/sdb1 sdc1 -fstype=vfat,user,ro,nocase,showexec,noatime,umask=077 :/dev/sdc1 sdd1 -fstype=vfat,user,ro,nocase,showexec,noatime,umask=077 :/dev/sdd1 sde1 -fstype=vfat,user,ro,nocase,showexec,noatime,umask=077 :/dev/sde1 sdf1 -fstype=vfat,user,ro,nocase,showexec,noatime,umask=077 :/dev/sdf1 uba1 -fstype=vfat,user,ro,nocase,showexec,noatime,umask=077 :/dev/uba1 ubb1 -fstype=vfat,user,ro,nocase,showexec,noatime,umask=077 :/dev/ubb1 ubc1 -fstype=vfat,user,ro,nocase,showexec,noatime,umask=077 :/dev/ubc1 ubd1 -fstype=vfat,user,ro,nocase,showexec,noatime,umask=077 :/dev/ubd1 ube1 -fstype=vfat,user,ro,nocase,showexec,noatime,umask=077 :/dev/ube1 ubf1 -fstype=vfat,user,ro,nocase,showexec,noatime,umask=077 :/dev/ubf1 pkt -fstype=udf,user,rw :/dev/pktcdvd/0 udf -fstype=udf,user,ro :/dev/cdrom cd -fstype=cdfs,user,ro,mode=0775,exec :/dev/cdrom iso -fstype=iso9660,user,ro,mode=0775,exec :/dev/cdrom r -fstype=iso9660,user,ro,mode=0774,norock :/dev/cdrom pkt1 -fstype=udf,user,rw :/dev/pktcdvd/1 udf1 -fstype=udf,user,ro :/dev/cdrom1 cd1 -fstype=cdfs,user,ro,mode=0775,exec :/dev/cdrom1 iso1 -fstype=iso9660,user,ro,mode=0775,exec :/dev/cdrom1 s -fstype=iso9660,user,ro,mode=0774,norock :/dev/cdrom1 # Host dependent ################ home -fstype=jfs,defaults,noatime :/dev/hda2 c -fstype=vfat,rw,nocase,showexec,noatime,umask=02 :/dev/hda3 d -fstype=ext3,rw,defaults,noatime :/dev/hda6 e -fstype=ext3,rw,defaults,noatime :/dev/hda7Interestingly
autofs
maps can be scripts
that given the mountpoint print the options and resource to
mount on it, but for my simple purposes of /etc/fstab
replacement that is not necessary, a static map is good enough.
I have of course kept an /etc/fstab
, but it now
contains only the indispensable static mounts, which are about
virtual filesystems and swap:
# vim:nowrap:ts=8:sw=8:noet: #DEVICE MOUNT TYPE OPTIONS DUMP PASS # Host independent ################## none /proc proc auto,defaults 0 0 none /sys sysfs auto,defaults 0 0 none /dev/pts devpts auto,mode=0620,gid=tty 0 0 none /proc/bus/usb usbfs auto,defaults 0 0 none /proc/nfs/nfsd nfsd noauto 0 0 none /var/lib/nfs/rpc_pipefs pipefs noauto 0 0 # Host dependent ################ /dev/hda1 / jfs defaults,errors=remount-ro 4 1 none /tmp tmpfs auto,mode=0777,size=700m,exec 0 0 none /dev/shm tmpfs auto,mode=0777,size=100m,exec 0 0 /dev/loop7 swap swap noauto,swap,pri=8 0 0Instead of using the
autofs
rcscript to start the
automount
dæmon, I have
chosen to start it directly in /etc/inittab
,
because that is where it should be, and thus I have added these
lines to it:
# Use 'automount' instead of '/etc/fstab'. Local and remote maps. af:2345:wait:/usr/sbin/automount -g -t 60 /fs file /etc/auto.fs aa:345:wait:/usr/sbin/automount -g -t 180 /am file /etc/auto.amNote that I have specified the
ghostingoption
-g
to make the mountpoints visible under
the main mountpoint, and slightly different and somewhat
longish autounmounting timeouts. One can always issue
umount
explicitly if one wants a quick unmount,
for example for a removable medium.
/usr
and
/var
if separate) should in any case be specified
in /etc/fstab
and be mounted statically at boot.
Surely nowhere as fragile as udev
. Another
possible downside is that mounting is slow for some file system
types, most notable ReiserFS, because some extended consistency
checks are performed. In such a case perhaps lengthening the
default mount timeout is a palliative.
autofs
I might have used
AMD.
AMD is a similar dæmon which is system independent
(instead of using the special autofs
module of
Linux it pretends to be an NFS server) and rather more
sophisticated. AMD is more suitable for large networked
installations, where it has considerably simplified my work a
few times, and I just wanted a dynamic extension to
/etc/fstab
and for that autofs
is
quite decent.
autofs
in effect is a subset of the ability in
Plan 9
to
mount processes in the filesystem name space,
and vaguely similar to the
BSD
portalfeature for example as in
mount_portalfs
.superblock.
lilo
compiler does scan all partitions to verify
that they have distinct tags. Fortunately it is fairly easy to
ask lilo
to ignore specific drives, and I did so
for my backup drives.
lilo
, or
perhaps best examined and changed with a binary editor
like hexedit
.HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices\
and
HKEY_LOCAL_MACHINE\SYSTEM\DISK\
subtrees it is
used to map partitions to drive letters. In particular it is
used to identify the boot partition, and a mismatch between the
volume id recorded in the registry for the boot partition and
that on the drive will prevent MS Windows from starting. This
can be fixed most easily by zeroing the volume id in the MBR, a
special case which MS Windows handles by generating a new one
and fixing the registry with that value.The jobs all consist of some simple task that can be performed at your computer -- such as viewing pictures of shoes and tagging them based on what color they are. You get a few pennies per job
Computers suck at many tasks that are super-easy for humans. Any idiot can look at picture and instantly recognize that it's a picture of a pink shoe. Any idiot can listen to a .wav file and realize it's the sound of a dog baring. But computer scientists have spent billions trying to train software to do this, and they've utterly failed. So if you're company with a big database of pictures that need classifying, why spent tens of thousands on image-recognition software that sucks? Why not just spend a couple grand -- if that -- getting bored cubicle-dwellers and Bangalore teenagers to do the work for you, at 3 cents a picture?Well, true, but then the obvious way to provide this service is for one of the
any idiots to open 100 service provider accounts and replace himself with a little program that just clicks a reply at random. There are already many problems with Google link clicking abuses.
peripheralssome humans, and that functionality can be split between the machine and human components. For example when machine components were expensive, humans would run a
compilerin their brains, and the compiler now runs on the machine CPU now that the cost ratio has changed. Similarly in a small system the spooler can be just two users telling each other who is next to print, and in a larger system it can be a dæmon performing the same function.
udev
subsystem of GNU/Linux
has reached new depths, as I realized that one of its (usually
unmentioned) components, the sysfs
file system,
is actually just shy of being a devfs
clone that
would make udev
largely irrelevant.
/sys
containing the major and minor numbers of the device special
file that should be created for that device, for example:
$ ls -ld /sys/class/input/mice/dev /dev/input/mice crw------- 1 root root 13, 63 Dec 4 2005 /dev/input/mice -r--r--r-- 1 root root 4096 Jul 28 14:56 /sys/class/input/mice/dev $ cat /sys/class/input/mice/dev 13:63What? Why not the device special file itself? It would even be easier.
sysfs
would be just an overcomplicated clone of
devfs
, and udev
would be essentially
irrelevant.
udev
was that udev is small (49Kb binary), which sounds to me rather disingenuous to say the least:
# size /sbin/udev{d,d.static} text data bss dec hex filename 63821 940 10496 75257 125f9 /sbin/udevd 741984 2236 51732 795952 c2530 /sbin/udevd.staticand that is only the dæmon, never mind the cost of
sysfs
itself.
devfs
chose not to to defend it against prejudiced attacks on it and
just let it drop. In free software no less than in proprietary
software it often happens that self interested territorialism
enhances job security, and the most obnoxious and self serving
attacks trump merit easily.
devfs forces the devfs naming policy into the kernel: the naming scheme forced into the kernel is the Linus Torvalds scheme, a scheme that the author of
devfs
actually disliked and
was told to implement instead of a more sensible one:
Devfsd provides a naming scheme which is a convenient abbreviation of the kernel-supplied namespace. In some cases, the kernel-supplied naming scheme is quite convenient, so devfsd does not provide another naming scheme. The convenience names that devfsd creates are in fact the same names as the original devfs kernel patch created (before Linus mandated the Big Name Change). These are referred to as "new compatibility entries".Another probably knowing prevarication by the author of
udev
is the claim that If you don't like this naming scheme, tough.: in the very FAQ for
devfs
two alternative naming schemes are described, implemented by
the devfs
customization dæmon,
devfsd
:
Kernel Naming Schemeand indeed just about any naming scheme can be implemented by
Devfsd Naming Scheme
Old Compatibility Names
devfsd
.
devfs
and udev
discussion
the main and probably knowing prevaricatiob is the comparison
of udev
with devfs
and not
devfsd
, and ignoring the essential role of
sysfs
in the udev
story.
sysfs
and udev
pair is just a complicated overextension the
devfs
and devfsd
pair, and one that
does not have some of the more useful features, and is more
fragile, because while devfs
can be used without
devfsd
, udev
cannot really be used
without sysfs
(because of coldplugging) and
sysfs
cannot be used without udev
because it stops just one step short of creating device
special files.
devfs
and devfsd
, the main
difference with sysfs
and udev
is
that the latter pair is the kernel land grab of GKH, and thus
benefits his standing and his job security instead of those of
RG, and this may be regarded by some as a good motivation for
disingenuous attacks.CPU showdownreview in which various very recent CPUs are benchmarked within a top end system with a top end graphics card (1GiB RAM, NVIDIA 7900GTX with a price of around £280 before tax), and the frame rate depends heavily on the speed of the CPU (note that only one processor is really used by the games, even if the chip has two):
CPU model | Clock | L2 cache |
Price before tax |
Half Life 2: Lost Coast |
Far Cry |
---|---|---|---|---|---|
Pentium D 805 | 2x2.7GHz | 2x1MiB | £58 | 52 | 54 |
Sempron 3600+ | 2.0GHz | 256KiB | £58 | 67 | 55 |
Pentium 4 560 | 3.6GHz | 1MiB | £110 | 70 | 63 |
Athlon 64 3800+ | 2.4GHz | 512KiB | £61 | 83 | 70 |
Athlon 64 X2 4000+ | 2x2.0GHz | 2x1MiB | £105 | 91 | 71 |
Athlon 64 X2 4400+ | 2x2.2GHz | 2x1MiB | £219 | 95 | 75 |
Athlon 64 X2 4800+ | 2x2.4GHz | 2x1MiB | £345 | 108 | 83 |
Core 2 Duo E6300 | 2x1.9GHz | 2MiB | £115 | 104 | 86 |
Core 2 Duo E6400 | 2x2.1GHz | 2MiB | £128 | 111 | 89 |
Core 2 Duo E6700 | 2x2.7GHz | 4MiB | £310 | 149 | 107 |
mount /dev/scd0 /media/dvdram/ -t udf -o rw,noatimewhich is actually dangerous, because many if not most commands scan their argument list strictly left-to-right and options apply only to the arguments that follow them. This is a simple and obvious concept, so how comes these people put the options afterward? Because that's what they are used to do in Microsoft's
cmd.exe
, try to imagine
the previous line as:
mount \dev\scd0 \media\dvdram /t:udf /o:rw,noatime
We were confronted with that question with GeForce 256 in 1999. That was on par with the Reality Engine supercomputer that Silicon Graphics used to sell. The fill rate, the performance, the throughput of the chips was amazing. In 1999, we were confronted with that question. I thought we made one of the most important decisions for not only our company but the entire industry. That was going to programmability. As you know, investing in programmability, which ultimately ended up in GeForce FX, made the graphics chip far more programmable. But the cost was so high. It was quite a burden on our company for a couple of years. I would calculate that the amount of profitability lost on GeForce FX was $200 million a year for two years. It was almost $500 million in lost profit. That was a half a billion dollar risk we took going to a completely programmable model.
Where are we betting? We are betting a lot on the cell phone, believing that multimedia will be an important part of these devices. With GPUs, we are betting a huge amount on programmability. GPUs are going to become more programmable, easier to write programs, and support much more complex programs.as it also has implications for physics chips. Another interesting statement is about the amount of money NVIDIA are spending in developing graphics chips:
We invest $750 million a year in R&D in graphics processing. No other company invests that much in graphics processing today. This is such an incredibly deep technology and there is so much more to do. It makes sense that in the long-term we would work on game consoles as well. The others can't keep up with the R&D that we do. That part makes perfect sense to me.both because $750m/y is a lot on its own, and on how it compares with the amount of money Microsoft paid ATi to develop the graphics chip for the Xbox 360, with some slightly contradictory news:
Microsoft began the Xbox 360 project in late 2002.
In 2003, Microsoft decided it wanted to launch its next-generation console before Sony.
IBM put 400 engineers to develop the Xbox 360 CPU.
IBM taped out (finished the design) of the CPU in December 2004.
ATI put 300 engineers to developer the Xbox 360 GPU, aka Xenos.
ATI finished its GPU design on November 2004.
ATI had 175 engineers working on the Xenos GPU at the peak. These included architects, logic designers, physical design engineers, verification engineers, manufacturing test engineers, qualification engineers and management. The team was spread out between Orlando, Florida, Marlborough, Massachusetts and Toronto, Ontario. The team's size varied during the life of the program -- in fact, we still have about 20 engineers involved in various cost down projects.Looks like 2 years at perhaps average 100 engineers/year average, like 200 person/years at $100k each, probably around $20-40m contract value, which matches what Sony paid for NVIDIA's equivalent chip for the PS3:
Sony paid Nvidia about $30 million for designing the PS3's graphics chip, a fee that was paid out gradually as work on the processor was completed, Nvidia's chief financial officer Marv Burkett said.which however does not include the royalties on the chip, which can be a lot more. I remember reading that ATi got paid by Microsoft overall around $350m for the Xenos GPU IP.
Well the point there really is that we now have the chipset, we have CPUs, we have GPUs, and we can mix and match the appropriate level to each of those things to different customer requirements.as they have done already so with the north bridge chip; after all all those ever increasing transistor budgets given by process improvements have to be used up somehow, but I had assumed that on die cache and extra CPUs would easily absorb them.
The whole company, well the new company wants to give as much choice to its customers as possible, so if you want an Intel CPU with an ATI GPU then great, we'll be happy with that. If you want an AMD CPU with an NVIDIA GPU then we'll be very happy with that as well.The key may be that both AMD and ATi see the future as being not high end chips but low power chips for handhelds and laptops:
Yeah, we want to be able to package really high performance, low power CPU with a high performance low power chipset and a really high performance low power GPU for mobile, that's really ATI's hallmark.But to me ATi's hallmark is very high performance chips (but then even ATi's top end chips are way less power hungry than NVIDIA's).
Over several slides on the topic, Mark laid out the reasons he thinks that PC gaming is being harmed by Intel. He pointed the finger at Intel's integrated graphics chips. Integrated chipsets are often incapable of playing the latest (and certainly next-generation) games at any kind of graphics settings. Despite this, they are wildly popular amongst retailers. According to Mark's figures, 80% of laptops and 55% of desktops (note: he failed to cite a source for these figures) feature integrated graphics.are undermining the PC games industry. My summary of the story with Intel graphics chips is:
they are wildly popular amongst retailers. According to Mark's figures, 80% of laptops and 55% of desktopsIn other words it looks like that Mark Rein should not really be complaining that Intel is responding to a huge demand by paying customers for low end graphics chips (as I often say,
the [paying] customer is always right), but about the unwillingness of some game developers to address a very large market segment.
Unreal II was released in Feb/2003. The polycounts are in general, very high. In the opening level, polycounts ranged from 20K (thousand) polys to 85K at parts. The outdoor sections had more polys on average, about 45-60K. Indoors, in the training area, the average was 35-38K. There were no enemies in these levels, which allows for more level detail.and even more so for the upcoming Unreal 3 engine:
The ship that serves as your main base of operations has slightly more detail. Since the space is smaller, it's possible to cram more polys into each area. The count ranged from 40-100K, averaging about 60K.
In the first level with enemies and core gameplay, the count ranged from 15-75K. While in combat, the average was about 25-30K polygons, including enemies. Obviously, when designing heavy combat areas, your level of geometry density will have to fall. In the third level, portions of the level (exterior, beginning) reached as high as 150-160K polys drawn onscreen at once. For most of the core gameplay, however, the count was between 50-80K polygons.
Over 100 million triangles of source content contribute to the normal maps which light this outdoor scene.
Wireframe reveals memory-efficient content comprising under 500,000 triangles.
Only500,000 instead of 100 million, quite an interesting point of view.
owninga sizable chunk of it is usually well rewarded, as that gives significant benefits to anyone with a vested interested in the wide availability of that code.
ext4
file system even if it is in course of development. There have
been more discussions instead about the code for the
Reiser4 filesystem
has been
waiting for two years,
a contrast that
Hans Reiser himself has noticed.
udev
related facilities were added
even if they were entirely unproven, even if they were
evolving rapidly and were not stable, and even if the
devfs
alternative was already in the kernel and
widely used. A clear case for keeping udev
off
the main line of development, both kernel-space and
user-space, but it has not worked out quite like that.ms-sys
utility to most partitions as ms-sys -p
to
rebuild correctly the partition information in the boot block
thereof. Then I discovered that NTFS is among the very few
filesystems that puts vital information of its own in sector 0
of its filesystems. Fortunately I had a backup image of that
partition, and restoring the boot block from that fixed the
issue. Anyhow the ms-sys -p
seemed to fix
whatever issues those MS Windows based programs had with
partition descriptors.cfq
elevator for Linux has got
time slices and priorities for IO
and the priorities can be set
with the ionice
command.
This makes the cfq
elevator even more
useful to preserve good interactive response
without much cost.
ionice
I have been able to play
Linux based big games like
UT2004
and
Doom 3
fairly well thanks to my usual
modified kernel settings
and even with some bulk uploads (sharing my collection of
GNU/Linux liveCD and installer ISO images) and downloads going
on, thanks to my
traffic shaping script.
Play is less snappy but quite reasonable, and the main
effect is that the copy rate goes down from 50MiB/s to
something like 40MiB/s.
only1GiB and UT2004 grows to 500MiB... The processes I have active include some instances of Konqueror between 90MiB and 180MiB Konqueror, 100MiB Kate, 170MiB Firefox, and one of the smallest is XEmacs at 33MiB. I think that some these sizes are amazing. For comparison Tribes 2 only take 150MiB, which is smaller than Firefox or a heavily used instance of Konqueror.
worksI usually try to use software and configuration options that I think most developers and users adopt, because the others don't get tested. Now that most Linux kernel developers are well paid and use top range PCs, I have switched to using Linux kernels compiled for multiple CPUs and with preemption. The reason here is that Intel Core Duo and AMD Athlon 64 X2 based PCs are becoming ever more popular among those who can afford them, and in particular those who do distributions tend to have them because they make building binaries a fair bit faster.
voluntaryvariant only. Seems to have become more reliable.
ext3
filesystem to cope efficiently with filesystems larger than
8TiB and files larger than 4TiB, which involves extending and
redesigning the on-disk file system metadata, in particular to
extend block numbers to 48 bits from 31 bits.
ext4
,
which to me looks a bit like
a job security scheme
for the ext3
developers, as otherwise, if it was
determined to be a completed, done job, as Linus thinks
ext3
is:
A stable filesystem that is used by thousands and thousands of people and that isn't actually developed outside of just maintaining it IS A REALLY GOOD THING TO HAVE.they would have somehow to find something else to do. Except that if one understands the context there is also a corporate agenda, designed to benefit a specific and very important company.
ext4
file system is that it is unnecessary: all the improvements in
it are for large system support mostly for enterpriselevel customers, and those needs could be well served with other well established, well tested file systems, like JFS, XFS, or Reiser4 (which has been out for a couple of years already); of these my favourite is JFS, because it scales well both up and down, is very well tested, and has some unique and important advantages over XFS (which however scales better for really huge filesystems).
ext4
when
there are 55 bit extent based JFS, or 44 bit (63 bit on 64 bit
CPUs) extent based XFS, and they have been around for many
years, and are already widely used by those corporate
customers that would be targeted by ext4
?
ext3
currently,
which is starting to cause problems, as it
restricts the whole system to its own limits.
ext3
:
ext3
.
RedHat evidently believes that the latter course is best for
them, to continue to support a single file system type, but
one that is derived from ext3
and backwards
compatible:
It has been noted, repeatedly, that users very much like to be able to get new features into their filesystems without having to backup and restore the whole thing.so that in the next or next but one version of RHEL you can just put it in, and any existing 43 bit
ext3
filesystems continues to be usable, but any new files added
will be using the new 60 bit addresses and extents.
ext4
plans involves mostly RedHat developers and
those from Lustre who do a RHEL cluster filesystem based on a
modified ext3
(and are probably dying to be
bought out by RedHat like Sistina was) which already includes
some of the proposed ext4
changes.