The dot in ... --- ...

Chris Gerhard's Weblog

Main | Next page »

20090630 Tuesday June 30, 2009

Using dtrace to track down memory leaks

I've been working with a customer to try and find a memory “leak” in their application. Many things have been tried, libumem, and the mdb ::findleaks command all with no success.

So I was, as I am sure others before me have, pondering if you could use dtrace to do this. Well I think you can. I have a script that puts probes into malloc et al and counts how often they are called by this thread and when they are freed often free is called.

Then in the entry probe of the target application note away how many calls there have been to the allocators and how many to free and with a bit of care realloc. Then in the return probe compare the number of calls to allocate and free with the saved values and aggregate the results. The principle is that you find the routines that are resulting in allocations that they don't clear up. This should give you a list of functions that are possible leakers which you can then investigate1.

Using the same technique I for getting dtrace to “follow fork” that I described here I ran this up on diskomizer, a program that I understand well and I'm reasonably sure does not have systemic memory leaks. The dtrace script reports three sets of results.

  1. A count of how many times each routine and it's descendents have called a memory allocator.

  2. A count of how many times each routine and it's descendents have called free or realloc with a non NULL pointer as the first argument.

  3. The difference between the two numbers above.

Then with a little bit of nawk to remove all the functions for which the counts are zero gives:

# /usr/sbin/dtrace -Z -wD TARGET_OBJ=diskomizer2 -o /tmp/out-us \
	-s /tmp/followfork.d \
	-Cs /tmp/allocated.d -c \
         "/opt/SUNWstc-diskomizer/bin/sparcv9/diskomizer -f /devs -f background \
          -o background=0 -o SECONDS_TO_RUN=1800"
dtrace: failed to compile script /tmp/allocated.d: line 20: failed to create entry probe for 'realloc': No such process
dtrace: buffer size lowered to 25m
dtrace: buffer size lowered to 25m
dtrace: buffer size lowered to 25m
dtrace: buffer size lowered to 25m
 
# nawk '$1 != 0 { print  $0 }' < /tmp/out.3081
allocations
           1 diskomizer`do_dev_control
           1 diskomizer`set_dev_state
           1 diskomizer`set_state
           3 diskomizer`report_exit_reason
           6 diskomizer`alloc_time_str
           6 diskomizer`alloc_time_str_fmt
           6 diskomizer`update_aio_read_stats
           7 diskomizer`cancel_all_io
           9 diskomizer`update_aio_write_stats
          13 diskomizer`cleanup
          15 diskomizer`update_aio_time_stats
          15 diskomizer`update_time_stats
          80 diskomizer`my_calloc
         240 diskomizer`init_read
         318 diskomizer`do_restart_stopped_devices
         318 diskomizer`start_io
         449 diskomizer`handle_write
         606 diskomizer`do_new_write
        2125 diskomizer`handle_read_then_write
        2561 diskomizer`init_buf
        2561 diskomizer`set_io_len
       58491 diskomizer`handle_read
       66255 diskomizer`handle_write_then_read
      124888 diskomizer`init_read_buf
      124897 diskomizer`do_new_read
      127460 diskomizer`expect_signal
freecount
           1 diskomizer`expect_signal
           3 diskomizer`report_exit_reason
           4 diskomizer`close_and_free_paths
           6 diskomizer`update_aio_read_stats
           9 diskomizer`update_aio_write_stats
          11 diskomizer`cancel_all_io
          15 diskomizer`update_aio_time_stats
          15 diskomizer`update_time_stats
          17 diskomizer`cleanup
         160 diskomizer`init_read
         318 diskomizer`do_restart_stopped_devices
         318 diskomizer`start_io
         442 diskomizer`handle_write
         599 diskomizer`do_new_write
        2125 diskomizer`handle_read_then_write
        2560 diskomizer`init_buf
        2560 diskomizer`set_io_len
       58491 diskomizer`handle_read
       66246 diskomizer`handle_write_then_read
      124888 diskomizer`do_new_read
      124888 diskomizer`init_read_buf
      127448 diskomizer`cancel_expected_signal
