Archive for the ‘Linux’ Category

fsync Links

Saturday, May 8th, 2010

This is a placeholder post for links about fsync on linux and Perl.

tchrist: some good news && bad news on fsync
Don’t fear the fsync!
Delayed allocation and the zero-length file problem
libeatmydata
Firefox 3 & ‘fsync’ issue
Brad’s diskchecker.pl
pl.atyp.us: How To Lose Data

MySQL Conference 2010

Monday, April 12th, 2010

The MySQL Conference was this week in Santa Clara. It was a well-organized and educational event with everybody involved in the MySQL community showing up once again.

Executive Summary

The highlights were:

  • after 2 years of effort, the performance schema foundation is available as a 5.5.x patch. With another year of effort, it could be useful.
  • the various community forks (Percona/XtraDB, MariaDB, OurDelta) will merge in the next 3 months into a maintenance fork by Monty Program, since MP has the most original MySQL developers.
  • the various MySQL vendors are soldiering along, all releasing new, improved versions of their hw and sw products this year.
  • The largest independent MySQL-centric consulting companies are Percona with 32 staff, and Monty Program 40 with staff, with a target of 50 employees.
  • the MySQL source code will have to be modified to make MySQL fast enough to keep up with Fusion IO SSD devices. Currently, better than SSD performance can be gained by installing enough RAM to fit the entire database in buffer pool.
  • Drizzle development is going nicely, but note that it’s not backward compatible with MySQL. Drizzle is a 64-bit only fork of MySQL with emphasis on community code development, increasing performance and maintainability through a plug-in architecture and strict code cleanliness.

Monday Morning Tutorial

Using Partitioning in MySQL 5.1 and 5.5 with Giuseppe Maxia (Oracle)

- available in MySQL 5.1 and later only
- TO_DAYS and YEAR() special and recommended as they can prune partitions from lookups.
- when using TO_DAYS() as a partitoning function, the first partition matters. Use value less than zero for first partition to create NULL partition to double performance as a bug workaround.
- consider lock before inserting for all table types
- for performance, consider non-partitioned on masters, partitions on slaves.
- or different partition types

He also gave a nice tutorial on mysql sandboxes script.

Partition Limitations:

- cannot mix table types
- cannot make read-only

I talked to some advanced users, and none have found a practical use for partitions in their environment that was better than using regular table types for logging type applications.

This is due to the fact that partitions do not increase fault-tolerance, often don’t benchmark any faster, and have little in the way of administrative mgmt. support after partition creation.

Partitions can increase performance in applications where the index serves to stripe operations, but most people are just using dates for logging, with no practical benefit, as most operations fall into the current date partition.

Slides

Monday Afternoon Tutorial

Talked to Arjen Lenz and a friend at lunch.

- OpenQuery is suitable for affordable, long-term contract databae admin, not firefighting
- former partition tester and bugfixer
- replication bug with TCP errors, nagios plugin should compare both replication lag seconds and log position
- need SSL or heartbeat to detect/fix

memcached

- set all clients to same values
- use JSON or YAML, not Storable or Pickl

Tuesday

Performance Schema with Peter Gulutzan

- coded by Alff, but not GA yet
- PERFORMANCE_SCHEMA database optionally populated with events (mutex, lock, io) timing and count info
- allows simple SQL reporting of performance

EXPLAIN Demystified with Baron Schwartz (Percona Inc.)

- perennial nice EXPLAIN overview
- nice example of using mysql command prompt as pipeline for non-trivial processing

Introduction to InnoDB Monitoring System and Resource & Performance Tuning with Jimmy Yang

An Overview of Flash Storage for Databases with Vadim Tkach, Percona Inc.

- nice talk with useful performance graphs

Linux Performance Tuning and Stabilization Tips with Yoshinori Matsunobu, Sun Microsystems

- nice talk with detailed slide examples – he’s a hard worker
- he’s a fan of xfs, so some info not always useful for ext3. ie. deadline scheduler may be better on xfs, but it feels the same to me as cfq on ext3.

