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.
mmap
(2) or sbrk
(2) allocation. Sure,
this requires swap space, if at all present, to be at least as
large as the amount of real memory one wants to make use of,
but that does not mean a big deal nowadays.
sabishape
script
for traffic control configuration, I have changed the default
uplink rate limit to
200kb/s from
220kbs. The reason is that I have done some experiments and on
a 288kbs ADSL uplink 200kb/s is what can be carried without
causing congestion. The effective bandwidth available for UDP
or TCP payload is around 23KiB/s
or around 185kbs/s.
ACK
packet delays, the reason
for limiting the downlink is to prevent queue buildup on the
incoming side of the DSLAMs (or whatever). The sustainable
highest downlink bandwidth is around 470kb/s on my line so I
limit it to around 440kb/s (ingress traffic shaping is a lot
less precise than egress shaping), or roughly 52KiB/s for
payloads.
0
.
In particular no memory allocation should be performed inside a
constructor; if the object has to be initialized with pointers
to some other objects, the other objects should be allocated by
the caller of the constructor, and passed to it as arguments. Or
else the constructor should just initialize all fields to some
neutral value and then proper setup should be done in a
set-upmethod.
object,
constructorand
destructor.
objectabove in its proper C++ sense, which is
memory area, just like in C. That in C++ terminology
objectmeans something very different from
class instance, and there is indeed no single word to signify
class instance, and that C++ is probably by far the single most popular object-oriented language has caused almost infinite confusion, and is very regrettable.
objectwas also unavoidable, as it is defined that way in C, and C++ was designed to have as much as possible of C compatibility, even including the terminology. That in C++ an object is a memory area is why this code is perfectly valid and has a well defined meaning:
class Complex { private: float r,i; public: Complex(const float r = 0.0f,const float i = 0.0f) : r(r), i(i) {} }; [ ... ] Complex(1,0) = Complex(0,1); [ ... ]
object. This means that two distinct objects can contain the same class instance, exactly in the same way that in C the objects called
i
and
j
both contain the same int
type
instance in this line:
static int i = 3, j = 3;So in this piece of code:
struct Coord { unsigned x,y; Coord (const unsigned x,const unsigned y) : x(x), y(y) {} }; Coord c1(512,384); Coord c2(512,384);the two objects may be (represented as) the 8 bytes at addresses
&c1
and &c2
, and both objects
contain the same instance of class Coord
, which may
be (represented as) the 64 bit sequence:
00000000 00000000 00000010 00000000 00000000 00000000 00000001 10000000As a side note, there are very few values in C or C++ that are not necessarily stored inside an object, and they are manifest constants, like
3
, or named manifest constants,
like enumeration type members, arrays and functions (that arrays
are named manifest constants in C and C++ is almost universally
unknown, and the nature of functions is almost as obscure).
aggregatetypes, the role of a constructor is to ensure that the class instance stored into an object is well defined. Nothing more nothing less.
constructoris a classic computer science term: properly speaking, all values, including class instances, are
atomicin the sense that they are not composed of parts. So the instances of this type:
struct Point { float x,y; };are not composed of two fields, they are just values, typically (represented as) a sequence of 8 bytes on most current computers (equivalently, an 8-digit base-256 number). A function that maps from multiple values into a single
aggregatevalues is called a
constructorand the C++ usage of the term is fairly consistent with the computer science usage, except that it conflates into it assignment. C also has constructors, for example in this line:
static Point p = { 1.0f, 1.0f };the constructor in the computer science sense is (more or less)
{ 1.0f, 1.0f }
and in the C++ sense
it is (more or less) = { 1.0f, 1.0f }
.
constructorin computer science, and it is when qualified as
type constructor: a type constructor is a function that maps from a set of types into a new type. For example in C
struct
and
*
(as in int *
) are type
constructors. In C and C++ and most other languages type
constructors do something more than just constructing a type,
they also define the constructor and the destructors.
destructorhas a completely different meaning in C++ than in computer science, and in C++ the use of that term is misleading because it suggests that it sort of does the opposite of a constructor.
destructorin computer science discourse are indeed those that do the opposite of what a constructor does, that is they map a value of an aggregate into a value of one the types used to construct it, so for example in this type definition
struct Point { float x,y; } p = { 1.0f, 2.0f };there are two destructor functions called
x
and
y
, which when applied to an object containing an
instance of the Point
type, as in p.x
(C and C++ use a special postfix syntax for destructor
functions), return one of the values used in constructing it
(I would have preferred the use of the term
deconstructorfor destructors though).
rvaluecontext, and to a constructor in a
lvaluecontext like
p.x = 0.0f
(which is really a shorthand
for p = Point(0.0f,p.y)
, that is the assignment of
a different class instance to the object called p
).
destructorin C++ is very misleading because it actually names what should probably be called
tear-down(or perhaps
terminator), because their role is not to undo the work of the constructor, because there is no way to un-construct a value, but to undo the set-up performed by any set-up method called after the class instance has been constructed. Which setup usually involves, if any, establishing relationships to other values (e.g. by allocating resources).
This strategy also makes more sense for Sony, because the price of Xbox 360 and PS3 is comparable to that of many low end PCs, and there is no question that Sony is trying to harm Microsoft's sales of OS licences as much as possible: low end PCs are ideal for Microsoft, because the OS licenses they sell are priced per-unit, not as a percentage of the sale price, so they make a lot more money when two US$400 PCs are sold than one US$800 PC is sold.
Which suggests that Sony will not only deliver GNU/Linux on PS3, but that will quite deliberately include something like OpenOffice.org or KOffice as every MS Windows or MS Office license sale that a PS3 displaces helps Sonyand it looks like that Sony have confirmed such strategy authoritatively:cut the air supplyof Microsoft.
Besides defending the PS3, Harrison took time to evangelise the device, which will launch worldwide this November. In particular he said the Linux-based operating system on the console's hard drive will have enough processing power and non-gaming functionalities to render traditional PCs -- most of which use a form of Microsoft's Windows OS -- moot in the home.
"We believe that the PS3 will be the place where our users play games, watch films, browse the Web, and use other (home) computer functions," said Harrison. "The PlayStation 3 is a computer. We do not need the PC."
template<typename R> struct Point3I: public R { public: Point3I(); Point3I(const float x,const float y,const float z); Point3I(const Point3I<R> &that); Point3I<R> &operator =(const Point3I<R> &that); float xGet() const; float yGet() const; float zGet() const; float xPut(const float x); float yPut(const float y); float zPut(const float z); Point3I<R> &sub(const Point3I<R> &that); float dot(const Point3I<R> &that) const; float norm2() const; };
struct Point3S { union { __m128 q; float v[4]; struct { float w,x,y,z; }; }; Point3S(register const __m128 q) : q(q) {} };
template<> inline Point3I<Point3S> &Point3I<Point3S>::sub ( register const Point3I<Point3S> &that ) { this->q = _mm_sub_ps(this->q,that.q); return *this; }
Point3I
is the template that
describes the API, Point3C
defines one
representation of the underlying type and the specialized
Point3I<Point3C>
methods define the
implementation of the API methods for that representation, and
similarly for the alternative implementation type,
Point3S
(for the SSE version of the
representation).
pileupshappen in first-person shooters or team-based sport games or racing games, but these are the exceptions rather than the rule, and often even entities in contact can have many independent properties.
virtual
destructors in C++, and when they are not appropriate.
My argument was that destructors should routinely/always be
virtual
, because there is no Java-like
final
in C++, so any class can always be derived
from.
virtual
destructors can be used to
indicate that a class should not be used for
derivation. I can see the point, but to me it is a bit
dangerous: what if the class is used that way?
virtual
methods in a class with a
non-virtual
destructor, as if the latter meant
final
, but relying on this is yet another wistful
attempt to turn C++ into something else.Test | 4KiBsync |
8KiBsync |
4KiBasync |
8KiBasync |
---|---|---|---|---|
CIFS tree | 2m01s 1.8MiB/s |
2m04s 1.7MiB/s |
n.a. | n.a. |
NFS tree | 2m09s 1.7MiB/s |
2m06s 1.7MiB/s |
1m31s 2.5MiB/s |
1m27s 2.6MiB/s |
CIFS file | 50s 4.5MiB/s |
38s 5.9MiB/s |
n.a. | n.a. |
NFS file | 1m01s 3.7MiB/s |
59s 3.8MiB/s |
37s 5.9MiB/s |
33s 6.8MiB/s |
.tar
, which shrank them to aroud
78MiB, and the source archive was in a memory
resident tmpfs
filesystem.sync always
and
strict sync
disabled, so writing
was not synchronous on the server.cifs
driver does support the
async
option for mounts. When I tried
that the times were the same as for the
sync
option, while for NFS they were
very different.Generally, you should find that Samba performs similarly to ftp at raw transfer speed. It should perform quite a bit faster than NFS, although this depends on your system.However as it then say things vary with time and context and usage. So I decided to do yet another file system test for SMB/CIFS and NFS. The test is smaller scale than my usual ones, in part because part of the test is about the file of network access when the files accessed are wholly cached in RAM on the server.
tar
repacking.
tar
archive, uncompressed). The tests have been quick and minimal
being just for reading, not writing or searching or deleting.
Test | 4KiB uncached |
8KiB uncached |
4KiB cached |
8KiB cached |
---|---|---|---|---|
CIFS tree | 1m18s 2.9MiB/s |
1m07s 3.3MiB/s |
1m05s 3.4MiB/s |
57s 3.9MiB/s |
NFS tree | 2m30s 1.5MiB/s |
3m03s 1.2MiB/s |
43s 5.2MiB/s |
42s 5.2MiB/s |
CIFS file | 46s 4.9MiB/s |
36s 6.2MiB/s |
43s 5.2MiB/s |
33s 6.8MiB/s |
NFS file | 1m04s 3.5MiB/s |
32s 7.0MiB/s |
25s 8.9MiB/s |
24s 9.3MiB/s |
atime
on the server and
noatime
on the client. I tried setting
atime
on the client too and times are
longer by not significantly.async
,
to be more comparable to stateful CIFS. I also
tried with sync
and even in these
read tests there was some difference.polymorphism(whatever that is) and unique ids, and that are nowhere like OO. There are also OO languages that do not have unique value ids or polymorphism. Unique ids tend to be a bad idea, and so-called
polymorphism, a term that covers confusingly different techniques, is often a good idea, but one that ia valuable to any style of programming.
The value of many optimisations depends on the static or dynamic context in which the relevant code is used, and there is one particular example of this that has long been mishandled by most languages, and that is inlining of functions.
hot spot, for example inside an often executed loop, can bring very large benefits with a small increase, or even a decrease in code size.
inline
, not function calls. Admittedly
function definitions whose calls may be designated as
inline
should be marked specially, so that the
compiler keep around that definition when an inline call is
found.
inlinable
to indicate that
they might be inlined, but only when the
call is marked as inline. For example:
inlinable void Vec3Add(float *const a,const float *const b) { a[0] += b[0], a[1] += b[1], a[2] += b[2]; } .... for (int i = 0; i < stripLength; i++) { inline Vec3Add(&strip[i][0],displacement); } ....There are similar inanities for example as to the expansion of
generics: for example usually manifest generics (for example
templates) usually are always expanded inline, but most often they can just be handled as closed or manifest generics (for example as if
inheritancewas involved).
final
keyword can be used on a
class or method definition to indicate that the entire class
or method deal with manifest typing, always; but it would be
more appropriate to allow such use before a specific use of
the class or the method (with suitable checks to ensure this
is not misused).
typelesstype systems).
containers, having open type systems. It also matters practically whether a closed or manifest type system has few or many types, because a closed type system with very many types may be more expediently handled as an open one. Some examples:
ls
is a program with a manifest and
very small type system.blessingPerl programs can have open type systems, but a Perl implementation has a closed type system.
As great as Gran Turismo HD looked, and as much as we were pleased to see and play it, it seemed like a strange offering for Sony to open its pre-E3 event with.But I don't think it is strange at all: Gran Turismo is after all the
signature gamefor Playstation just as Halo is for Xbox and Mario for Nintendo.
Is this going to work well for Gran Turismo?. For example the Cell's 6 or 7 SPEs seem meant to provide coarse parallelism for Gran Turismo, each handling one ot two cars, probably with one of them or the main CPU dealing with the scenery. This is possible because almost all the time in a racing game cars do not interact with each other, but almost only with the the scenery, and then with very little of it (terrain and lights).
From a distance all of the cars and environmental features looked really impressive, but up close it was difficult not to be distracted by the occasional jaggy and the textured liveries of the race cars that clearly weren't designed with anything like resolutions of 1920 x 1080p in mind.
The suicidal spectators on the Grand Canyon rally track also gave away the demo's roots, since their low poly models and PlayStation 2 textures appeared to have received very little PS3 love ahead of today's event.
Polyphony Digital is, of course, working on a Gran Turismo game for the PS3, but we'll be very surprised if the final product ends up looking anything like today's demo.Here my impression or perhaps hope is that perhaps the launch version of Gran Turismo, the one being developed, will have use the coarse partitioning afforded by the SPEs to have dynamically generated art assets, and in particular textures.
File system | Free space | Restore elapsed system rate |
fsck |
Repack elapsed system rate |
Find | Delete | Notes |
---|---|---|---|---|---|---|---|
Reiser4 4KiB | 2286MiB | 7m39s 1m01s 15.8MiB/s |
2m20s | 5m14s 1m16s 23.1MiB/s |
1m50s | 1m59s | umount : 6m20s |
JFS 4KiB | 2249MiB | 10m24s 46s 11.6MiB/s |
56s | 4m54s 41s 24.7MiB/s |
1m11s | 5m45s | umount : 1s |
tar
archive, but lazily by a dynamically
generated tar
archive fed via a pipe.
umount
times after most operations.
find
,
as it updates the accessed time of each inode, and it seems
that Reiser4 delays writing the modified inodes for a long
time, or until umount
, causing a flurry of widely
scattered writes during the latter. This probably also
accounts for the big difference in the elapsed time of the
test where all files get deleted.
/etc/fonts/local.conf
file for Fontconfig and in the /etc/X11/xorg.conf
file for the X11 server (or the equivalent file for the
X11 font server). For example I have something like this:
<dir>/usr/share/X11/fonts/misc</dir> <dir>/usr/share/X11/fonts/100dpi</dir> <dir>/usr/share/X11/fonts/75dpi</dir> <dir>/usr/local/share/fonts</dir> <dir>/usr/share/ghostscript/fonts</dir> <dir>/usr/share/X11/fonts/Type1</dir> <dir>/usr/share/X11/fonts/TrueType</dir>
FontPath "/usr/share/X11/fonts/misc" FontPath "/usr/share/X11/fonts/100dpi:unscaled" FontPath "/usr/share/X11/fonts/75dpi:unscaled" FontPath "/usr/local/share/fonts" FontPath "/usr/share/ghostscript/fonts" FontPath "/usr/share/X11/fonts/Type1" FontPath "/usr/share/X11/fonts/TrueType"
kwrapper
, or kfmclient
for
Konqueror.-dpi
argument to
the X server to set it explicitly to exactly 100 or 75.type1
font module is not
specified in /etc/X11/xorg.conf
and
the freetype
one is.0
as the
DPI if they are outline or with the actual value of
the screen's DPI if they are bitmap.fonts.alias
files to redefine
existing bitmap font pixel sizes for different DPIs if
your screen DPI is not very close to 100 or 75, for
example
like this one for 85DPI.hinting
to
true
.autohint
to
false
;antialias
to
false
;autohint
to
true
;antialias
to
true
;rgba
to none
(unless you are not bothered by fringing);subjectAltName
field of the key,
which can be done using self-signed keys, or by finding a
flexible certification authority (if any exist).
subjectAltName
) or they are all known at key
generation time, and it it acceptable for all of them to have
the same SSL key, then it is possible to have name based sites
supporting SSL connections, by specifying that key for all of
them, statically.We find that GenMS, an Appel-style generational collector using a mark-sweep mature space, provides runtime performance that matches that provided by the best explicit memory manager when given five times as much memory, occasionally outperforming it by up to 9%.The comparison is between a garbage collector and a memory manager that just
With three times as much memory, its performance lags so that it performs an average of 17% slower. Garbage collection performance degrades further at smaller heap sizes, ultimately run- ning an average of 70% slower.
Explicit memory management also exhibits better memory utilization and page-level locality, generally requiring half or fewer pages to run with the same number of page faults and running orders-of-magnitude faster when physical memory is scarce
knowswhen to reclaim a block, without doing any liveness tracing (because that has been done in a prepass). Thus the difference in performance can depend upin two distinct causes: tracing, and delayed deallocation.
lm_sensors
to monitor fan speed and temperature I have been able to tune
the speed of the CPU fan from
2700RPM
to 2000RPM and that of the case fan from 2200RPM to 1500RPM,
at which they are nearly inaudible and still keep my system
cool, with CPU temperatures between 35-40C. (I have a
90nm Athlon 64 3000+
which draws only51W at full speed, so thats sort of easier than with most other CPUs).
pessimizedto run decently only on much more expensive PCs than the Xbox, which of course tallies with releasing it on PC much later than on Xbox. Of course even Halo 2 has not been released on PC yet.
true
as fonts that are
not well hinted look too bad without, and set
target="pattern"
and
binding="weak"
.false
, assuming that one has the
FreeType2 library with the manual hinting code
enabled.match
element the test
elements are and'ed, one can obtain most of
the effect of or'ing by specifying the
attribute qual="any"
on the
test
tag. This will allow to set its
contents to multiple value, for example as:
<match target="pattern"> <test name="antialias" compare="eq"><bool>true</bool></test> <test qual="any" name="family"> <!-- Microsoft web fonts --> <string>Andale Mono</string> <string>Arial Black</string> <string>Arial</string> <string>Comic Sans MS</string> <string>Courier New</string> <string>Georgia</string> <string>Impact</string> <string>Times New Roman</string> <string>Trebuchet MS</string> <string>Verdana</string> <string>Webdings</string> </test> <edit name="autohint" binding="weak" mode="assign_replace"><bool>false</bool></edit> <edit name="antialias" binding="weak" mode="assign_replace"><bool>false</bool></edit> </match>which avoids a lot of duplication (still necessary if one want to or a test on two different properties, not on two different values of the same property).
false
for Verdana, one cannot use the
font query Verdana-10:antialias=true
to
reversethat.
/etc/fonts/
, and
they are available
as samples. Despite the warning I felt it was
necessary to modify the fonts.conf
file.
anti-aliasingor the raster has to be manually adjusted (a process called
hinting).
fsck
programs
are, in particular the ReiserFS one that by default not only
prints lots of stuff, but also interacts with the user:
reiserfsck 3.6.19 (2003 www.namesys.com) ************************************************************* ** If you are using the latest reiserfsprogs and it fails ** ** please email bug reports to reiserfs-list@namesys.com, ** ** providing as much information as possible -- your ** ** hardware, kernel, patches, settings, all reiserfsck ** ** messages (including version), the reiserfsck logfile, ** ** check the syslog file for any related information. ** ** If you would like advice on using this program, support ** ** is available for $25 at www.namesys.com/support.html. ** ************************************************************* Will check consistency of the filesystem on /dev/hdi11 and will fix what can be fixed without --rebuild-tree Will put log info to 'stdout' Do you want to run this program?[N/Yes] (note need to type Yes if you do):Yes ########### reiserfsck --fix-fixable started at Mon Apr 24 22:44:39 2006 ########### Replaying journal.. Reiserfs journal '/dev/hdi11' in blocks [18..8211]: 0 transactions replayed Checking internal tree..finished Comparing bitmaps..finished Checking Semantic tree: finished No corruptions found There are on the filesystem: Leaves 20104 Internal nodes 128 Directories 5551 Other files 79784 Data block pointers 17168285 (53185 of them are zero) Safe links 0 ########### reiserfsck finished at Mon Apr 24 22:46:37 2006 ###########This made me wonder when did people start to ignore the principles of the UNIX pragmatics style, and well, a good candidate is the very first
fsck
program:
/dev/rxx0a File System: / ** Checking /dev/rxx0a ** Phase 1 - Check Blocks and Sizes ** Phase 2 - Check Pathnames ** Phase 3 - Check Connectivity ** Phase 4 - Check Reference Counts ** Phase 5 - Check Free List 236 files 1881 blocks xxxxx freeand this is taken from the 2.9BSD documentation, that is around 1980. Pretty sad. The original
fsck
was from System III, which indeed
contained a whole lot of the non-UNIX practices (like
using .d
as a directory suffix in
/etc
.fsck
timesfsck
times, and
those
previously recorded:
File system | Small filesystem
6.7GiB, 420k inodes |
Larger filesystem
65.3GiB, 85k inodes |
---|---|---|
ext3 4KiB |
4m31s | 3m25s |
JFS 4KiB | 2m14s | 35s |
XFS 4KiB | n.a. | 33s |
ReiserFS 4KiB | 2m34s (?) | 2m06s |
File system | Free space | Restore elapsed system rate |
fsck |
Repack elapsed system rate |
Find | Delete | Notes |
---|---|---|---|---|---|---|---|
ext3 4KiB |
18.1GiB | 53m06s 5m01s 20.9MiB/s |
3m25s | 26m06s 2m07s 42.6MiB/s |
30s | 3m36s | -m 0 -N 450000 |
JFS 4KiB | 18.4GiB | 52m07s 4m00s 21.4MiB/s |
35s | 28m05s 2m20s 39.6MiB/s |
40s | 2m19s | |
XFS 4KiB | 18.4GiB | 48m12s 4m10s 23.1MiB/s |
33s | 27m52s 2m33s 39.9MiB/s |
30s | 1m01s | xfs_check + xfs_repair |
ReiserFS 4KiB | 18.4GiB | 57m57s 6m17s 19.2MiB/s |
2m06s | 31m50s 2m45s 34.9MiB/s |
1m01s | 1m59s | -o notail |
pdflush
parameters,
and a filesystem read-ahead of 32.-m 0
when
building the ext3
filesystem to remove
the minimum reserved space and thus see the full size
of free space.tar
image of the filesystem to be
restored on another quiescent disc. I would have
compressed it too to minimize the read traffic,
but most files in that filesystem are already
compressed.
fsck
are those for a
full check, not for a cursory one.The problem is indeed intrinsic: as the filesystem nears 100% usage the chances of finding contiguous or nearby free blocks when writing or extending a file becomes a lot smaller.
If the anti-fragmentation effects of a 5% reserve are dubious, it is only because 5% is way too low. It should be at least 10%, and ideally 20-30%.On reflection this is almost right, but not quite, because while it is true that the greater the percentage of free blocks the greater the chances of finding contiguous free blocks, beyond a point that does not matter much.
He said, "When you are dealing with rootkits and some advanced spyware programs, the only solution is to rebuild from scratch. In some cases, there really is no way to recover without nuking the systems from orbit."This not uniquely a MS Windows affliction; GNU/Linux systems should also be reinstalled when a rootkit has been detected on them. It may be conceivably possible to effect a cleanup, if one knows very well the whole subject, but then it would also be possible with MS Windows (even if probably it would be easier on GNU/Linux). Still the commonly given advice for both is to reinstall.
In other words, Windows users may have no choice but to wipe their systems down to the bare-metal and then reinstall the operating system and applications.
Thurrott has this to say: "Anyway, the reality of glass windows is that they stink ... But the visual difference between the topmost window (that is, the window with which you are currently interacting, or what we might describe as the window with focus) and any other windows (i.e. those windows that are visually located "under" the topmost window) is subtle at best. More to the point, you can't tell topmost windows from other windows at all. And don't pretend you can."Well thats funny because the two most exciting projects in Linux GUIs, XGL and AIGLX, are used to do amazing things like ahem, glass windows (and even worse, ahem, wobbly windows).
I don't know about you, but that's got me all excited about Aero.
I quote: "Since the euphoria of PDC 2003 [Microsoft Professional Developers Conference 2003], Microsoft's handling of Windows Vista has been abysmal.There is more than one reason why mentioning self criticism as to poor project management and software engineering like this to attack Microsoft is distasteful:
Promises have been made and dismissed, again and again. Features have come and gone. Heck, the entire project was literally restarted from scratch after it became obvious that the initial code base was a teetering, technological house of cards. Windows Vista, in other words, has been an utter disaster. And it's not even out yet."
And people thought I was hard on Vista!
'/dev/hdc1' to '/dev/hdj1': 321300+0 records in 321300+0 records out 10528358400 bytes (11 GB) copied, 203.717 seconds, 51.7 MB/s real 3m23.789s user 0m0.150s sys 0m33.350s '/dev/hdc3' to '/dev/hdj3': 192780+0 records in 192780+0 records out 6317015040 bytes (6.3 GB) copied, 113.145 seconds, 55.8 MB/s real 1m53.206s user 0m0.130s sys 0m20.730s '/dev/hdc6' to '/dev/hdj6': 1463420+1 records in 1463420+1 records out 47953350144 bytes (48 GB) copied, 1071.17 seconds, 44.8 MB/s real 17m51.207s user 0m0.760s sys 3m49.660s '/dev/hdc7' to '/dev/hdj7': 2745607+1 records in 2745607+1 records out 89968080384 bytes (90 GB) copied, 2489.91 seconds, 36.1 MB/s real 41m29.980s user 0m1.500s sys 5m11.500sIndeed the cheap cost of disc storage means that dangerous and slow things like in-place defragmentation of filesystems are no longer a good idea, at least for small to moderate size filesystem sizes, the sort that one has on a PC or a SOHO server.
umount /dev/hdc1 dd bs=4k if=/dev/hdc1 of=/dev/hdj1 jfs_fsck /dev/hdj1 mount -o ro /dev/hdj1 /fs/hdj1 jfs_mkfs /dev/hdc1 mount -o rw /dev/hdc1 /fs/hdc1 : "One could use 'pax' or whatever else here" (cd /fs/hdj1 && tar -cS -b8 --one -f - .) \ | (cd /fs/hdc1 && tar -xS -b8 -p -f -) umount /dev/hdj1The root filesystem can be done this way too, either by using a liveCD, or by doing the image copy, rebooting setting the root to the copy, doing the tree copy, and then rebooting into the newly reconstructed filesystem.
fsck
.
ext3
, ReiserFS, JFS and XFS.
The sequence of 11 tasks (from creation of FS to umounting FS) was run as a Bash script which was completed three times (the average is reported).as it is apparent that there is no unmounting between operation, so the cached blocks of one test stay cached for the next test.
No Namecombined USB2/FW PCI card, because my existing Adaptec one has a well know issue with USB2: it uses a NEC chipset that apparently only uses one PCI bus cycle in two. Both cards have internal USB2 and FW connectors and a Berg (floppy style) power connector so that they can act as powered hubs for devices needing more power than the PCI bus can supply.
No NameUSB2/FW PCI card, USB2 chip VIA VT6214L and FW chip VIA NT VT6306.
No NameULT31311 external USB2/FW enclosure for 3.5" hard drives, USB2 and FW to ATA chip Prolific PL3057.
No Name(probably Triumph) TT-346U2F external USB2/FW enclosure for 5.25" and 3.5" disc and CD/DVD drives, USB2 to ATA chip ALi M5621 and FW to ATA chip Oxford Semiconductor OXFW911.
Product | Protocol | Card chip | Box chip | Device | Sequential read speed |
---|---|---|---|---|---|
AUA-3211 | USB2 | uPD720100A | M5621 | HD 250GB | not working |
AUA-3211 | USB2 | uPD720100A | PL3057 | HD 80GB | 18.0MB/s |
No Name |
USB2 | VT6214L | M5621 | HD 250GB | 2.6MB/s |
No Name |
USB2 | VT6214L | PL3057 | HD 80GB | 33.4MB/s |
AUA-3211 | FW | TSB12LV26 | OXFW911 | HD 250GB | 26.7MB/s |
AUA-3211 | FW | TSB12LV26 | PL3057 | HD 80GB | not working |
No Name |
FW | VT6306 | OXFW911 | HD 250GB | 15.7MB/s |
No Name |
FW | VT6306 | PL3057 | HD 80GB | not working |
On a platform such as Linux Solid uses HAL to talk to devices, but on other systems such as Solaris, BSD, Max OS X, and Windows, Solid will use a HAL equivalent for the specific system.
Because HAL relies on Linux-specific functionality in the kernel, it is restricted to Linux. The kernel provides hardware information with Sysfs, which is in turn used by udev, which is in turn used by D-BUS, which is in turn used by HAL.Now I like modular software, but this is getting a bit too modular; and things like
sysfs
and
udev
already look like masses of poorly designed
and documented hacks to me.tar
of the filesystem)
with these results:
File system | Repack elapsed system |
Average transfer rate |
---|---|---|
used JFS | 13m03s 30s | 9.0MiB/s |
new JFS | 04m53s 27s | 24.0MiB/s |
ext3
,
and is not much worse than the 2.1 times slower previously
measured after upgrading just some parts like
KDE.