mismatch_count
     -127448 diskomizer`cancel_expected_signal
          -4 diskomizer`cancel_all_io
          -4 diskomizer`cleanup
          -4 diskomizer`close_and_free_paths
           1 diskomizer`do_dev_control
           1 diskomizer`init_buf
           1 diskomizer`set_dev_state
           1 diskomizer`set_io_len
           1 diskomizer`set_state
           6 diskomizer`alloc_time_str
           6 diskomizer`alloc_time_str_fmt
           7 diskomizer`do_new_write
           7 diskomizer`handle_write
           9 diskomizer`do_new_read
           9 diskomizer`handle_write_then_read
          80 diskomizer`init_read
          80 diskomizer`my_calloc
      127459 diskomizer`expect_signal

#

From the above you can see that there are two functions that create and free the majority of the allocations and the allocations almost match each other, which is expected as they are effectively constructor and destructor for each other. The small mismatch is not unexpected in this context.

However it is the vast number of functions that are not listed at all as they and their children make no calls to the memory allocator or have exactly matching allocation and free that are important here. Those are the functions that we have just ruled out.

From here it is easy now to drill down on the functions that are interesting you, ie the ones where there are unbalanced allocations.


I've uploaded the files allocated.d and followfork.d so you can see the details. If you find it useful then let me know.

1Unfortunately the list is longer than you want as on SPARC it includes any functions that don't have their own stack frame due to the way dtrace calculates ustackdepth, which the script makes use of.

2The script only probes particular objects, in this case the main diskomizer binary, but you can limit it to a particular library or even a particular set of entry points based on name if you edit the script.


( Jun 30 2009, 12:14:33 PM BST ) Permalink Trackback

   

20090627 Saturday June 27, 2009

Follow fork for dtrace pid provider?

There is a ongoing request to have follow fork functionality for the dtrace pid provider but so far no one has stood upto the plate for that RFE. In the mean time my best workaround for this is this:

cjg@brompton:~/lang/d$ cat followfork.d
proc:::start
/ppid == $target/
{
	stop();
	printf("fork %d\n", pid);
	system("dtrace -qs child.d -p %d", pid);
}
cjg@brompton:~/lang/d$ cat child.d
pid$target::malloc:entry
{
	printf("%d %s:%s %d\n", pid, probefunc, probename, ustackdepth)
}
cjg@brompton:~/lang/d$ pfexec /usr/sbin/dtrace -qws followfork.d -s child.d -p 26758
26758 malloc:entry 22
26758 malloc:entry 15
26758 malloc:entry 18
26758 malloc:entry 18
26758 malloc:entry 18
fork 27548
27548 malloc:entry 7
27548 malloc:entry 7
27548 malloc:entry 18
27548 malloc:entry 16
27548 malloc:entry 18

Clearly you can have the child script do what ever you wish.

Better solutions are welcome!


( Jun 27 2009, 01:25:52 PM BST ) Permalink Trackback

   

20090625 Thursday June 25, 2009

Why a fixie

Why a fixie1?

A few people have asked me this so here are the reasons for a fixie:

My additional reasons were:

Now having one I agree they are fun more fun than I ever expected and even though I don't think I have mastered it yet I do understand about it being in touch with the bike. Going up hill there is nowhere to hide I don't know if it is making me stronger but it feels like it.

It certainly has improved my ability to "spin".

1Obvioulsy the answer that you can never have too many bikes I assume will not wash. Indeed I have that problem at home since the house rule is that I can only have three bikes. The brompton, luckily, does not count leaving some others. However since under UK law a bike that has no pedals is not a bike I only have three sets of pedals so I'm o.k.


( Jun 25 2009, 10:02:38 PM BST ) Permalink Trackback

   

20090623 Tuesday June 23, 2009

500 fixie miles

I've now commuted 500 miles on my fixie. Riding with a single gear and no freewheel has proved to be more fun than I expected. I've managed to stay on the the thing despite it having a pretty good attempt to throw me on three occasions:

All these happened on the first two commutes since then I have mastered not freewheeling and can control the speed going down hill and spin at a rate that I previously thought impossible although it is much easier to use the brakes.


( Jun 23 2009, 09:22:54 PM BST ) Permalink Trackback

   

20090618 Thursday June 18, 2009