Wednesday

More Mastering the Art of Indexing with Yoshinori Matsunobu, Sun Microsystems

- second-part continuation of his talk from last year (!) Were you there?
- his understanding of the space requirements of blobs in Innodb is different than Peter Zaitsev’s.

Faster Than Alter – Less Downtime with Chris Schneider (Ning.com)

- Hipster presentation on doing practical DBA tasks
- likes doing dump and restore on Innodb tables, 30% faster afterwards on his tables.

InnoDB Architecture and Performance Optimization with Peter Zaitsev, Percona Inc.

- perennial comprehensive overview of Innodb
- talked about differences between Antelope and Barracuda file formats
lwn.net: A look at the MySQL forks

BOFs

O’Reilly failed to use meetup.com to promote the BOFs once again at this conference, so turnout was light to moderate as in past years.

Sphinx BOF hosted by Andrew Aksyonoff

I’ve been familiar with SphinxSearch for years and am a production user, so the general audience discussion was not interesting to me.

However, I had a chance to talk to Andrew about my take on the October Apache (Search!) Conference last October and suggested a few things:

  • explain collections on the Sphinx homepage, since many users insist on this feature. The question, of course, is what does the term ‘collections’ mean to various people?
  • make it possible for a non-technical end-user (like a marketing asst.) to highlight 10 items for feature on the first page of results
  • Microsoft is EOLing FAST for linux users, so think about promotion to that segment, who is considering migration to Lucene mainly – because Lucene is free, and migration is the same cost to any other product.
  • look at the myriad “value-added features” of commercial search engines, mostly related to adserver integration, and decide what can be supported.

MariaDB BOF hosted by Monty

Not much talk about MariaDB, but lots of drinking! (See Monty’s keynote for more detailed info.)

Conference Wrapup

Overall, another good MySQL conference. The organizers restored balance to the presentations, with a fair number of independent consultants and end-users doing talks. (Though I miss the awesome Percona Performance Conference from last year.)

BOFs should be promoted on meetup.com to double participation.

There should be a room with exotic hardware to demonstrate high performance MySQL and MySQL Cluster configurations – SANs, Infiniband, failover, etc.

The lunch food was quite good on all days, as noted by several people. (Important because the suburban venue is not within walking distance to outside restaurants.)

linux 100% swap Screenshot

Saturday, March 6th, 2010

Nice screenshot of 100% swap space being used on a popular but ill Perl app running under ModPerl::PerlRun. :)

Tasks:  85 total,   2 running,  83 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us, 14.8%sy,  0.0%ni, 17.0%id, 68.1%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   8174024k total,  8132492k used,    41532k free,      284k buffers
Swap:  2096472k total,  2096472k used,        0k free,     5648k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
  308 root      10  -5     0    0    0 D 17.5  0.0   0:05.14 kswapd0
15985 apache    18   0 19.4g 7.7g   84 D 15.1 98.3   0:12.09 httpd
15996 root      16   0 12740  624  368 R  5.4  0.0   0:00.48 top
    1 root      16   0 10348  124   32 S  0.0  0.0   0:01.69 init

The test server is a Dell 1950 with 8 GB RAM running CentOS 5.4 x64 and Apache 2.x.

The above problem illustrates one of the many reasons that almost all hosting providers adopted PHP instead of mod_perl.

PHP gives you good performance without the headaches of mod_perl, which get magnified in a shared environment.

However, if you have a dedicated machine, mod_perl is a great way to accelerate a Perl application as long as the program is reasonably well-behaved.

Redhat system-config-securitylevel Surprises

Tuesday, March 2nd, 2010

When I use a firewall generator, like Redhat’s system-config-securitylevel, this is not what I expect when I tell it to allow only ports 22, 80, and 443:

# Firewall configuration written by system-config-securitylevel
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -p 50 -j ACCEPT
-A RH-Firewall-1-INPUT -p 51 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT

