Wednesday July 20, 2005 | Richard McDougall's Weblog Commentary from Race Control |
|
Free books at print.google.com I notice that many books are now available at print.google.com, including Solaris Internals.
[ T: OpenSolaris Solaris ] ( Jul 20 2005, 05:13:57 PM PDT ) Permalink Comments [3]
New look for Solaris Internals Website Well, one thing that having a blog with any significant technical content forces you to do is understand cascading style sheets. As a result, I've also given Solaris Internals the css makeover with our OpenSolaris theme. I found a picture that my good friend Bill Walker took of our two cars parked together in the Grand Canyon, and included that too.
Technorati Tag: OpenSolaris Technorati Tag: Solaris ( Jul 15 2005, 02:53:10 PM PDT ) Permalink Comments [1]
Performance Improvements for the File System Cache in Solaris 10 One of the major improvements in Solaris 10 was the improvement of the file system cache. Here is a quick summary of the perf changes that I grabbed recently using Filebench. The file system caching mechanism was overhauled to eliminate the majority of the MMU overhead associated with the page cache. The new segkpm facility providesfast mappings for physical pages within the kernel's address space. It is used by the file systems to provide a virtual addres that can be used to copy data to and from the user's address space for file system I/O. Since the available virtual address range in a 64 bit kernel is always larger than physical memory size, the entire physical memory can be mapped into the kernel. This eliminates the need to have to map/unmap pages everytime they are accessed via segmap, significantly reducing code path and the need for TLB shoot downs. In addition, segkpm can use large TLB mappings to minimize TLB miss overhead. Some quick measurements on Solaris 8 and 10 show the code path reduction. There are three important cases:
Measurements show that the most significant gain is a reduction of CPU per system call when a file is in memory (fits in the page cache), and is larger than segmap (which is 12% of physmem on SPARC, and 64MB on x64). Importantly, this is the most common case I've seen with real applications, too.
The throughput gains for a CPU constrained system are shown here:
With Solaris 10 you should expect significant improvements for applications which are I/O intensive into the file system cache. The actual improvement will vary, and will be greater on systems with higher CPU counts. You should also expect to see the cross call count drop (see xcal in mpstat), and a significantly reduced amount of system time.
Technorati Tag: OpenSolaris Technorati Tag: Solaris ( Jul 12 2005, 12:42:51 PM PDT ) Permalink Comments [3]
I just noticed these little devices at Fry's: The Terrastation
While the target market is no doubt CIFS/Windows, it does claim to support NFS (Appletalk and FTP, too). It has 4 x 250GB drives in a RAID configuration, and gigabit ethernet as the primary transport.
Looks pretty cool on the surface, I wonder if it has a decent NFS implementation? ( Jul 11 2005, 04:38:17 PM PDT ) Permalink Comments [6]
Solaris Internals: 2nd Edition! It's no secret that we hope to get an updated Solaris Internals book out. Jim and I have had this AI on our desk for a while. The good news is that it's been making quite a bit of progress of late! The idea is to update the existing book from Solaris 7 to Solaris 10, highly leveraging OpenSolaris, DTrace and mdb. There's a lot to add, given the onslaught of development: substantially revised virtual memory, a new file system interface, a new threads model, zones, ZFS, Least privilege, SMF and the list goes on. We scoped adding all of this, and we'd have a 2000+ page book when we're done. What we've decided to do is break up the work into smaller deliverable chunks, and deliver it in parts. Yes, we're taking the Knuth approach: Solaris 10 Internals will have more than one volume. We're splitting some of the new material and most of the performance discussion out into the subsequent volume. We're enlisting a few helpers for the subsequent volume, to make it more of a community effort. So that you can keep the pressure on us, I thought I'd share where we are with the current volume. Our target is to be done with this volume in the next couple of months.
Technorati Tag: OpenSolaris Technorati Tag: Solaris Technorati Tag: DTrace ( Jul 08 2005, 05:45:47 PM PDT ) Permalink Comments [11]
Tracing the Solaris 10 File System Interface Here's a quick script to trace activity though the central file system interface. Until there is a general file system provider, this script should serve as a basic framework help construct other file system tracing scripts.
# ./voptrace.d /tmp Event Device Path RW Size Offset fop_putpage - /tmp//filebench/bin/i386/fastsu - 4096 4096 fop_inactive - /tmp//filebench/bin/i386/fastsu - 0 0 fop_putpage - /tmp//filebench/xanadu/WEB-INF/lib/classes12.jar - 4096 204800 fop_inactive - /tmp//filebench/xanadu/WEB-INF/lib/classes12.jar - 0 0 fop_putpage - /tmp/filebench1.63_s10_x86_sparc_pkg.tar.Z - 4096 7655424 fop_inactive - /tmp/filebench1.63_s10_x86_sparc_pkg.tar.Z - 0 0 fop_putpage - /tmp//filebench/xanadu/WEB-INF/lib/classes12.jar - 4096 782336 fop_inactive - /tmp//filebench/xanadu/WEB-INF/lib/classes12.jar - 0 0 fop_putpage - /tmp//filebench/bin/amd64/filebench - 4096 36864
The source is below:
#!/usr/sbin/dtrace -s
/*
* Trace the vnode interface
*
* USAGE: voptrace.d [/all | /mountname ]
*
* Author: Richard McDougall
*
* 7/8/2005
*/
#pragma D option quiet
:::BEGIN
{
printf("%-15s %-10s %51s %2s %8s %8s\n",
"Event", "Device", "Path", "RW", "Size", "Offset");
self->trace = 0;
self->path = "";
}
::fop_*:entry
/self->trace == 0/
{
/* Get vp: fop_open has a pointer to vp */
self->vpp = (vnode_t **)arg0;
self->vp = (vnode_t *)arg0;
self->vp = probefunc == "fop_open" ? (vnode_t *)*self->vpp : self->vp;
/* And the containing vfs */
self->vfsp = self->vp ? self->vp->v_vfsp : 0;
/* And the paths for the vp and containing vfs */
self->vfsvp = self->vfsp ? (struct vnode *)((vfs_t *)self->vfsp)->vfs_vnodecovered : 0;
self->vfspath = self->vfsvp ? stringof(self->vfsvp->v_path) : "unknown";
/* Check if we should trace the root fs */
($1 == "/all" ||
($1 == "/" && self->vfsp && \
(self->vfsp == `rootvfs))) ? self->trace = 1 : self->trace;
/* Check if we should trace the fs */
($1 == "/all" || (self->vfspath == $1)) ? self->trace = 1 : self->trace;
}
/*
* Trace the entry point to each fop
*
*/
::fop_*:entry
/self->trace/
{
self->path = (self->vp != NULL && self->vp->v_path) ? stringof(self->vp->v_path) : "unknown";
self->len = 0;
self->off = 0;
/* Some fops has the len in arg2 */
(probefunc == "fop_getpage" || \
probefunc == "fop_putpage" || \
probefunc == "fop_none") ? self->len = arg2 : 1;
/* Some fops has the len in arg3 */
(probefunc == "fop_pageio" || \
probefunc == "fop_none") ? self->len = arg3 : 1;
/* Some fops has the len in arg4 */
(probefunc == "fop_addmap" || \
probefunc == "fop_map" || \
probefunc == "fop_delmap") ? self->len = arg4 : 1;
/* Some fops has the offset in arg1 */
(probefunc == "fop_addmap" || \
probefunc == "fop_map" || \
probefunc == "fop_getpage" || \
probefunc == "fop_putpage" || \
probefunc == "fop_seek" || \
probefunc == "fop_delmap") ? self->off = arg1 : 1;
/* Some fops has the offset in arg3 */
(probefunc == "fop_close" || \
probefunc == "fop_pageio") ? self->off = arg3 : 1;
/* Some fops has the offset in arg4 */
probefunc == "fop_frlock" ? self->off = arg4 : 1;
/* Some fops has the pathname in arg1 */
self->path = (probefunc == "fop_create" || \
probefunc == "fop_mkdir" || \
probefunc == "fop_rmdir" || \
probefunc == "fop_remove" || \
probefunc == "fop_lookup") ?
strjoin(self->path, strjoin("/", stringof(arg1))) : self->path;
printf("%-15s %-10s %51s %2s %8d %8d\n",
probefunc,
"-", self->path, "-", self->len, self->off);
self->type = probefunc;
}
::fop_*:return
/self->trace == 1/
{
self->trace = 0;
}
/* Capture any I/O within this fop */
io:::start
/self->trace/
{
printf("%-15s %-10s %51s %2s %8d %8u\n",
self->type, args[1]->dev_statname,
self->path, args[0]->b_flags & B_READ ? "R" : "W",
args[0]->b_bcount, args[0]->b_blkno);
}
Technorati Tag: OpenSolaris Technorati Tag: Solaris Technorati Tag: DTrace ( Jul 08 2005, 04:05:55 PM PDT ) Permalink Comments [1]
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||