Diskomizer Open Sourced

I'm pleased to announce the Diskomizer test suite has been open sourced. Diskomizer started life in the dark days before ZFS when we lived in a world full1 of bit flips, phantom writes, phantom reads, misplaced writes and misplaced reads.

With a storage architecture that does not use end to end data verification the best that you can hope for was that your application will spot errors quickly and allow you to diagnose the broken part or bug quickly. Diskomizer was written to be a “simple” application that could verify all the data paths worked correctly and worked correctly under extreme load. It has been and is used by support, development and test groups for system verification.

For more details of what Diskomizer is and how to build and install read these pages:

http://www.opensolaris.org/os/community/storage/tests/Diskomizer/

You can download the source and precompiled binaries from:

http://dlc.sun.com/osol/test/downloads/current/

and can browse the source here:

http://src.opensolaris.org/source/xref/test/stcnv/usr/src/tools/diskomizer

Using Diskomizer

First remember in most cases Diskomizer will destroy all the data on any target you point it at. So extreme care is advised.

I will say that again.

Diskomizer will destroy all the data on any target that you point it at.

For the purposes of this explanation I am going to use ZFS volumes so that I can create and destroy them with confidence that I will not be destroying someone's data.

First lets create some volumes.

# i=0
# while (( i < 10 ))
do
zfs create -V 10G storage/chris/testvol$i
let i=i+1
done
#

Now write the names of the devices you wish to test into a file after the key “DEVICE=”:

# echo DEVICE= /dev/zvol/rdsk/storage/chris/testvol* > test_opts

Now start the test. When you installed diskomizer it put the standard option files on the system and has a search path so that it can find them. I'm using the options file “background” which will make the test go into the back ground redirecting the output into a file called “stdout” and any errors into a file called “stderr”:


# /opt/SUNWstc-diskomizer/bin/diskomizer -f test_opts -f background
# 

If Diskomizer has any problems with the configuration it will report them and exit. This is to minimize the risk to your data from a typo. Also the default is to open devices and files exclusively to again reduce the danger to your data (and to reduce false positives where it detects data corruption).

Once up and running it will report it's progress for each process in the output file:

# tail -5 stdout
PID 1152: INFO /dev/zvol/rdsk/storage/chris/testvol7 (zvol0:a)2 write times (0.000,0.049,6.068) 100%
PID 1152: INFO /dev/zvol/rdsk/storage/chris/testvol1 (zvol0:a) write times (0.000,0.027,6.240) 100%
PID 1152: INFO /dev/zvol/rdsk/storage/chris/testvol7 (zvol0:a) read times (0.000,1.593,6.918) 100%
PID 1154: INFO /dev/zvol/rdsk/storage/chris/testvol9 (zvol0:a) write times (0.000,0.070,6.158)  79%
PID 1151: INFO /dev/zvol/rdsk/storage/chris/testvol0 (zvol0:a) read times (0.000,0.976,7.523) 100%
# 

meanwhile all the usual tools can be used to view the IO:

# zpool iostat 5 5                                                  
               capacity     operations    bandwidth
pool         used  avail   read  write   read  write
----------  -----  -----  -----  -----  -----  -----
storage      460G  15.9T    832  4.28K  6.49M  31.2M
storage      460G  15.9T  3.22K  9.86K  25.8M  77.2M
storage      460G  15.9T  3.77K  6.04K  30.1M  46.8M
storage      460G  15.9T  2.90K  11.7K  23.2M  91.4M
storage      460G  15.9T  3.63K  5.86K  29.1M  45.7M
# 


1Full may be an exaggeration but we will never know thanks to the fact that the data loss was silent. There were enough cases reported where there was reason to doubt whether the data was good to keep me busy.

2The fact that all the zvols have the same name (zvol0:a) is bug 6851545 found with diskomizer.


( Jun 18 2009, 10:42:10 AM BST ) Permalink Trackback

   

20090614 Sunday June 14, 2009

Passing the Baton

When I was about 16 I used to ride around Surrey and Sussex a lot on my bike. Sometimes on my own and sometimes with friends. It allowed me to miss the Wedding of Lady Di and Prince Charles by going camping the entire weekend, little did I realise I would get complete symetry and miss her death as well.