According to /etc/services, 224.0.0.251:5353 is multicast DNS, 631 is for printing, and 50 and 51 are “Remote Mail Checking Protocols”.

How does that help my webserver exactly? Unix is not supposed to volunteer your machine for things that were not requested.

And those extra ports are useless when in linux runlevel 3 (console mode) since no desktop environment can run without X, nevermind the INPUT and FORWARD ACCEPT defaults.

This free web tool makes a lot more sense to me:

 Generated by iptables-save v1.3.5 on Tue Mar  2 23:33:21 2010
*filter
:INPUT DROP
:FORWARD DROP
:OUTPUT ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j DROP
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -m state --state NEW -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -m state --state NEW -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 11 -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
COMMIT
# Completed on Tue Mar  2 23:33:21 2010

Just put that in /etc/sysconfig/iptables on your Redhat or CentOS webserver then:

chkconfig iptables on
service iptables restart

iptables is started in script 08iptables, which is after several other services but before networking is started, which sounds ok.

mista.nu: Simple Iptables Script Generator
Redhat Product Pricing

HAProxy Comments

Saturday, February 27th, 2010

Just trying out HAProxy in a new data center for http load balancing.

I’m not expecting a lot of site traffic initially, but using a load balancer from Day One lets you get all the data center servers assigned, and allows sysadmins to do maintenance whenever convenient.

I was looking around at similar Open Source software, and what caught my attention about HAProxy is that Willy “obsessed with reliability” Tarreau is the author.

HAProxy has several nice features, including speed (fast enough for 10 GB connections at up to 132,000 connections per second), and epoll, cookie, multicore, chroot support and much more.

There are ports available for most Unix systems, including linux, FreeBSD and Solaris.

Here is the build script I wrote for a Dell 1950 (after installing libpcre):

#!/bin/bash

make clean
make TARGET=linux26 USE_PCRE=1 ARCH=x86_64
# no make test
make install

You can do a graceful restart of HAProxy running on multiple cores by adding this to your startup script (the tr is needed to handle when nbproc > 1):

graceful() {
  /usr/local/sbin/haproxy -c -q -f /etc/haproxy.cfg
  if [ $? -ne 0 ]; then
    echo "Errors found in configuration file, check it with 'haproxy check'."
    return 1
  fi
  /usr/local/sbin/haproxy -V -f /etc/haproxy.cfg -p /var/run/haproxy.pid -sf
`tr '\n' ' ' < /var/run/haproxy.pid`
}

I talked to somebody using it on EC2, so HAProxy is 'cloud-ready.'

HAProxy Documentation
wht: HAproxy - Quick and Dirty HTTP Load balancing Tutorial on Redhat/Centos
Session Based Load Balancing with HAproxy
tito: Zero-Downtime Restarts with HAProxy
Building an easy and scalable load-balanced high-availability web-hosting solution. Part One : The front.
How To Tell Apache To Not Log Certain Requests In Its Access Log
Pricing for Zeus software on Amazon EC2
microsoft.com: Network Load Balancing Technical Overview
loadbalancer.org: FAQ
Tenereillo.com: Why DNS Based Global Server Load Balancing (GSLB) Doesn't Work (2005)
davew: Thoughts on Global Server Load Balancing
ksalchow: Shame on GSLB? Shame on Me?
Vegan Load Balancing Mailing List
HATop: Interactive ncurses client for HAProxy

Intel Atom D510 Server News

Friday, February 19th, 2010

The Supermicro X7SPA-HF is a near-server-class $200 Atom-based motherboard.

Pluses are extreme low-power operation (under 35 watts for an entire system), dual core with HT, dual gigabit NICs and IPMI remote mgmt. (Reportedly there are still some minor bugs in the IPMI code, for example with mounting ISO images remotely.)

Minuses are that memory is limited to 4 GB non-ECC single-channel SO-DIMM (notebook) DDR2 RAM, but hey, an Atom is a slow processor suitable for file-serving and not heavy calculations. I have heard of serving ftp traffic at 300 Mbps with this mobo.

