Welcome to the machine ...
FileBench ported to Mac OS X
I recently ported the benchmarking utility FileBench to Mac OSX. The chief attraction of FileBench is, that one can define the I/O operations put on the filesystem in something called the "Workload Definition Language". So - it's not a fixed benchmark, burden the system with the very same load pattern over and over again but an amazingly flexible Software which can simulate various workloads like file servers, databases, web servers etc.
FileBench was created by Richard McDougall who is a Solaris and Systems programming guru and one of the authors of the famous Solaris Internals book. More information about FileBench could be found at the official touch base here. FileBench is now included in OpenSolaris. Take a look here for the sources. There is also a SourceForge-Version landing page for sources which build on Linux.
Here's an example, how this definition language looks like:
On the FileBench homepage and in the distributions "workloads" directory one can find many more examples how to write these definitions.
Here is an console-log of loading and running the varmail benchmark:
$ /opt/filebench/bin/go_filebench
I've created a Diskimage including an Apple Installer package which installs the software into /opt/filebench. Just download the image file and you could install the program in an Apple fashion:



As a next step the process of creating the Mac-version from the OpenSolaris sources should be automated like this:

Here's the first version of the script, the skeleton and a set of patches to automate this.
Posted at 01:18PM Mai 29, 2009 by schmidtm in Mac | Kommentare[4]
UNIX DaytimeServer - the Scala way
Here's how it looks like:
1 package daytimeserver 2 3 import java.io.IOException 4 import java.nio.ByteBuffer 5 import java.util.Date 6 import java.nio.channels.SelectionKey 7 8 import com.sun.grizzly.{ ProtocolFilter, Context, Controller, ProtocolChain, 9 DefaultProtocolChain, ProtocolChainInstanceHandler, TCPSelectorHandler } 10 11 import com.sun.grizzly.util.OutputWriter 12 13 class MyTCPSelectorHandler extends TCPSelectorHandler { 14 15 override def onAcceptInterest(key:SelectionKey, ctx: Context ) : Boolean = { 16 var channel = acceptWithoutRegistration(key) 17 18 if (channel != null) { 19 configureChannel(channel) 20 var readKey = channel.register(selector, SelectionKey.OP_READ | SelectionKey.OP_WRITE) 21 readKey.attach(System.currentTimeMillis()) 22 } 23 24 false 25 } 26 } 27 28 class MyProtocolChainInstanceHandler extends ProtocolChainInstanceHandler { 29 30 private var protocolChain = new DefaultProtocolChain() 31 32 def poll() : ProtocolChain = protocolChain 33 def offer(instance: ProtocolChain ) : Boolean = true 34 } 35 36 class DaytimeWriterFilter extends ProtocolFilter { 37 38 def execute(ctx: Context) : Boolean = { 39 if (ctx.getProtocol() == Controller.Protocol.TCP) { 40 var channel = ctx.getSelectionKey().channel() 41 var now = (new Date()).toString() + "\n" 42 var buffer = ByteBuffer.wrap(now.getBytes()) 43 44 OutputWriter.flushChannel(channel, buffer) 45 46 channel.close() 47 buffer.clear() 48 } 49 false 50 } 51 52 def postExecute(ctx : Context ) : Boolean = false 53 } 54 55 object DaytimeServer extends Application { 56 57 val PORT : Int = 1405 58 var controller = new Controller() 59 var tcpSelectorHandler = new MyTCPSelectorHandler() 60 var pciHandler = new MyProtocolChainInstanceHandler() 61 var protocolChain = pciHandler.poll() 62 63 tcpSelectorHandler.setPort(PORT) 64 controller.addSelectorHandler(tcpSelectorHandler) 65 controller.setProtocolChainInstanceHandler(pciHandler) 66 protocolChain.addFilter(new DaytimeWriterFilter()) 67 68 try { 69 println("Starting Daytime server running on port " + PORT) 70 controller.start() 71 } catch { 72 case ex: IOException => println("Exception:" + ex) 73 } 74 } 75
Posted at 01:03PM Mai 12, 2009 by schmidtm in glassfish | Kommentare[3]