On one of these cycling trips I was on my own, tired and struggling up a hill out of Horsham (I assume I was returning from Worthing as I used to cycle down there quite often and since I was on my own I must have been visiting my Great Aunt who lived there). As I struggled up the hill a cyclist who was much older than me (probably in his forties) pull along side and asked how I was. I replied something like “knackered” at which point he put his hand on my back and pushed me up the hill. I was both thankful for his kindness and appaulled that an “old git” was pushing me, a teenager, up the hill.

Well today I managed to pass the baton on. A teenager came out with us on our ride today and on the way back from the cafe blew quite spectacularly. Not able to keep up on the flat even in the tow of the other riders unless we slowed to a crawl, which we did, then we got to a hill and I saw my chance. I realised I had been waiting 28 years (or so) to pay this favour back and so I pushed him up the hill.


( Jun 14 2009, 05:16:38 PM BST ) Permalink Trackback

   

20090607 Sunday June 07, 2009

OpenSolaris 2009.06

After a week of running 2009.06 on my Toshiba Tecra M9 having upgraded from 2008.11 I'm in a position to comment on it. I've been able to remove all the workarounds I had on the system. Nwam appears to work even in the face a suspend and resume. Removalbe media also appears to be robust without the occasional panics that would happen when I removed the SD card with 2008.11.

Feature wise the things I have noticed are the new tracker system for searching files, but it seems to be completely non functional. The big improvements are in the support for the special keys on the Toshiba and the volume control, which unlike the volume on the M2 is a logical control so requires software support. 2009.06 has this support along with support fo the number pad, brightness and mute buttons.

The downside was hitting this bug. This pretty much renders resume useless and I was about to go back to 2008.06 when the bug was updated to say it will be fixed in the first update release and in the mean time there are binary packages. So after creating a new boot enviroment so that I have an unpatched one to switch to when the fix gets into the support repository I have applied the patch. Seems to work which is very pleasing as it has not taken me long to get used to the brightness buttons working.


( Jun 07 2009, 05:45:49 PM BST ) Permalink Trackback

   

20090605 Friday June 05, 2009

Possibly the best shell programming mistake ever

A colleague, lets call him Lewis, just popped over with the most bizarrely behaving shell script I have seen.

The problem was that the script would hang while the automounter timed out an attempt to NFS mount a file system on the customer's system.

I narrowed it down to something in a shell function that looked like this:

# Make a copy even if the destination already exists.
safe_copy()
{
 	typeset src="$1"
	typeset dst="$2"

	/* Nothing to copy */
	if [ ! -f $src ] ; then
		return
	fi

        if [ ! -h $src -a ! -h $dst -a ! -d $dst ] ; then
		cp -p $src $dst || exit 1
	fi
}

safe_copy was called with a file as the $1 and a file as $2.

I laughed when saw the problem. Funny how you can read something and miss such an obvious mistake!

Thankfully the script has quietly been fixed.


( Jun 05 2009, 05:18:39 PM BST ) Permalink Trackback

   

20090531 Sunday May 31, 2009

Hard May Flyer

Today was the 2009 South West Road Club's May Flyer. I vowed this year to not try and get on the wheel of a fast group early on as that enevitably leads to pain later in the day. I kept this up for about 30 miles which meant I was riding mostly solo but humming along nicely when a pair of faster riders caught me and I did catch their wheel until the halfway point. After that I was quite quickly dropped and so that allowed me to enjoy the headwind on the return journey.

I was at least pleased that the route goes through Peaslake thus avoiding Pitch Hill on the way home or at least it did last year. This year it did not! Taking us up Pitch Hill and then down around Peaslake along Lawbrook Lane which also has a sharp climb in it. All this when you still have Coombe Bottom to face.

Not sure how long it took me, but it was a long time, much longer than last year. I failed to zero my bike computer before the start and I have mislaid my GPS!

I was planning a slight detour for my 1000th blog entry but time has not allowed me to finish the entry before a normal cycling entry arrived. The detour may appear later.


( May 31 2009, 07:06:25 PM BST ) Permalink Trackback

   