I’m thinking of using it in the data center where power is at a premium, but having a dedicated box is nice – uses like an HAProxy appliance or a PXE/kickstart build server.

One use of Atoms is “rack filler”: The low-power Atom servers can be distributed into racks where there’s not enough power for another 2-amp Dell server, but where there’s still a half amp or so left on a circuit.

The power budget looks like:

mobo/cpu 21 watts
8800 RPM fan 2 watts
notebook hard drive 5 watts
4 GB DDR2 SO-DIMM RAM 1 watt
80%-efficient power supply losses 6 watts
Total System 35 watts

The total cost of this server is about $450 to assemble from the above mobo and Supermicro case/80% PSU.

Thanks to Colin from HE for telling me about his experiences with the D510.

In comparison, “ULV mobile chips are designed to fit what Intel calls a thermal design point of around 17 watts, compared with 25 watts to 35 watts for conventional laptop chips.”

wht: 0.2amp server with Intel Atom D510
anandtech.com: Intel Atom D510: Pine Trail Boosts Performance, Cuts Power
atacom.com: MB13_SUPE_X7_HF pricing
APAQ Digital: Atom Servers
GCC 4.5 Release Series Changes, New Features, and Fixes: Support for the Intel Atom processor is now available through the -march=atom and -mtune=atom options.
tomshardware.com: UPDATE: Apple Mac Mini Based on Nvidia Ion (Rumors)
engadget: Atom N470 at CES
techpowerup: Intel Announces Next-Generation Atom Platform (Intel press release with forum comments)
Supermicro: A+ Server 1012G-MTF (single-CPU, up to 12 cores)
wht: SuperMicro’s IPMI and browser Java version, “Downgrade your Java version to 1.6.19 and disable automatic updates. Java broke some functionality in the most recent upgrade that the console requires.”
steadfastnetworks.com: Now Offering Atom D510 + IPMI for $99.95/month
computerworld.com: SeaMicro’s SM10000 cloud server sports 512 Atom Z530 processors

Supermicro’s X7SPA-HF D510 4gb ram, 7200rpm 32MB cache sata2 (thanks HE.net):

~$ openssl speed
Doing md2 for 3s on 16 size blocks: 226475 md2's in 3.00s
Doing md2 for 3s on 64 size blocks: 120692 md2's in 3.00s
Doing md2 for 3s on 256 size blocks: 42107 md2's in 2.99s
Doing md2 for 3s on 1024 size blocks: 11682 md2's in 3.00s
Doing md2 for 3s on 8192 size blocks: 1509 md2's in 3.00s
Doing md4 for 3s on 16 size blocks: 2401326 md4's in 2.99s
Doing md4 for 3s on 64 size blocks: 2142527 md4's in 3.00s
Doing md4 for 3s on 256 size blocks: 1623085 md4's in 3.00s
Doing md4 for 3s on 1024 size blocks: 828401 md4's in 3.00s
Doing md4 for 3s on 8192 size blocks: 148964 md4's in 3.00s
Doing md5 for 3s on 16 size blocks: 1849959 md5's in 3.00s
Doing md5 for 3s on 64 size blocks: 1640520 md5's in 3.00s
Doing md5 for 3s on 256 size blocks: 1213169 md5's in 3.00s
Doing md5 for 3s on 1024 size blocks: 599186 md5's in 3.00s
Doing md5 for 3s on 8192 size blocks: 104641 md5's in 2.99s
Doing hmac(md5) for 3s on 16 size blocks: 2633248 hmac(md5)'s in 3.00s
Doing hmac(md5) for 3s on 64 size blocks: 2215126 hmac(md5)'s in 3.00s
Doing hmac(md5) for 3s on 256 size blocks: 1503649 hmac(md5)'s in 3.00s
Doing hmac(md5) for 3s on 1024 size blocks: 661824 hmac(md5)'s in 3.00s
Doing hmac(md5) for 3s on 8192 size blocks: 106496 hmac(md5)'s in 3.00s
Doing sha1 for 3s on 16 size blocks: 1625929 sha1's in 3.00s
Doing sha1 for 3s on 64 size blocks: 1169240 sha1's in 3.00s
Doing sha1 for 3s on 256 size blocks: 631166 sha1's in 2.99s
Doing sha1 for 3s on 1024 size blocks: 223384 sha1's in 3.00s
Doing sha1 for 3s on 8192 size blocks: 31758 sha1's in 3.00s
Doing sha256 for 3s on 16 size blocks: 1153538 sha256's in 3.00s
Doing sha256 for 3s on 64 size blocks: 675082 sha256's in 3.00s
Doing sha256 for 3s on 256 size blocks: 300594 sha256's in 3.00s
Doing sha256 for 3s on 1024 size blocks: 93616 sha256's in 3.00s
Doing sha256 for 3s on 8192 size blocks: 12605 sha256's in 3.00s
[...]