20090526 Tuesday May 26, 2009

Why everyone should be using ZFS

It is at times like these that I'm glad I use ZFS at home.


  pool: tank
 state: ONLINE
status: One or more devices has experienced an unrecoverable error.  An
        attempt was made to correct the error.  Applications are unaffected.
action: Determine if the device needs to be replaced, and clear the errors
        using 'zpool clear' or replace the device with 'zpool replace'.
   see: http://www.sun.com/msg/ZFS-8000-9P
 scrub: none requested
config:

        NAME           STATE     READ WRITE CKSUM
        tank           ONLINE       0     0     0
          mirror       ONLINE       0     0     0
            c20t0d0s7  ONLINE       6     0     4
            c21t0d0s7  ONLINE       0     0     0
          mirror       ONLINE       0     0     0
            c21t1d0    ONLINE       0     0     0
            c20t1d0    ONLINE       0     0     0

errors: No known data errors
: pearson FSS 14 $; 

The drive with the errors was also throwing up errors that iostat could report and from it's performance was trying heroicially to give me back data. However it had failed. It's performance was terrible and then it failed to give the right data on 4 occasions. Anyother file system would, if that was user data, just had deliviered it to the user without warning. That bad data could then propergate from there on, probably into my backups. There is certainly no good that could come from that. However ZFS detected and corrected the errors.


Now I have offlined the disk the performance of the system is better but I have no redundancy until the new disk I have just ordered arriaves. Now time to check out Seagate's warranty return system.


( May 26 2009, 10:46:56 AM BST ) Permalink Trackback

   

20090522 Friday May 22, 2009

Fixie!!!

Today was my first ride to work on my Sun's new bike. This year my bike to work bike I have chosen a single speed fixed wheel bike. Fixed wheel bikes are supposed to improve your pedaling action and that is my excuse.

I've not ridden a fixed wheel bike since I was a teenager when a boy at school had one and I rode it a bit. However that was all before clipless pedals. I don't even recall if it had toe clips but I suspect not as I was considered a bit odd for having them.

I was expecting hills to be a problem having no gears going up, but in reality the problem is when going down where I've not managed to just relax my legs and let them spin or effectively use them to slow the bike without it all being a bit scary. Once I had got my self scared as my legs were whirling round it was not instinctive to use the brakes to slow the thing down. All very odd.

Traffic was less of a problem than I expected and I managed to get into the habit of slowing before junctions so I could just roll upto them. Since there is no freewheel you can't just lift the pedal to the top of the stroke to start again so you end up planning where you want to stop. It came as quite a suprise how far you move forward on a single pedal stroke.

The real surprised was how long the journey home took. I have no computer on the bike so I was only able to time myself approximately using my watch but it was 1 hour 10 minutes which was quite pleasing. I'm pondering whether a slightly larger gear might be a good idea.


( May 22 2009, 09:20:24 PM BST ) Permalink Trackback

   

20090510 Sunday May 10, 2009

Another update to Sun Ray access hours script

I have made a change to up access hours script for my Sun Rays. Now the access file can also contain a comma separated list of Sun Ray DTUs so that the control is only applied to those DTUs:

: pearson FSS 3 $; cat /etc/opt/local/access_hours 
user1:2000:2300:P8.00144f7dc383
user2:2000:2300:P8.00144f57a46f
user3:0630:2300
user4:0630:2300
: pearson FSS 4 $; 

The practical reason for this is that it allows control of DTUs that are in bedrooms but if the computer is really needed another DTU can be used for homework.

Now that bug 6791062 is fixed the script is safe to use in nevada.

The script is where it always was.


( May 10 2009, 10:54:24 PM BST ) Permalink Trackback

   

20090508 Friday May 08, 2009

Stopping find searching remote directories.

Grizzled UNIX users look away now.

The find command is a wonderful thing but there are some uses of it that seem to cause confusion enough that it seems worth documenting them for google. Today's is:

How can I stop find(1) searching remote file systems?

On reading the documentation the “-local” option should be just what you want and it is, but not on it's own. If you just do:

$ find . -local -print

It will indeed only report on files that are on local file systems below the current directory. However it will search the entire directory tree for those local files even if the directory tree is on NFS

To get find to stop searching when it finds a remote file system you need:


$ find . \( ! -local -prune \) -o -print

simple.


( May 08 2009, 03:57:16 PM BST ) Permalink Trackback

   

20090501 Friday May 01, 2009

Installing support certificates in OpenSolaris

For some reason you only get the instructions on how to install a certificate to get access to supported or extras updates on your OpenSolaris system after you have downloaded the certificate. Not a big issue as that is generally when you want the instructions. However if you already have your certificates and now want to install them on another system (that you have support for) you can't get the instructions without getting another certificate.

So here are the instructions cut'n'pasted from the support page, as much for me as for you:

How to Install this OpenSolaris 2008.11 standard support Certificate

  1. Download the provided key and certificate files, called OpenSolaris_2008.11_standard_support.key.pem andOpenSolaris_2008.11_standard_support.certificate.pem using the buttons above. Don't worry if you get logged out, or lose the files. You can come back to this site later and re-download them. We'll assume that you downloaded these files into your Desktop folder,~/Desktop/.

  2. Use the following comands to make a directory inside of /var/pkg to store the key and certificate, and copy the key and certificate into this directory. The key files are kept by reference, so if the files become inaccessible to the packaging system, you will encounter errors. Here is how to do it:

            $ pfexec mkdir -m 0755 -p /var/pkg/ssl
            $ pfexec cp -i ~/Desktop/OpenSolaris_2008.11_standard_support.key.pem /var/pkg/ssl
            $ pfexec cp -i ~/Desktop/OpenSolaris_2008.11_standard_support.certificate.pem /var/pkg/ssl 

  3. Add the publisher:

            $ pfexec pkg set-authority \
               -k /var/pkg/ssl/OpenSolaris_2008.11_standard_support.key.pem \
               -c /var/pkg/ssl/OpenSolaris_2008.11_standard_support.certificate.pem \
               -O https://pkg.sun.com/opensolaris/support/ opensolaris.org 
    
  4. To see the packages supplied by this authority, try:

            $ pkg list -a 'pkg://opensolaris.org/*' 
    

If you use the Package Manager graphical application, you will be able to locate the newly discovered packages when you restart Package Manager.

How to Install this OpenSolaris extras Certificate

  1. Download the provided key and certificate files, called OpenSolaris_extras.key.pem and OpenSolaris_extras.certificate.pem using the buttons above. Don't worry if you get logged out, or lose the files. You can come back to this site later and re-download them. We'll assume that you downloaded these files into your Desktop folder, ~/Desktop/.

  2. Use the following comands to make a directory inside of /var/pkg to store the key and certificate, and copy the key and certificate into this directory. The key files are kept by reference, so if the files become inaccessible to the packaging system, you will encounter errors. Here is how to do it:

            $ pfexec mkdir -m 0755 -p /var/pkg/ssl
            $ pfexec cp -i ~/Desktop/OpenSolaris_extras.key.pem /var/pkg/ssl
            $ pfexec cp -i ~/Desktop/OpenSolaris_extras.certificate.pem /var/pkg/ssl
                    
  3. Add the publisher:

            $ pfexec pkg set-authority \
                -k /var/pkg/ssl/OpenSolaris_extras.key.pem \
                -c /var/pkg/ssl/OpenSolaris_extras.certificate.pem \
                -O https://pkg.sun.com/opensolaris/extra/ extra
            
  4. To see the packages supplied by this authority, try:

            $ pkg list -a 'pkg://extra/*'
            

    If you use the Package Manager graphical application, you will be able to locate the newly discovered packages when you restart Package Manager.


( May 01 2009, 12:27:21 PM BST ) Permalink Trackback

   

20090423 Thursday April 23, 2009

Good advice from the Department for Transport for Drivers & Cyclists

Here is a moderately good page from the Department for Transport for cyclists and drivers. It's good. It seems odd that drivers want cyclists to know that they drive to fast (Motorists usually travel faster than cyclists and may have less time to take account of hazards.) and don't look enough (Motorists may not always see cyclists), which while true is not really what drivers should want to cyclists to know.