In comparison, a dual Opteron 248 with 8 GB RAM from Nov. 2003 on 1.85 amps does:

$ openssl speed
Doing md2 for 3s on 16 size blocks: 375455 md2's in 2.99s
Doing md2 for 3s on 64 size blocks: 196333 md2's in 3.00s
Doing md2 for 3s on 256 size blocks: 67419 md2's in 3.00s
Doing md2 for 3s on 1024 size blocks: 18599 md2's in 3.01s
Doing md2 for 3s on 8192 size blocks: 2398 md2's in 3.00s
Doing md4 for 3s on 16 size blocks: 5122350 md4's in 3.00s
Doing md4 for 3s on 64 size blocks: 4476227 md4's in 3.00s
Doing md4 for 3s on 256 size blocks: 3168069 md4's in 3.00s
Doing md4 for 3s on 1024 size blocks: 1453159 md4's in 3.00s
Doing md4 for 3s on 8192 size blocks: 241911 md4's in 3.00s
Doing md5 for 3s on 16 size blocks: 4038740 md5's in 3.00s
[...]

Windows User VPN Software

Sunday, February 14th, 2010

So … Windows end-users are setting up their own VPNs with Hamachi and other networking programs.

Must be a fun time to be an IT security guy these days. *shudder*

wikipedia.org: Hamachi
An open source alternative to Hamachi: tinc
List of Hamachi Alternatives|Virtual Private Network Adapters
Hamachi: Roll Your Own VPNs the Fast and Free Way, Create and Manage Your Own Virtual Private Networks

Linux CentOS Cluster Setup Tips

Sunday, February 14th, 2010

I made a linux cluster using 16 dual Opteron 248 machines, gigabit Ethernet and CentOS 5.4 DVD with kickstart.

Nodes can be remotely rebuilt upon command in about 3 minutes each in parallel, with no manual intervention, as long as you’re careful to treat nodes like appliances and don’t save data on them.