If however some more motorists read this and understand it that would be a step in the right direction. The best thing about this is that it comes from the Department for Transport which does not have a reputation for being pro cycling.


( Apr 23 2009, 08:18:05 PM BST ) Permalink
Trackback

   

20090420 Monday April 20, 2009

Off to Newcastle for the mash up

This is worse than being on a mobile, but I'm on the train o.k.?

Tomorrow I will be a the System Admin Mash up event at Newcastle. If you are going to be there I suggest you don't bother asking us about Sun/Oracle and instead go straight to www.oracle.com/sun then you will know as much as us.


( Apr 20 2009, 08:46:28 PM BST ) Permalink Trackback

   

20090419 Sunday April 19, 2009

Horsham and around

Today we had six riders out today and headed out over Coombe Bottom At the top of Coombe Bottom one rider turned for home but the rest of us continued over Pitch Hill towards Horsham. Just outside Rowhook one rider took a bath in an enourmous water filled pot hole. Fortunately no harm done. In Horsham food was required but no open Cafe could be found so we had to make do with a corner shop and then headed for Henfold Lakes.

The nasty 10% hill between Horsham and Rusper was a bit of a shock but once over we had good run to the Cafe. Henfold was very busy, there was a CTC group that arrived while we were there so the place was awash with bikes.

My invitation to include Ranmore on the ride home was declined due to tired legs so we went the flat way through Dorking and Leatherhead.

Ended up with 70 miles done and I think I have been sun burnt (very mildly).


( Apr 19 2009, 07:08:29 PM BST ) Permalink
Trackback

   
User and group quotas for ZFS!

This push will be very popular amoung those who are managing servers with thousands of users:

Repository: /export/onnv-gate
Total changesets: 1

Changeset: f41cf682d0d3

Comments:
PSARC/2009/204 ZFS user/group quotas & space accounting
6501037 want user/group quotas on ZFS
6830813 zfs list -t all fails assertion
6827260 assertion failed in arc_read(): hdr == pbuf->b_hdr
6815592 panic: No such hold X on refcount Y from zfs_znode_move
6759986 zfs list shows temporary %clone when doing online zfs recv

User quotas for zfs has been the feature I have been asked about most when talking to customers. This probably relfects that most customers are simply blown away by the other features of ZFS and the only missing feature was user quotas if you have a large user base.


( Apr 19 2009, 04:18:44 PM BST ) Permalink Trackback

   

20090414 Tuesday April 14, 2009

zfs list -d

I've just pushed the changes for zfs list that give it a -d option to limit the depth to which recursive listings will go. This is of most use when you wish to list the snapshots of a given data set and only the snapshots of that data set.

PSARC 2009/171 zfs list -d and zfs get -d
6762432 zfs list --depth

Before this you could achieve this using a short pipe line which while it produced the correct results was horribly inefficient and very slow for datasets that had lots of descendents.

: v4u-1000c-gmp03.eu TS 6 $; zfs list -t snapshot rpool | grep '^rpool@'
rpool@spam                         0      -    64K  -
rpool@two                          0      -    64K  -
: v4u-1000c-gmp03.eu TS 7 $; zfs list -d 1 -t snapshot              
NAME         USED  AVAIL  REFER  MOUNTPOINT
rpool@spam      0      -    64K  -
rpool@two       0      -    64K  -
: v4u-1000c-gmp03.eu TS 8 $; 

It will allow the zfs-snapshot service to be much more efficient when it needs to list snapshots. The change will be in build 113.


( Apr 14 2009, 05:52:07 PM BST ) Permalink
Trackback

   

20090412 Sunday April 12, 2009

Ride to Windsor

With it being Easter this was always going to be a short ride. Family commitments abound for all. We had two new riders but that still only made five. We headed out to Windsor via Ascot and the usual "sprint" through the park which left the new riders in for a bit of a surprise when it all kicked off.

Slight rain did not dampen the ride and the tail wind on the return made for a fast and furious return to Molesey.

53 miles.


( Apr 12 2009, 12:32:14 PM BST ) Permalink
Trackback

   

Valid HTML! Valid CSS!

Except where otherwise noted, this site is
licensed under a Creative Commons License 2.0

This is a personal weblog, I do not speak for my employer.