Some tips to save time and effort are:

  • collect the MAC addresses of all nodes at one time using the most efficient possible way, either from a manifest, or simply power all the nodes on and type on one node:
    ping -b 10.0.0.255 or
    fping -A -q -c 1 -g 10.0.0.0/24 or
    nmap -sP 10.0.0.0/24
    and
    arp -n
    
  • decide what your policy will be for dealing with machine failure. Fix, remove or just power it down?
  • on your main client PXE test node, which you may do 50 reinstalls on, save boot time by disabling memory checking, boot splash screens, etc. and use small filesystems during initial testing
  • install one machine by hand from DVD first to generate the anaconda-ks.cfg file, which contains your preferred package list (the CentOS installer itself uses kickstart even for local installs)
  • I found that having kickstart fetch the distro files using HTTP was a lot easier to setup and troubleshoot than NFS, and easier to secure later.
  • it’s common to use a BIOS boot order of “PXE, CD, HD” on each machine to bootstrap the cluster if the hard drive is not blank, then switch to “CD, HD, PXE” after linux is successfully installed and you’re able to login remotely. Subsequent reboots will try the HD first unless you force a PXE boot, which can be done with a script I wrote called unboot that both deactivates the boot partition and erases the MBR:
    #!/bin/bash -x
    
    # do this in a device-naming portable way...
    #
    # parted /dev/hda set 1 boot off
    # dd if=/dev/zero of=/dev/hda bs=512 count=1
    
    DEV=`perl -e '$x=qx[df -l /]; $x=~m[/dev/(hda|sda)\d];print $1'`
    dd if=/dev/$DEV of=/root/mbr.boot bs=512 count=1
    parted /dev/$DEV set 1 boot off
    dd if=/dev/zero of=/dev/$DEV bs=512 count=1
    sync
    
  • do a web search for several good sample kickstart files. I found that merging 3 or 4 good ones provided very nice results.
  • by default, kickstart configures your networking with DHCP if you are doing network installs, but you can overwrite that in your post-install section with multiple static IP addresses if desired.
  • test your tftpd setup from the server (or another node) with tftp localhost -v -c get pxelinux.0
  • do tail -f /var/log/messages on the DHCP server to monitor DHCP requests by client nodes.
  • Make sure “/var/lib/dhcp/dhcpd.leases” exists.
  • Note that doing yum -y update in the postinstall script will significantly increase installation time.
  • Note that kickstart creates the MBR at the very end of the installation process. So if you unboot your machine and interrupt kickstart, then it will not be able to boot from the hard drive. Instead you will only see a blinking cursor on the console.

Likely I will move to Rocks Clusters later, which is also derived from CentOS. Rocks is seriously funded by the NSF and has the goal of being simple to install, manage and use – meaning, no cluster sysadmin needed.

The Rocks Clusters people handle PXE boot in a more sophisticated way, configuring PXE boot to read the kernel image from the local hard drive, sparing tftpd from being swamped on clusters of thousands of nodes. Their unboot utility is called cluster-kickstart-pxe.

I use dsh, part of the ClusterIt Toolkit, which also has the pcp (parallel copy) command. Currently ClusterIt works fine on most Unix environments, with the exception of dtop, which segfaults on linux.

Another parallel execution tool of the same name is dsh (Dancer’s Distribute Shell) for issuing cluster-wide commands.

The dsh Howto has some nice tips, including copying files over dsh and scp:

To copy files from master's /etc directory to /etc directory of all nodes:
dsh -a "scp master:/etc/passwd /etc/passwd"

hp.com: Setting up a Linux PXE server and integrating clients – Howto (c00257674.pdf)

RedHat Linux KickStart HOWTO
Remote Network Boot via PXE
communities.vmware.com: How to Pass Parameters to a Kickstart Script?
aboveaverageurl.com: PXE Booting
Howtoforge: Unattended Fedora 8 Installation With NFS And Kickstart
Yu Dong, NASA: Installing Linux over Network: PXE, DHCP, TFTP, NFS and Kickstart
Rocks Cluster 5.3: Forcing a Re-install at Next PXE Boot
[Rocks-Discuss]cluster-fork ‘/boot/kickstart/cluster-kickstart–start’has no effect?
IEEE OUI and Company_id Assignments (MAC Address Database)
ftp://ftp.rocksclusters.org/pub/rocks
Reading Dell service tag number – dmidecode -s system-serial-number
Debian – setting hostname from DHCP result
Golfing the Extraction of IP Addresses from ifconfig
The Tool Shed: ClusterIt
Fedora Cobbler Install Server
Func: Fedora Unified Network Controller
High Performance Computing Rocks at NYU: A Look at Rocks Cluster Distribution for HPC Researchers (2004)
Shell Scripting DSL in Ruby
Perl CPAN Grid::Machine
Creating Hadoop pe under SGE
Multi-level, Colorful and “Jazzy” PXE Boot Menus Made Easy
Make a Menu for PXE linux
PXE Magic: Flexible Network Booting with Menus