20 April 2014

573. PCSensors K-type USB thermocouple adapter TEMPer1K4 (0c45:7403) on debian

UPDATE 1 May 2014:
I've rewritten the code now to properly deal with the presence of both a 0c45:7401 and a 0c45:7403 simultaneously. Note that I'm not convince about the accuracy of the temperature readings (accuracy as in whether there's any systematic bias to the output. The reproducibility seems to be excellent though).

Original post:
I just received this usb thermocouple reader (TEMPer1k4): http://www.pcsensor.com/index.php?_a=product&product_id=104

About the product:
lsusb shows 0c45:7403 (Microdia Foot Switch)

dmesg shows
[13448.536120] usb 6-1: new low-speed USB device number 3 using uhci_hcd [13448.709126] usb 6-1: New USB device found, idVendor=0c45, idProduct=7403 [13448.709139] usb 6-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0 [13448.709146] usb 6-1: Product: TH1000isoV1.5 [13448.709152] usb 6-1: Manufacturer: RDing


Getting it to work:
You can use the same program as in this post: http://verahill.blogspot.com.au/2013/12/532-temper-temperature-monitoring-usb.html with some minor modifications. Before running
sudo python setup.py install

make some changes in temperusb/temper.py.

Firstly, you need to allow for the detection of devices with the 0c45:7403 ID
 
15 VIDPIDs = [(0x0c45L,0x7401L),(0x0c45L,0x7403L)]
Secondly, you need to make sure that the program knows which device is which and treats them differently. Finally, you need to collect the right data-- the TEMPer1k4 returns a data_s with a length of 8 (caveat -- I haven't checked what the output from 0c45:7401 looks like. Maybe it too yields 8 fields), and the [2:4] data block contains the internal temperature of the USB device, while the [4:6] data block holds the thermocouple junction temperature. Of a sort -- you get a number which you need to translate into a temperature. See the bottom of this post for how I worked it all out. Please note that you should calibrate the thermocouple -- the uncorrected output seems to be at least 2-3 degrees too high.
temper.py
 
 15 VIDPIDs = [(0x0c45L,0x7401L),(0x0c45L,0x7403L)]

 63     def getid(self):
 64         return self._device.idProduct

125             if self._device.idProduct==29697:
126                 temp_c = 125.0/32000.0*(struct.unpack('>h', data_s[2:4])[0])+0.0025
127                 if format == 'celsius':
128                     temp_c = temp_c * self._scale + self._offset
129                     return temp_c
130                 elif format == 'fahrenheit':
131                     return temp_c*1.8+32.0
132                 elif format == 'millicelsius':
133                     return int(temp_c*1000)
134                 else:
135                     raise ValueError("Unknown format")
136             elif self._device.idProduct==29699:
137                 temp_c = (struct.unpack('>h', data_s[4:6])[0])*0.25-2.00
138                 temp_internal=(125.0/32000.0*(struct.unpack('>h', data_s[2:4])[0]))+0.0025
139                 if format == 'celsius':
140                     temp_c = temp_c * self._scale + self._offset
141                     return temp_c
142                 elif format == 'fahrenheit':
143                     if self._device.idProduct==29697: #0x7401
144                         return temp_c*1.8+32.0
145                     elif self._device.idProduct==29699: #0x7403
146                         return temp_internal
147 

cli.py
 
 31     for i, dev in enumerate(devs):
 32         readings.append({'device': i,
 33                          'id':dev.getid(),
 34                          'temperature_c': dev.get_temperature(),
 35                          'temperature_f':
 36                          dev.get_temperature(format="fahrenheit"),
 37                          'ports': dev.get_ports(),
 38                          'bus': dev.get_bus()
 39                          })
 40 
 41     for reading in readings:
 42         if disp_ports:
 43             portinfo = " (bus %s - port %s)" % (reading['bus'],
 44                                                 reading['ports'])
 45         else:
 46             portinfo = ""
 47         if reading['id']==29697:
 48             print('Device #%i%s: %0.1f°C %0.1f°F'
 49                   % (reading['device'],
 50                      portinfo,
 51                      reading['temperature_c'],
 52                      reading['temperature_f']))
 53         elif reading['id']==29699:
 54             print('Device #%i%s: %0.1f°C %0.1f°C'
 55                   % (reading['device'],
 56                      portinfo,
 57                      reading['temperature_c'],
 58                      reading['temperature_f']))

Beyond this, follow the instructions in http://verahill.blogspot.com.au/2013/12/532-temper-temperature-monitoring-usb.html and make sure to set up a rules file with the correct USB ID for this device.

Done!

If you're curious about the details, have a look below.

Analysing USB traffic:
Since I wasn't quite sure where to start I figured the easiest approach would be to sniff the traffic between the usb device and the offically supported programme from PC Sensors. So I installed it Win XP in virtualbox, read a couple of temperatures and compared them with the captured data.

To capture data I did:
sudo apt-get install tshark
sudo modprobe usbmon
lsusb
Bus 008 Device 003: ID 17ef:4815 Lenovo Integrated Webcam [R5U877] Bus 008 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 004 Device 043: ID 0c45:7403 Microdia Foot Switch Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 007 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
sudo tshark -D
1. eth0 2. wlan0 3. nflog 4. nfqueue 5. usbmon1 6. usbmon2 7. usbmon3 8. usbmon4 9. usbmon5 10. usbmon6 11. usbmon7 12. usbmon8 13. any 14. lo (Loopback)
touch 1.pcap chmod ugo+w 1.pcap sudo tshark -i usbmon4 -w $HOME/1.pcap

I opened the 1.pcap file in wireshark and looked for fields called leftover data.

Here are two examples of such 'leftover data' fields:
Host to USB: 01 80 00 00 00 00 00 00
USB to Host: 80 06 17 f0 00 5c 0f ff

Subjecting the system to different temperatures helped me figure out what fields where changing -- I've marked them in bold above (blue for the thermocouple, red for the internal temperature). Interestingly, I got overflow when freezing the thermocouple between two ice cubes, which indicated that there was a fairly high lower limit (1.5 degrees)
The following are some of the data I harvested. The temperature is in the first column, the hex code is in the second one and the decimal value is in the third one:
Internal:
23.63 17a 378
23.69 17b 379
23.94 17f 383
23.75 17c 380
21.88 15e 350
22.31 165 357
22.88 16e 366

Thermocouple: 23.75 05f 95 23.50 05e 9 38.25 099 153 24.00 066 102 87.50 15e 350 79.50 13e 318
In other words, T(thermo)=output(thermo)*0.25+1.50 and T(int.)=(output(int.)-0.0025)/0.0625. Because the internal data is in fields 2:4 it's seen as e.g. 17b0 instead of 17b, so the decimal version needs to be divided by 16 (line 126 above).

I also set up an /etc/temper.conf file and did chown $USER /etc/temper.conf in order to be able to read it (must be a better way). I tried to calibrate the thermocouple in my kitchen with iced water and boiling water. The boiling water gave a reading of 102 degrees, while the iced water gave me 7.5 degrees Celsius even after what should've been long enough to achieve equilibrium. I'll calibrate it in the lab later. So for now a simple offset might be enough to give a working temperature.
temper-poll -p
Device #0 (bus 2 - port 2)
so temper.conf became
2-2: scale = 1.00, offset = -4.0


The temper-usb code is changing too quickly!. You'll thus need to read and understand the code rather than just pasting it in. Here are the full, edited cli.py an temper.py files.

cli.py
# encoding: utf-8
from __future__ import print_function
from temper import TemperHandler


def main():
    th = TemperHandler()
    devs = th.get_devices()
    readings = []
    print("Found %i devices" % len(devs))

    for i, dev in enumerate(devs):
        readings.append({'device': i,
                         'id':dev.getid(),
                         'temperature_c': dev.get_temperature(),
                         'temperature_f':
                         dev.get_temperature(format="fahrenheit")
                         })

    for reading in readings:
  if reading['id']==29697:
   print('Device #%i: %0.1f°C %0.1f°F' % (reading['device'],
                                               reading['temperature_c'],
                                               reading['temperature_f']))
  elif reading['id']==29699:
   print('Device #%i: %0.1f°C %0.1f°C' % (reading['device'],
                                               reading['temperature_c'],
                                               reading['temperature_f']))

temper.py
# encoding: utf-8
#
# Handles devices reporting themselves as USB VID/PID 0C45:7401 (mine also says RDing TEMPerV1.2).
#
# Copyright 2012, 2013 Philipp Adelt 
#
# This code is licensed under the GNU public license (GPL). See LICENSE.md for details.

import usb
import sys
import struct

VIDPIDs = [(0x0c45L,0x7401L),(0x0c45L,0x7402L),(0x0c45L,0x7403L)]
REQ_INT_LEN = 8
REQ_BULK_LEN = 8
TIMEOUT = 2000

class TemperDevice():
    def __init__(self, device):
        self._device = device
        self._handle = None

    def get_temperature(self, format='celsius'):
        try:
            if not self._handle:
                self._handle = self._device.open()
                try:
                    self._handle.detachKernelDriver(0)
                except usb.USBError:
                    pass
                try:
                    self._handle.detachKernelDriver(1)
                except usb.USBError:
                    pass
                self._handle.setConfiguration(1)
                self._handle.claimInterface(0)
                self._handle.claimInterface(1)
                self._handle.controlMsg(requestType=0x21, request=0x09, value=0x0201, index=0x00, buffer="\x01\x01", timeout=TIMEOUT) # ini_control_transfer

            self._control_transfer(self._handle, "\x01\x80\x33\x01\x00\x00\x00\x00") # uTemperatura
            self._interrupt_read(self._handle)
            self._control_transfer(self._handle, "\x01\x82\x77\x01\x00\x00\x00\x00") # uIni1
            self._interrupt_read(self._handle)
            self._control_transfer(self._handle, "\x01\x86\xff\x01\x00\x00\x00\x00") # uIni2
            self._interrupt_read(self._handle)
            self._interrupt_read(self._handle)
            self._control_transfer(self._handle, "\x01\x80\x33\x01\x00\x00\x00\x00") # uTemperatura
            data = self._interrupt_read(self._handle)
            data_s = "".join([chr(byte) for byte in data])

            if self._device.idProduct==29697: 
    temp_c = 125.0/32000.0*(struct.unpack('>h', data_s[2:4])[0])+0.0025
    if format == 'celsius':
     return temp_c
    elif format == 'fahrenheit':
     return temp_c*1.8+32.0
    elif format == 'millicelsius':
     return int(temp_c*1000)
    else:
     raise ValueError("Unknown format")
            elif self._device.idProduct==29699: 
    temp_c = (struct.unpack('>h', data_s[4:6])[0])*0.25-4.00
    temp_internal=(125.0/32000.0*(struct.unpack('>h', data_s[2:4])[0]))+0.0025
    if format == 'celsius':
     return temp_c
    elif format == 'fahrenheit':
     if self._device.idProduct==29697: #0x7401
      return temp_c*1.8+32.0
     elif self._device.idProduct==29699: #0x7403
      return temp_internal
    elif format == 'millicelsius':
     return int(temp_c*1000)
    else:
     raise ValueError("Unknown format")
        except usb.USBError, e:
            self.close()
            if "not permitted" in str(e):
                raise Exception("Permission problem accessing USB. Maybe I need to run as root?")
            else:
                raise
    
    def getid(self):
        #print self._device.idProduct
        return self._device.idProduct

    def close(self):
        if self._handle:
            try:
                self._handle.releaseInterface()
            except ValueError:
                pass
            self._handle = None

    def _control_transfer(self, handle, data):
        handle.controlMsg(requestType=0x21, request=0x09, value=0x0200, index=0x01, buffer=data, timeout=TIMEOUT)

    def _interrupt_read(self, handle):
        return handle.interruptRead(0x82, REQ_INT_LEN)

        
class TemperHandler():
    def __init__(self):
        busses = usb.busses()
        self._devices = []
        for bus in busses:
            self._devices.extend([TemperDevice(x) for x in bus.devices if (x.idVendor,x.idProduct) in VIDPIDs])

    def get_devices(self):
        return self._devices

16 April 2014

572. autorotate/superimpose python script

If you want to calculate reaction coordinates between two structures you need to make sure that the structures haven't been rotated or translated, something which easily happens if you allow symmetry in gaussian and (it seems) z-matrix in nwchem.

I've written a script that lets you take two structures and align and superimpose them so that only the atoms that take part in the reaction move.

It works by you defining a minimum of four atoms that aren't supposed to move /relative to each other/ (i.e. they can be translated/rotated --- just not relative to each other) between the two structures. Four atoms far from each other are ideal. You need to make sure that they also don't lie in the same plane, but form a three-dimensional space.

I've tried this on real molecules too and it works better than I'd ever dared to hope for. The more 'stationary' atoms that you can use to make up the transformation matrix, the better.


Example:
In this example atom F is in a different location in structures a and b. The structures have also been rotated relative to each other.

a.xyz
6 A A 0.00000 0.00000 1.00000 B 0.00000 1.00000 0.00000 C 1.00000 0.00000 0.00000 D -1.00000 0.00000 0.00000 E 0.00000 0.00000 -1.00000 F 0.00000 0.500000 0.00000
b.xyz
6 B A 1 0 0 B 0 1 0 C 0 0 -1 D 0 0 1 E -1 0 0 F 0 -1 0

./autorotate.py a.xyz b.xyz '1,2,3,4'
Selected atoms in molecules 1 and 2 ['A', 0.0, 0.0, 1.0] ['A', 1.0, 0.0, 0.0] ['B', 0.0, 1.0, 0.0] ['B', 0.0, 1.0, 0.0] ['C', 1.0, 0.0, 0.0] ['C', 0.0, 0.0, -1.0] ['D', -1.0, 0.0, 0.0] ['D', 0.0, 0.0, 1.0] Transformation max error: 3.33066907388e-16 Writing to a.rot.xyz

a.rot.xyz
6 A A 1.00000 0.00000 0.00000 B -0.00000 1.00000 -0.00000 C -0.00000 0.00000 -1.00000 D -0.00000 0.00000 1.00000 E -1.00000 -0.00000 -0.00000 F -0.00000 0.50000 -0.00000
This is how it looks (note that the axis aren't aligned with (1,0,0; 0,1,0; 0,0,1) but seem to go through the centre of the molecule):
a.xyz
a.rot.xyz


b.xyz





Code:
#!/usr/bin/python
import sys
import numpy as np

#autorotate input_1.xyz input_2.xyz '1,2,3,4'
# need to pick at least four atoms that are not in the same plane
# input_1.xyz will be rotated to align with input_2.xyz
# you pick at least four atoms that should have the same positions
# relative to one another (i.e. distance and relative geometry). These 
# are then used to calculate an affine transform matrix which is used 
# to rotate and translate structure input_1.xyz to overlap with 
# structure 2

def formatinput(argument):
 infile1=sys.argv[1]
 atoms=sys.argv[3]
 atoms=atoms.split(',')
 coord_sys=[]

 for n in atoms:
  coord_sys+=[int(n)-1]
 try:
  infile2=sys.argv[2]
 except:
  infile2=''
 infile=[infile1,infile2]
 return infile,coord_sys
 
def getrawdata(infile):
 f=open(infile,'r')
 
 n=0
 preamble=[]
 
 struct=[]
 
 for line in f:
  if n<2: data-blogger-escaped-if="" data-blogger-escaped-line.rstrip="" data-blogger-escaped-n="" data-blogger-escaped-preamble="">1:
   line=line.rstrip()
   struct+=[line]
  n+=1
 xyz=[struct]
 
 return xyz, preamble

def getcoords(rawdata,preamble,atoms):
 
 n=0
 cartesian=[]
 
 for structure in rawdata:
  n=n+1
  num="%03d" % (n,)
  for item in structure:
   
   coordx=filter(None,item.split(' '))
   coordy=filter(None,item.split('\t'))
   if len(coordx)>len(coordy):
    coords=coordx
   else:
    coords=coordy
      
   coordinates=[float(coords[1]),float(coords[2]),float(coords[3])]
   element=coords[0]
   cartesian+=[[element,float(coords[1]),float(coords[2]),float(coords[3])]]
     
 return cartesian

def getstructures(rawdata,preamble):
 
 n=0
 cartesian=[]
 
 for structure in rawdata:
  n=n+1
  num="%03d" % (n,)
  for item in structure:
   
   coordx=filter(None,item.split(' '))
   coordy=filter(None,item.split('\t'))
   if len(coordx)>len(coordy):
    coords=coordx
   else:
    coords=coordy
      
   coordinates=[float(coords[1]),float(coords[2]),float(coords[3])]
   element=coords[0]
   cartesian+=[coordinates]
     
 return cartesian

def affine_transform(atoms,structures):
# from http://stackoverflow.com/questions/20546182/how-to-perform-coordinates-affine-transformation-using-python-part-2
 primaryatomcoords=[]
 for n in atoms:
  primaryatomcoords+=[structures[0][n]]

 secondaryatomcoords=[]
 for n in atoms:
  secondaryatomcoords+=[structures[1][n]]

 primary = np.array(primaryatomcoords)
 secondary = np.array(secondaryatomcoords)
 primaryfull = np.array(structures[0])

 # Pad the data with ones, so that our transformation can do translations too
 n = primary.shape[0]
 pad = lambda x: np.hstack([x, np.ones((x.shape[0], 1))])
 unpad = lambda x: x[:,:-1]
 X = pad(primary)
 Y = pad(secondary)
 Xp= pad(primaryfull)

 # Solve the least squares problem X * A = Y
 # to find our transformation matrix A
 A, res, rank, s = np.linalg.lstsq(X, Y)

 transform = lambda x: unpad(np.dot(pad(x), A))

# print "Max error should be as small as possible if the rotation is successful"
# print "If max error is large you may have selected a bad set of atoms"
 print "Transformation max error:", np.abs(secondary - transform(primary)).max()
 secondaryfull=transform(primaryfull)
 return secondaryfull

def transform_xyz(tmatrix,newxyz):
 final_xyz=[]
 for n in newxyz:
  coord=np.mat(str(n[0])+';'+str(n[1])+';'+str(n[2]))
  newcoord=np.dot(tmatrix,coord)
  newcoord=np.matrix.tolist(newcoord)
  final_xyz+=[[ newcoord[0][0],newcoord[1][0],newcoord[2][0]]]
 return final_xyz

def genxyzstring(coords,elementnumber):
 x_str='%10.5f'% coords[0]
 y_str='%10.5f'% coords[1]
 z_str='%10.5f'% coords[2]
 element=elementnumber
 xyz_string=element+(3-len(element))*' '+10*' '+\
 (8-len(x_str))*' '+x_str+10*' '+(8-len(y_str))*' '+y_str+10*' '+(8-len(z_str))*' '+z_str+'\n'
 
 return xyz_string

def write_aligned(aligned_structure,atom_coords,preamble,outfile):
 outfile=outfile.replace('.xyz','.rot.xyz')
 print "Writing to ",outfile
 g=open(outfile,'w')
 g.write(str(preamble[0])+'\n'+str(preamble[1])+'\n')
 
 for n in range(0,len(aligned_structure)):
  xyzstring=genxyzstring(aligned_structure[n],atom_coords[n][0])
  g.write(xyzstring)
 g.close()
 return 0
 
if __name__ == "__main__":
 infile,atoms=formatinput(sys.argv)
 
 xyz=['','']
 preamble=['','']
 
 #get raw data
 xyz[0],preamble[0]=getrawdata(infile[0])
 xyz[1],preamble[1]=getrawdata(infile[1])

 atom_coords=[getcoords(xyz[0],preamble[0],atoms)]
 atom_coords+=[getcoords(xyz[1],preamble[1],atoms)]
 
 #collect structures from raw data
 structures=[getstructures(xyz[0],preamble[0])]
 structures+=[getstructures(xyz[1],preamble[1])]
 
 print "Selected atoms in molecules 1 and 2"
 for n in atoms:
  print atom_coords[0][n],atom_coords[1][n]
  
 #transform structure
 aligned_structure=affine_transform(atoms,structures)
 
 write_aligned(aligned_structure,atom_coords[0],preamble[0],str(infile[0]))
 

09 April 2014

571. Briefly: Dodgy/underpowered UPS?

I've built quite a few computers in the past, and in general I haven't had any issues beyond the odd dodgy RAM stick.

However, a while back I became careless and built a box ('Oxygen') where the motherboard didn't officially support the CPU. Swapping CPUs with another box seemed to solve the issues I had.

See e.g.
http://verahill.blogspot.com.au/2013/10/520-new-node-amd-fx-835032-gb-ram990-fx.html
http://verahill.blogspot.com.au/2013/10/523-random-reboots-troubleshooting-in.html

In the past couple of weeks I've begun to see some worrying signs that all isn't right. In particular I noticed the following in the dmesg output:
[693166.514897] [Hardware Error]: MC2 Error: VB Data ECC or parity error. [693166.514926] [Hardware Error]: Error Status: Corrected error, no action required. [693166.514934] [Hardware Error]: CPU:6 (15:1:2) MC2_STATUS[-|CE|MiscV|-|-|-|-|CECC]: 0x98414000010c0176 [693166.514955] [Hardware Error]: cache level: L2, tx: DATA, mem-tx: EV

A few days after that, the computer turned itself off without returning any additional error messages. It did cause me to look at the sensor output though (I've been logging it every two minutes for months), and I compared it with another computer ('Neon') which is completely stable. Note that both computers have been running the same types of jobs recently (large memory frequency jobs).

Hardware specs:
Oxygen: AMD FX8150, 32 gb ram, Corsair GS700, asrock 990 fx extreme3
Neon: AMD FX8350, 32 gb ram, Corsair GS800, gigabyte 990 fxa

Anyway, this is what I found:
On Neon the power output is very stable, while on Oxygen it jumps up and down between ca 45 W and 130 W.

Has it been a crappy UPS that has been causing the issues all along? Or do these plot mean nothing?

570. Briefly: restarting a g09 frequency job with SGE, using same queue

I've had g09 frequency jobs die on me, and in g09 analytical frequency jobs can only be restarted using the .rwf. Because the .rwf files are 160 gb, I don't want to be copying them back and forth between nodes. It's easier then to simply make sure that the restarted job is run on the same node as the original job.

A good resource for SGE related stuff is http://rous.mit.edu/index.php/SGE_Instructions_and_Tips#Submitting_jobs_to_specific_queues

Either way, first figure out what node the job ran on. Assuming that the job number was 445:
qacct -j 445|grep hostname
hostname compute-0-6.local

Next figure out the PID, as this is used to name the Gau-[PID].rwf file:
grep PID g03.g03out
Entering Link 1 = /share/apps/gaussian/g09/l1.exe PID= 24286.

You can now craft your restart file, g09_freq.restart -- you'll need to make sure that the paths are appropriate for your system:
%nprocshared=8 %Mem=900000000 %rwf=/scratch/Gau-24286.rwf %Chk=/home/me/jobs/testing/delta_631gplusstar-freq/delta_631gplusstar-freq.chk #P restart
(having empty lines at the end of the file is important) and a qsub file, g09_freq.qsub:
#$ -S /bin/sh #$ -cwd #$ -l h_rt=999:30:00 #$ -l h_vmem=8G #$ -j y #$ -pe orte 8 export GAUSS_SCRDIR=/tmp export GAUSS_EXEDIR=/share/apps/gaussian/g09/bsd:/share/apps/gaussian/g09/local:/share/apps/gaussian/g09/extras:/share/apps/gaussian/g09 /share/apps/gaussian/g09/g09 g09_freq.restart > g09_freq.out
Then submit it to the correct queue by doing
qsub -q all.q@compute-0-6.local g09_freq.qsub

The output goes to g09_freq.log. You know if the restart worked properly if it says
Skip MakeAB in pass 1 during restart.
and
Resume CPHF with iteration 214.

Note that restarting analytical frequency jobs in g09 can be a hit and miss affair. Jobs that run out of time are easy to restart, and some jobs that die silently have also been restarted successfully. On the other hand, a job that died because my resource allocations ran out couldn't be restarted i.e. restart started the freq job from scratch. The same happened with one a node of mine that has what seems like a dodgy PSU. Finally, I also couldn't restart jobs that died silently due to allocation all the RAM to g09 without leaving any to the OS (or at least that's the current best theory). It may thus be a good idea to back up the rwf file every now and again, in spite of the unwieldy size.

03 April 2014

569. Briefly: Dual monitor set-up on Debian Wheezy with Gnome and a single nvidia graphics card

This is very easy, but I might as well document it here anyway.

This morning another group threw out two functioning monitors and I grabbed both. While I haven't yet decided on what to do with the second one I decided to use one to make a dual monitor set-up for my work station.

My desktop has both onboard nvidia graphics and a separate pci-e nvidia (GT 430) graphics card. Using lspci only the external graphics card shows up, probably because the bios prioritises the external card and disables the onboard graphics.

The nvidia GT 430 card has three output ports: vga, hdmi and dvi. My main monitor (Dell P2411H, 1920x1080) has both vga and dvi, and my 'new' monitor (HP S1932, 1366x768) only has vga.

The first step was to physically connect both monitors to my computer. I originally thought I had to use one card per monitor, which would've necessitated me to reboot, change the bios and probably hand-craft an xorg.conf. I don't like rebooting, so I looked at the alternatives.

Apparently you can simply connect both monitors to the same card by using the different ports, so I hooked up the small screen to the vga port and the big one to the hdmi port.

After that it was a simple matter of opening 'displays' in the gnome 3 systems settings, setting both monitors to 'on', and arranging them side by side correctly by dragging them with the mouse:



I also had a look at it in nvidia-settings:

The only issue that remained was guake -- it was showing up in the 'wrong' screen (i.e. the left-most, smaller one).  This post showed how to edit: http://haifzhan.blogspot.com.au/2013/10/guake-dual-monitor-setup.html

This is how to do it on the version currently in wheezy, 0.4.3:
sudo vim `which guake`
814 def get_final_window_rect(self): 815 """Gets the final size of the main window of guake. The height 816 is the window_height property, width is window_width and the 817 horizontal alignment is given by window_alignment. 818 """ 819 screen = self.window.get_screen() 820 height = self.client.get_int(KEY('/general/window_height')) 821 width = 100 822 halignment = self.client.get_int(KEY('/general/window_halignment')) 823 824 # get the rectangle just from the first/default monitor in the 825 # future we might create a field to select which monitor you 826 # wanna use 827 828 #monitor = 0 # use the left most monitor 829 monitor = screen.get_n_monitors() - 1 # use the rightmost monitor 830 831 monitor_rect = screen.get_monitor_geometry(monitor) 832 window_rect = monitor_rect.copy() 833 total_width = window_rect.width 834 window_rect.height = window_rect.height * height / 100 835 window_rect.width = window_rect.width * width / 100 836 837 if width < monitor_rect.width: 838 if halignment == ALIGN_CENTER: 839 window_rect.x = monitor_rect.x+(monitor_rect.width - window_rect.width) / 2 840 elif halignment == ALIGN_LEFT: 841 window_rect.x = monitor_rect.x 842 elif halignment == ALIGN_RIGHT: 843 window_rect.x = monitor_rect.x+monitor_rect.width-window_rect.width 844 window_rect.y = monitor_rect.y 845 return window_rect 846

Note that the edited version will be overwritten when you upgrade guake.

25 March 2014

568. PyMol troubles in Jessie -- no solutions [update]

I and linux are not on speaking terms at the moment. My main issue right now is that the routing that I set up a long time ago (http://verahill.blogspot.com.au/2012/02/debian-testing-wheezy-64-configuring.html) no longer works properly -- yes, I can see the subnets, but the routing table is wrong, and traffic is routed over the wrong physical interface which leads to a significant slowdown.

In addition, pymol is unusable on my laptop which is running debian jessie. I'm not the only one with pymol related issues either -- follow the thread at the end of http://verahill.blogspot.com.au/p/miscellaneous.html and you will see another example of pymol troubles, troubles which I accidentally reproduced in the virtual machine later in this post. Anyway, these are unsolved issues but I post them here in case other people are wondering whether they are the only ones. I might even muster the courage to submit a bug report to debian although the first issue is definitely present in upstreams...and I think that the second one is as well. Unfortunately, pymol isn't quite free software and the online support doesn't appear to be as good as for many traditional FOSS packages.

Either way, here are some observations:

On a physical machine (Lenovo Thinkpad SL410 running Jessie:
UPDATE 26/3/2014: this works now after doing a full upgrade/dist-upgrade. Not sure what did it -- no obvious package that would've fixed it. The issue below with gallium remains though.

Version 1.7.0.0 on Linux niobium 3.11-2-amd64 #1 SMP Debian 3.11.10-1 (2013-12-04) x86_64 GNU/Linux.
Detected OpenGL version 2.0 or greater. Shaders available. Detected GLSL version 1.20. OpenGL graphics engine: GL_VENDOR: Intel Open Source Technology Center GL_RENDERER: Mesa DRI Mobile Intel GM45 Express Chipset GL_VERSION: 2.1 Mesa 9.2.2 Adjusting settings to improve performance for Intel cards. Detected 2 CPU cores. Enabled multithreaded rendering.

Building the upstreams version doesn't solve the issue.

inxi -G:
Graphics: Card: Intel Mobile 4 Series Integrated Graphics Controller X.Org: 1.15.0 drivers: intel (unloaded: fbdev,vesa) Resolution: 1366x768@60.0hz GLX Renderer: Mesa DRI Mobile Intel GM45 Express GLX Version: 2.1 Mesa 9.2.2

In a debian testing virtual machine (virtual box) running jessie:
Default DE seems to be Xfce. Before installing gnome i.e. in Xfce:
X Error of failed request: 0 Major opcode of failed request: 155 (GLX) Minor opcode of failed request: 26 (X_GLXMakeContextCurrent) Serial number of failed request: 49 Current serial number in output stream: 49 PyMOL: abrupt program termination.
After installing gnome:
Detected OpenGL version 2.0 or greater. Shaders available. Detected GLSL version 1.30. OpenGL graphics engine: GL_VENDOR: VMware, Inc. GL_RENDERER: Gallium 0.4 on llvmpipe (LLVM 3.3, 128 bits) GL_VERSION: 2.1 Mesa 9.2.2 pure virtual method called
and a normal window is opened:
While it says v 1.6.x it is version 1.7.0.0 and it says so in the terminal output -- just not in the fancy figure.


However, on loading any structure (e.g. xyz or pdb -- even as small as methane):
OpenGL version 2.0 or greater. Shaders available. Detected GLSL version 1.30. OpenGL graphics engine: GL_VENDOR: VMware, Inc. GL_RENDERER: Gallium 0.4 on llvmpipe (LLVM 3.3, 128 bits) GL_VERSION: 2.1 Mesa 9.2.2 CmdLoad: "/home/me/Downloads/methane.pdb" loaded as "methane". Segmentation fault
Running catchsegv gives a lot of output -- see bottom of this post.

I next installed the guest additions from the debian repos using
sudo apt-get install virtualbox-guest-*
(the guest additions that are installable via virtualbox itself fail to build on kernel 3.13) and rebooted.

At this point pymol shows
me@debian:~$ pymol ~/Downloads/methane.pdb OpenGL Warning: glFlushVertexArrayRangeNV not found in mesa table OpenGL Warning: glVertexArrayRangeNV not found in mesa table OpenGL Warning: glCombinerInputNV not found in mesa table OpenGL Warning: glCombinerOutputNV not found in mesa table OpenGL Warning: glCombinerParameterfNV not found in mesa table OpenGL Warning: glCombinerParameterfvNV not found in mesa table OpenGL Warning: glCombinerParameteriNV not found in mesa table OpenGL Warning: glCombinerParameterivNV not found in mesa table OpenGL Warning: glFinalCombinerInputNV not found in mesa table OpenGL Warning: glGetCombinerInputParameterfvNV not found in mesa table OpenGL Warning: glGetCombinerInputParameterivNV not found in mesa table OpenGL Warning: glGetCombinerOutputParameterfvNV not found in mesa table OpenGL Warning: glGetCombinerOutputParameterivNV not found in mesa table OpenGL Warning: glGetFinalCombinerInputParameterfvNV not found in mesa table OpenGL Warning: glGetFinalCombinerInputParameterivNV not found in mesa table OpenGL Warning: glDeleteFencesNV not found in mesa table OpenGL Warning: glFinishFenceNV not found in mesa table OpenGL Warning: glGenFencesNV not found in mesa table OpenGL Warning: glGetFenceivNV not found in mesa table OpenGL Warning: glIsFenceNV not found in mesa table OpenGL Warning: glSetFenceNV not found in mesa table OpenGL Warning: glTestFenceNV not found in mesa table PyMOL(TM) Molecular Graphics System, Version 1.7.0.0. Copyright (c) Schrodinger, LLC. All Rights Reserved. Created by Warren L. DeLano, Ph.D. PyMOL is user-supported open-source software. Although some versions are freely available, PyMOL is not in the public domain. If PyMOL is helpful in your work or study, then please volunteer support for our ongoing efforts to create open and affordable scientific software by purchasing a PyMOL Maintenance and/or Support subscription. More information can be found at "http://www.pymol.org". Enter "help" for a list of commands. Enter "help " for information on a specific command. Hit ESC anytime to toggle between text and graphics. Detected OpenGL version 2.0 or greater. Shaders available. Detected GLSL version 4.20. OpenGL Warning: No pincher, please call crStateSetCurrentPointers() in your SPU OpenGL graphics engine: GL_VENDOR: Humper GL_RENDERER: Chromium GL_VERSION: 2.1 Chromium 1.9 CmdLoad: "/home/me/Downloads/methane.pdb" loaded as "methane". OpenGL Warning: No pincher, please call crStateSetCurrentPointers() in your SPU
and the molecule shows up briefly before the window goes black, which constitutes a bit of progress.

Closing the program gives
PyMOL: normal program termination. Segmentation fault

catchsegv output using the gallium driver
PyMOL(TM) Molecular Graphics System, Version 1.7.0.0. Copyright (c) Schrodinger, LLC. All Rights Reserved. Created by Warren L. DeLano, Ph.D. PyMOL is user-supported open-source software. Although some versions are freely available, PyMOL is not in the public domain. If PyMOL is helpful in your work or study, then please volunteer support for our ongoing efforts to create open and affordable scientific software by purchasing a PyMOL Maintenance and/or Support subscription. More information can be found at "http://www.pymol.org". Enter "help" for a list of commands. Enter "help " for information on a specific command. Hit ESC anytime to toggle between text and graphics. Detected OpenGL version 2.0 or greater. Shaders available. Detected GLSL version 1.30. OpenGL graphics engine: GL_VENDOR: VMware, Inc. GL_RENDERER: Gallium 0.4 on llvmpipe (LLVM 3.3, 128 bits) GL_VERSION: 2.1 Mesa 9.2.2 ExecutiveLoad: "methane.xyz" loaded as "methane", through state 1. Segmentation fault *** Segmentation fault Register dump: RAX: 0000000002214e08 RBX: 000000000000ffff RCX: 0000000000000000 RDX: 00007f1db5b69640 RSI: 00000000ffffffff RDI: 00007fff4c2e7d60 RBP: 00007fff4c0e7d80 R8 : 0000000000000000 R9 : 0000000000000000 R10: 0000000002088a50 R11: 000000000208c940 R12: 000000000248b650 R13: 00007f1dafad70fc R14: 00007fff4c0e7c94 R15: 0000000000000000 RSP: 00007fff4c0e7c10 RIP: 00007f1daf8f4202 EFLAGS: 00010206 CS: 0033 FS: 0000 GS: 0000 Trap: 0000000e Error: 00000006 OldMask: 00000000 CR2: 4c2eb110 FPUCW: 0000037f FPUSW: 00000000 TAG: 00000000 RIP: 00000000 RDP: 00000000 ST(0) 0000 0000000000000000 ST(1) 0000 0000000000000000 ST(2) 0000 0000000000000000 ST(3) 0000 0000000000000000 ST(4) 0000 0000000000000000 ST(5) 0000 0000000000000000 ST(6) 0000 0000000000000000 ST(7) 0000 0000000000000000 mxcsr: 9ffb XMM0: 00000000000000000000000000000000 XMM1: 00000000000000000000000000000000 XMM2: 00000000000000000000000000000000 XMM3: 00000000000000000000000000000000 XMM4: 00000000000000000000000000000000 XMM5: 00000000000000000000000000000000 XMM6: 00000000000000000000000000000000 XMM7: 00000000000000000000000000000000 XMM8: 00000000000000000000000000000000 XMM9: 00000000000000000000000000000000 XMM10: 00000000000000000000000000000000 XMM11: 00000000000000000000000000000000 XMM12: 00000000000000000000000000000000 XMM13: 00000000000000000000000000000000 XMM14: 00000000000000000000000000000000 XMM15: 00000000000000000000000000000000 Backtrace: /usr/lib/x86_64-linux-gnu/dri/swrast_dri.so(+0x2ed202)[0x7f1daf8f4202] /usr/lib/x86_64-linux-gnu/dri/swrast_dri.so(+0x2e8dfe)[0x7f1daf8efdfe] /usr/lib/x86_64-linux-gnu/dri/swrast_dri.so(+0x2f1a69)[0x7f1daf8f8a69] /usr/lib/x86_64-linux-gnu/dri/swrast_dri.so(+0x338f6f)[0x7f1daf93ff6f] /usr/lib/x86_64-linux-gnu/dri/swrast_dri.so(+0x33a059)[0x7f1daf941059] /usr/lib/x86_64-linux-gnu/dri/swrast_dri.so(llvmpipe_update_fs+0x99d)[0x7f1daf945bbd] /usr/lib/x86_64-linux-gnu/dri/swrast_dri.so(llvmpipe_update_derived+0x1a0)[0x7f1daf93e9c0] /usr/lib/x86_64-linux-gnu/dri/swrast_dri.so(lp_setup_update_state+0xe8)[0x7f1daf938d08] /usr/lib/x86_64-linux-gnu/dri/swrast_dri.so(+0x33726b)[0x7f1daf93e26b] /usr/lib/x86_64-linux-gnu/dri/swrast_dri.so(+0x208c40)[0x7f1daf80fc40] /usr/lib/x86_64-linux-gnu/dri/swrast_dri.so(+0x20908e)[0x7f1daf81008e] /usr/lib/x86_64-linux-gnu/dri/swrast_dri.so(+0x201f94)[0x7f1daf808f94] /usr/lib/x86_64-linux-gnu/dri/swrast_dri.so(+0x2049fa)[0x7f1daf80b9fa] /usr/lib/x86_64-linux-gnu/dri/swrast_dri.so(+0x200235)[0x7f1daf807235] /usr/lib/x86_64-linux-gnu/dri/swrast_dri.so(+0x2010e4)[0x7f1daf8080e4] /usr/lib/x86_64-linux-gnu/dri/swrast_dri.so(+0x2f7285)[0x7f1daf8fe285] /usr/lib/x86_64-linux-gnu/dri/swrast_dri.so(+0x2f7454)[0x7f1daf8fe454] /usr/lib/x86_64-linux-gnu/dri/swrast_dri.so(+0x212b21)[0x7f1daf819b21] /usr/lib/x86_64-linux-gnu/dri/swrast_dri.so(+0x20b916)[0x7f1daf812916] /usr/lib/x86_64-linux-gnu/dri/swrast_dri.so(+0x20bd96)[0x7f1daf812d96] /usr/lib/x86_64-linux-gnu/dri/swrast_dri.so(+0x326a72)[0x7f1daf92da72] /usr/lib/x86_64-linux-gnu/dri/swrast_dri.so(+0x14fb1c)[0x7f1daf756b1c] /usr/lib/x86_64-linux-gnu/dri/swrast_dri.so(+0x1294c4)[0x7f1daf7304c4] /usr/lib/python2.7/dist-packages/pymol/_cmd.so(+0xf3bb9)[0x7f1db4c16bb9] /usr/lib/python2.7/dist-packages/pymol/_cmd.so(CGORenderGL+0x745)[0x7f1db4c359b5] /usr/lib/python2.7/dist-packages/pymol/_cmd.so(+0x1a5b7c)[0x7f1db4cc8b7c] /usr/lib/python2.7/dist-packages/pymol/_cmd.so(CoordSetRender+0x323)[0x7f1db4d56253] /usr/lib/python2.7/dist-packages/pymol/_cmd.so(+0x1e5203)[0x7f1db4d08203] /usr/lib/python2.7/dist-packages/pymol/_cmd.so(SceneRenderAllObject+0xc1)[0x7f1db4beb291] /usr/lib/python2.7/dist-packages/pymol/_cmd.so(+0xc8898)[0x7f1db4beb898] /usr/lib/python2.7/dist-packages/pymol/_cmd.so(DoRendering+0x204)[0x7f1db4bebe54] /usr/lib/python2.7/dist-packages/pymol/_cmd.so(SceneRender+0x13c7)[0x7f1db4bf2a77] /usr/lib/python2.7/dist-packages/pymol/_cmd.so(OrthoDoDraw+0x104c)[0x7f1db4c918ec] /usr/lib/python2.7/dist-packages/pymol/_cmd.so(ExecutiveDrawNow+0xc1)[0x7f1db4df4ab1] /usr/lib/python2.7/dist-packages/pymol/_cmd.so(PyMOL_DrawWithoutLock+0x16e)[0x7f1db4e5a73e] /usr/lib/python2.7/dist-packages/pymol/_cmd.so(+0x3233a0)[0x7f1db4e463a0] /usr/lib/python2.7/dist-packages/pymol/_cmd.so(+0x3241fc)[0x7f1db4e471fc] /usr/lib/x86_64-linux-gnu/libglut.so.3(+0x22834)[0x7f1db3cd7834] /usr/lib/x86_64-linux-gnu/libglut.so.3(fgEnumWindows+0x39)[0x7f1db3cdb279] /usr/lib/x86_64-linux-gnu/libglut.so.3(glutMainLoopEvent+0x11c)[0x7f1db3cd7d7c] /usr/lib/x86_64-linux-gnu/libglut.so.3(glutMainLoop+0xa1)[0x7f1db3cd8671] /usr/lib/python2.7/dist-packages/pymol/_cmd.so(+0x324b30)[0x7f1db4e47b30] /usr/lib/python2.7/dist-packages/pymol/_cmd.so(main_shared+0x88)[0x7f1db4e48698] /usr/lib/python2.7/dist-packages/pymol/_cmd.so(+0x3039b4)[0x7f1db4e269b4] python2.7(PyEval_EvalFrameEx+0x42d)[0x51f18d] python2.7(PyEval_EvalCodeEx+0x2ac)[0x53bd7c] python2.7(PyEval_EvalFrameEx+0x7f6)[0x51f556] python2.7(PyEval_EvalCodeEx+0x2ac)[0x53bd7c] python2.7(PyEval_EvalCode+0x32)[0x5b0b62] python2.7(PyEval_EvalFrameEx+0x4f5c)[0x523cbc] python2.7(PyEval_EvalCodeEx+0x2ac)[0x53bd7c] python2.7(PyEval_EvalFrameEx+0x7f6)[0x51f556] python2.7[0x4e738a] python2.7(PyObject_Call+0x36)[0x55f4c6] python2.7[0x41e910] python2.7(Py_Main+0x898)[0x44bfba] /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf5)[0x7f1db57e7b45] python2.7[0x57b33e] Memory map: 00400000-006bc000 r-xp 00000000 08:01 274159 /usr/bin/python2.7 008bc000-008bd000 r--p 002bc000 08:01 274159 /usr/bin/python2.7 008bd000-00932000 rw-p 002bd000 08:01 274159 /usr/bin/python2.7 00932000-00944000 rw-p 00000000 00:00 0 01316000-02a92000 rw-p 00000000 00:00 0 [heap] 7f1da4000000-7f1da465c000 rw-p 00000000 00:00 0 7f1da465c000-7f1da8000000 ---p 00000000 00:00 0 7f1da8e6b000-7f1da8eeb000 rw-p 00000000 00:00 0 7f1da913e000-7f1da917e000 rw-p 00000000 00:00 0 7f1da917e000-7f1da91fe000 rwxp 00000000 00:00 0 7f1da91fe000-7f1da936b000 rw-p 00000000 00:00 0 7f1da936b000-7f1da9373000 r-xp 00000000 08:01 274422 /usr/lib/python2.7/lib-dynload/_ssl.x86_64-linux-gnu.so 7f1da9373000-7f1da9572000 ---p 00008000 08:01 274422 /usr/lib/python2.7/lib-dynload/_ssl.x86_64-linux-gnu.so 7f1da9572000-7f1da9573000 r--p 00007000 08:01 274422 /usr/lib/python2.7/lib-dynload/_ssl.x86_64-linux-gnu.so 7f1da9573000-7f1da9574000 rw-p 00008000 08:01 274422 /usr/lib/python2.7/lib-dynload/_ssl.x86_64-linux-gnu.so 7f1da9574000-7f1da9580000 r-xp 00000000 08:01 521244 /lib/x86_64-linux-gnu/libnss_files-2.18.so 7f1da9580000-7f1da977f000 ---p 0000c000 08:01 521244 /lib/x86_64-linux-gnu/libnss_files-2.18.so 7f1da977f000-7f1da9780000 r--p 0000b000 08:01 521244 /lib/x86_64-linux-gnu/libnss_files-2.18.so 7f1da9780000-7f1da9781000 rw-p 0000c000 08:01 521244 /lib/x86_64-linux-gnu/libnss_files-2.18.so 7f1da9781000-7f1da978b000 r-xp 00000000 08:01 521253 /lib/x86_64-linux-gnu/libnss_nis-2.18.so 7f1da978b000-7f1da998a000 ---p 0000a000 08:01 521253 /lib/x86_64-linux-gnu/libnss_nis-2.18.so 7f1da998a000-7f1da998b000 r--p 00009000 08:01 521253 /lib/x86_64-linux-gnu/libnss_nis-2.18.so 7f1da998b000-7f1da998c000 rw-p 0000a000 08:01 521253 /lib/x86_64-linux-gnu/libnss_nis-2.18.so 7f1da998c000-7f1da9993000 r-xp 00000000 08:01 521246 /lib/x86_64-linux-gnu/libnss_compat-2.18.so 7f1da9993000-7f1da9b92000 ---p 00007000 08:01 521246 /lib/x86_64-linux-gnu/libnss_compat-2.18.so 7f1da9b92000-7f1da9b93000 r--p 00006000 08:01 521246 /lib/x86_64-linux-gnu/libnss_compat-2.18.so 7f1da9b93000-7f1da9b94000 rw-p 00007000 08:01 521246 /lib/x86_64-linux-gnu/libnss_compat-2.18.so 7f1da9b94000-7f1da9b95000 ---p 00000000 00:00 0 7f1da9b95000-7f1daa415000 rw-p 00000000 00:00 0 [stack:5355] 7f1daa415000-7f1daa595000 rwxp 00000000 00:00 0 7f1daa595000-7f1daa615000 rw-p 00000000 00:00 0 7f1daa615000-7f1daa616000 ---p 00000000 00:00 0 7f1daa616000-7f1daae16000 rw-p 00000000 00:00 0 [stack:5354] 7f1daae16000-7f1daae1f000 r-xp 00000000 08:01 270355 /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 7f1daae1f000-7f1dab01e000 ---p 00009000 08:01 270355 /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 7f1dab01e000-7f1dab01f000 r--p 00008000 08:01 270355 /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 7f1dab01f000-7f1dab020000 rw-p 00009000 08:01 270355 /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 7f1dab020000-7f1dab022000 r-xp 00000000 08:01 277479 /usr/lib/x86_64-linux-gnu/libXss.so.1.0.0 7f1dab022000-7f1dab222000 ---p 00002000 08:01 277479 /usr/lib/x86_64-linux-gnu/libXss.so.1.0.0 7f1dab222000-7f1dab223000 rw-p 00002000 08:01 277479 /usr/lib/x86_64-linux-gnu/libXss.so.1.0.0 7f1dab223000-7f1dab25d000 r-xp 00000000 08:01 270332 /usr/lib/x86_64-linux-gnu/libfontconfig.so.1.8.0 7f1dab25d000-7f1dab45c000 ---p 0003a000 08:01 270332 /usr/lib/x86_64-linux-gnu/libfontconfig.so.1.8.0 7f1dab45c000-7f1dab45e000 r--p 00039000 08:01 270332 /usr/lib/x86_64-linux-gnu/libfontconfig.so.1.8.0 7f1dab45e000-7f1dab45f000 rw-p 0003b000 08:01 270332 /usr/lib/x86_64-linux-gnu/libfontconfig.so.1.8.0 7f1dab45f000-7f1dab473000 r-xp 00000000 08:01 275893 /usr/lib/x86_64-linux-gnu/libXft.so.2.3.1 7f1dab473000-7f1dab673000 ---p 00014000 08:01 275893 /usr/lib/x86_64-linux-gnu/libXft.so.2.3.1 7f1dab673000-7f1dab674000 rw-p 00014000 08:01 275893 /usr/lib/x86_64-linux-gnu/libXft.so.2.3.1 7f1dab674000-7f1dab689000 r-xp 00000000 08:01 521239 /lib/x86_64-linux-gnu/libnsl-2.18.so 7f1dab689000-7f1dab888000 ---p 00015000 08:01 521239 /lib/x86_64-linux-gnu/libnsl-2.18.so 7f1dab888000-7f1dab889000 r--p 00014000 08:01 521239 /lib/x86_64-linux-gnu/libnsl-2.18.so 7f1dab889000-7f1dab88a000 rw-p 00015000 08:01 521239 /lib/x86_64-linux-gnu/libnsl-2.18.so 7f1dab88a000-7f1dab88c000 rw-p 00000000 00:00 0 7f1dab88c000-7f1dab9a5000 r-xp 00000000 08:01 299562 /usr/lib/x86_64-linux-gnu/libtcl8.5.so 7f1dab9a5000-7f1dabba5000 ---p 00119000 08:01 299562 /usr/lib/x86_64-linux-gnu/libtcl8.5.so 7f1dabba5000-7f1dabba9000 r--p 00119000 08:01 299562 /usr/lib/x86_64-linux-gnu/libtcl8.5.so 7f1dabba9000-7f1dabbb0000 rw-p 0011d000 08:01 299562 /usr/lib/x86_64-linux-gnu/libtcl8.5.so 7f1dabbb0000-7f1dabbb1000 rw-p 00000000 00:00 0 7f1dabbb1000-7f1dabcdd000 r-xp 00000000 08:01 299568 /usr/lib/x86_64-linux-gnu/libtk8.5.so 7f1dabcdd000-7f1dabedc000 ---p 0012c000 08:01 299568 /usr/lib/x86_64-linux-gnu/libtk8.5.so 7f1dabedc000-7f1dabeea000 r--p 0012b000 08:01 299568 /usr/lib/x86_64-linux-gnu/libtk8.5.so 7f1dabeea000-7f1dabefb000 rw-p 00139000 08:01 299568 /usr/lib/x86_64-linux-gnu/libtk8.5.so 7f1dabefb000-7f1dabefc000 rw-p 00000000 00:00 0 7f1dabefc000-7f1dac003000 r-xp 00000000 08:01 299629 /usr/lib/libBLT.2.4.so.8.5 7f1dac003000-7f1dac203000 ---p 00107000 08:01 299629 /usr/lib/libBLT.2.4.so.8.5 7f1dac203000-7f1dac204000 r--p 00107000 08:01 299629 /usr/lib/libBLT.2.4.so.8.5 7f1dac204000-7f1dac221000 rw-p 00108000 08:01 299629 /usr/lib/libBLT.2.4.so.8.5 7f1dac221000-7f1dac222000 rw-p 00000000 00:00 0 7f1dac222000-7f1dac22e000 r-xp 00000000 08:01 299653 /usr/lib/python2.7/lib-dynload/_tkinter.so 7f1dac22e000-7f1dac42d000 ---p 0000c000 08:01 299653 /usr/lib/python2.7/lib-dynload/_tkinter.so 7f1dac42d000-7f1dac42e000 r--p 0000b000 08:01 299653 /usr/lib/python2.7/lib-dynload/_tkinter.so 7f1dac42e000-7f1dac430000 rw-p 0000c000 08:01 299653 /usr/lib/python2.7/lib-dynload/_tkinter.so 7f1dac430000-7f1dac4b0000 rw-p 00000000 00:00 0 7f1dac4b0000-7f1dacf30000 rwxp 00000000 00:00 0 7f1dacf30000-7f1dad031000 rw-p 00000000 00:00 0 7f1dad032000-7f1dad132000 rwxp 00000000 00:00 0 7f1dad132000-7f1dad93f000 rw-p 00000000 00:00 0 7f1dad93f000-7f1dad976000 r-xp 00000000 08:01 278421 /usr/lib/x86_64-linux-gnu/libtxc_dxtn_s2tc.so.0.0.0 7f1dad976000-7f1dadb75000 ---p 00037000 08:01 278421 /usr/lib/x86_64-linux-gnu/libtxc_dxtn_s2tc.so.0.0.0 7f1dadb75000-7f1dadb76000 r--p 00036000 08:01 278421 /usr/lib/x86_64-linux-gnu/libtxc_dxtn_s2tc.so.0.0.0 7f1dadb76000-7f1dadb77000 rw-p 00037000 08:01 278421 /usr/lib/x86_64-linux-gnu/libtxc_dxtn_s2tc.so.0.0.0 7f1dadb77000-7f1daf0ac000 r-xp 00000000 08:01 270279 /usr/lib/x86_64-linux-gnu/libLLVM-3.3.so.1 7f1daf0ac000-7f1daf1c3000 rw-p 01535000 08:01 270279 /usr/lib/x86_64-linux-gnu/libLLVM-3.3.so.1 7f1daf1c3000-7f1daf1d5000 rw-p 00000000 00:00 0 7f1daf1d5000-7f1daf1dc000 r-xp 00000000 08:01 265205 /usr/lib/x86_64-linux-gnu/libffi.so.6.0.1 7f1daf1dc000-7f1daf3db000 ---p 00007000 08:01 265205 /usr/lib/x86_64-linux-gnu/libffi.so.6.0.1 7f1daf3db000-7f1daf3dc000 r--p 00006000 08:01 265205 /usr/lib/x86_64-linux-gnu/libffi.so.6.0.1 7f1daf3dc000-7f1daf3dd000 rw-p 00007000 08:01 265205 /usr/lib/x86_64-linux-gnu/libffi.so.6.0.1 7f1daf3dd000-7f1daf404000 r-xp 00000000 08:01 521410 /lib/x86_64-linux-gnu/libexpat.so.1.6.0 7f1daf404000-7f1daf604000 ---p 00027000 08:01 521410 /lib/x86_64-linux-gnu/libexpat.so.1.6.0 7f1daf604000-7f1daf606000 r--p 00027000 08:01 521410 /lib/x86_64-linux-gnu/libexpat.so.1.6.0 7f1daf606000-7f1daf607000 rw-p 00029000 08:01 521410 /lib/x86_64-linux-gnu/libexpat.so.1.6.0 7f1daf607000-7f1dafb63000 r-xp 00000000 08:01 401825 /usr/lib/x86_64-linux-gnu/dri/swrast_dri.so 7f1dafb63000-7f1dafd63000 ---p 0055c000 08:01 401825 /usr/lib/x86_64-linux-gnu/dri/swrast_dri.so 7f1dafd63000-7f1dafd80000 r--p 0055c000 08:01 401825 /usr/lib/x86_64-linux-gnu/dri/swrast_dri.so 7f1dafd80000-7f1dafd8a000 rw-p 00579000 08:01 401825 /usr/lib/x86_64-linux-gnu/dri/swrast_dri.so 7f1dafd8a000-7f1daffb0000 rw-p 00000000 00:00 0 7f1daffb7000-7f1db03b1000 rw-p 00000000 00:00 0 7f1db03b1000-7f1db0575000 r-xp 00000000 08:01 265863 /usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.0 7f1db0575000-7f1db0775000 ---p 001c4000 08:01 265863 /usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.0 7f1db0775000-7f1db0790000 r--p 001c4000 08:01 265863 /usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.0 7f1db0790000-7f1db079f000 rw-p 001df000 08:01 265863 /usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.0 7f1db079f000-7f1db07a3000 rw-p 00000000 00:00 0 7f1db07a3000-7f1db07f8000 r-xp 00000000 08:01 265878 /usr/lib/x86_64-linux-gnu/libssl.so.1.0.0 7f1db07f8000-7f1db09f8000 ---p 00055000 08:01 265878 /usr/lib/x86_64-linux-gnu/libssl.so.1.0.0 7f1db09f8000-7f1db09fb000 r--p 00055000 08:01 265878 /usr/lib/x86_64-linux-gnu/libssl.so.1.0.0 7f1db09fb000-7f1db0a02000 rw-p 00058000 08:01 265878 /usr/lib/x86_64-linux-gnu/libssl.so.1.0.0 7f1db0a02000-7f1db0a06000 r-xp 00000000 08:01 274397 /usr/lib/python2.7/lib-dynload/_hashlib.x86_64-linux-gnu.so 7f1db0a06000-7f1db0c05000 ---p 00004000 08:01 274397 /usr/lib/python2.7/lib-dynload/_hashlib.x86_64-linux-gnu.so 7f1db0c05000-7f1db0c06000 r--p 00003000 08:01 274397 /usr/lib/python2.7/lib-dynload/_hashlib.x86_64-linux-gnu.so 7f1db0c06000-7f1db0c07000 rw-p 00004000 08:01 274397 /usr/lib/python2.7/lib-dynload/_hashlib.x86_64-linux-gnu.so 7f1db0c07000-7f1db0d08000 rw-p 00000000 00:00 0 7f1db0d08000-7f1db0d0c000 r-xp 00000000 08:01 521455 /lib/x86_64-linux-gnu/libuuid.so.1.3.0 7f1db0d0c000-7f1db0f0b000 ---p 00004000 08:01 521455 /lib/x86_64-linux-gnu/libuuid.so.1.3.0 7f1db0f0b000-7f1db0f0c000 r--p 00003000 08:01 521455 /lib/x86_64-linux-gnu/libuuid.so.1.3.0 7f1db0f0c000-7f1db0f0d000 rw-p 00004000 08:01 521455 /lib/x86_64-linux-gnu/libuuid.so.1.3.0 7f1db0f0d000-7f1db0f24000 r-xp 00000000 08:01 271415 /usr/lib/x86_64-linux-gnu/libICE.so.6.3.0 7f1db0f24000-7f1db1123000 ---p 00017000 08:01 271415 /usr/lib/x86_64-linux-gnu/libICE.so.6.3.0 7f1db1123000-7f1db1125000 rw-p 00016000 08:01 271415 /usr/lib/x86_64-linux-gnu/libICE.so.6.3.0 7f1db1125000-7f1db1128000 rw-p 00000000 00:00 0 7f1db1128000-7f1db112f000 r-xp 00000000 08:01 271417 /usr/lib/x86_64-linux-gnu/libSM.so.6.0.1 7f1db112f000-7f1db132e000 ---p 00007000 08:01 271417 /usr/lib/x86_64-linux-gnu/libSM.so.6.0.1 7f1db132e000-7f1db132f000 rw-p 00006000 08:01 271417 /usr/lib/x86_64-linux-gnu/libSM.so.6.0.1 7f1db132f000-7f1db1334000 r-xp 00000000 08:01 270065 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0 7f1db1334000-7f1db1533000 ---p 00005000 08:01 270065 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0 7f1db1533000-7f1db1534000 rw-p 00004000 08:01 270065 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0 7f1db1534000-7f1db1537000 r-xp 00000000 08:01 270059 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 7f1db1537000-7f1db1736000 ---p 00003000 08:01 270059 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 7f1db1736000-7f1db1737000 r--p 00002000 08:01 270059 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 7f1db1737000-7f1db1738000 rw-p 00003000 08:01 270059 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 7f1db1738000-7f1db1797000 r-xp 00000000 08:01 271512 /usr/lib/x86_64-linux-gnu/libXt.so.6.0.0 7f1db1797000-7f1db1997000 ---p 0005f000 08:01 271512 /usr/lib/x86_64-linux-gnu/libXt.so.6.0.0 7f1db1997000-7f1db1998000 r--p 0005f000 08:01 271512 /usr/lib/x86_64-linux-gnu/libXt.so.6.0.0 7f1db1998000-7f1db199d000 rw-p 00060000 08:01 271512 /usr/lib/x86_64-linux-gnu/libXt.so.6.0.0 7f1db199d000-7f1db199e000 rw-p 00000000 00:00 0 7f1db199e000-7f1db19a5000 r-xp 00000000 08:01 521242 /lib/x86_64-linux-gnu/librt-2.18.so 7f1db19a5000-7f1db1ba4000 ---p 00007000 08:01 521242 /lib/x86_64-linux-gnu/librt-2.18.so 7f1db1ba4000-7f1db1ba5000 r--p 00006000 08:01 521242 /lib/x86_64-linux-gnu/librt-2.18.so 7f1db1ba5000-7f1db1ba6000 rw-p 00007000 08:01 521242 /lib/x86_64-linux-gnu/librt-2.18.so 7f1db1ba6000-7f1db1bb1000 r-xp 00000000 08:01 270264 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 7f1db1bb1000-7f1db1db0000 ---p 0000b000 08:01 270264 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 7f1db1db0000-7f1db1db1000 r--p 0000a000 08:01 270264 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 7f1db1db1000-7f1db1db2000 rw-p 0000b000 08:01 270264 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 7f1db1db2000-7f1db1db7000 r-xp 00000000 08:01 270342 /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1.0.0 7f1db1db7000-7f1db1fb6000 ---p 00005000 08:01 270342 /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1.0.0 7f1db1fb6000-7f1db1fb7000 r--p 00004000 08:01 270342 /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1.0.0 7f1db1fb7000-7f1db1fb8000 rw-p 00005000 08:01 270342 /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1.0.0 7f1db1fb8000-7f1db1fd6000 r-xp 00000000 08:01 270070 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 7f1db1fd6000-7f1db21d5000 ---p 0001e000 08:01 270070 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 7f1db21d5000-7f1db21d6000 r--p 0001d000 08:01 270070 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 7f1db21d6000-7f1db21d7000 rw-p 0001e000 08:01 270070 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 7f1db21d7000-7f1db21da000 r-xp 00000000 08:01 270293 /usr/lib/x86_64-linux-gnu/libxcb-dri2.so.0.0.0 7f1db21da000-7f1db23da000 ---p 00003000 08:01 270293 /usr/lib/x86_64-linux-gnu/libxcb-dri2.so.0.0.0 7f1db23da000-7f1db23db000 r--p 00003000 08:01 270293 /usr/lib/x86_64-linux-gnu/libxcb-dri2.so.0.0.0 7f1db23db000-7f1db23dc000 rw-p 00004000 08:01 270293 /usr/lib/x86_64-linux-gnu/libxcb-dri2.so.0.0.0 7f1db23dc000-7f1db23f1000 r-xp 00000000 08:01 270334 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 7f1db23f1000-7f1db25f0000 ---p 00015000 08:01 270334 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 7f1db25f0000-7f1db25f2000 r--p 00014000 08:01 270334 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 7f1db25f2000-7f1db25f3000 rw-p 00016000 08:01 270334 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 7f1db25f3000-7f1db25f4000 r-xp 00000000 08:01 270305 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 7f1db25f4000-7f1db27f3000 ---p 00001000 08:01 270305 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 7f1db27f3000-7f1db27f4000 r--p 00000000 08:01 270305 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 7f1db27f4000-7f1db27f5000 rw-p 00001000 08:01 270305 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 7f1db27f5000-7f1db27fa000 r-xp 00000000 08:01 270336 /usr/lib/x86_64-linux-gnu/libXfixes.so.3.1.0 7f1db27fa000-7f1db29f9000 ---p 00005000 08:01 270336 /usr/lib/x86_64-linux-gnu/libXfixes.so.3.1.0 7f1db29f9000-7f1db29fa000 r--p 00004000 08:01 270336 /usr/lib/x86_64-linux-gnu/libXfixes.so.3.1.0 7f1db29fa000-7f1db29fb000 rw-p 00005000 08:01 270336 /usr/lib/x86_64-linux-gnu/libXfixes.so.3.1.0 7f1db29fb000-7f1db29fd000 r-xp 00000000 08:01 270338 /usr/lib/x86_64-linux-gnu/libXdamage.so.1.1.0 7f1db29fd000-7f1db2bfc000 ---p 00002000 08:01 270338 /usr/lib/x86_64-linux-gnu/libXdamage.so.1.1.0 7f1db2bfc000-7f1db2bfd000 r--p 00001000 08:01 270338 /usr/lib/x86_64-linux-gnu/libXdamage.so.1.1.0 7f1db2bfd000-7f1db2bfe000 rw-p 00002000 08:01 270338 /usr/lib/x86_64-linux-gnu/libXdamage.so.1.1.0 7f1db2bfe000-7f1db2c1f000 r-xp 00000000 08:01 270266 /usr/lib/x86_64-linux-gnu/libglapi.so.0.0.0 7f1db2c1f000-7f1db2e1f000 ---p 00021000 08:01 270266 /usr/lib/x86_64-linux-gnu/libglapi.so.0.0.0 7f1db2e1f000-7f1db2e22000 r--p 00021000 08:01 270266 /usr/lib/x86_64-linux-gnu/libglapi.so.0.0.0 7f1db2e22000-7f1db2e23000 rw-p 00024000 08:01 270266 /usr/lib/x86_64-linux-gnu/libglapi.so.0.0.0 7f1db2e23000-7f1db2e24000 rw-p 00000000 00:00 0 7f1db2e24000-7f1db2f59000 r-xp 00000000 08:01 270078 /usr/lib/x86_64-linux-gnu/libX11.so.6.3.0 7f1db2f59000-7f1db3159000 ---p 00135000 08:01 270078 /usr/lib/x86_64-linux-gnu/libX11.so.6.3.0 7f1db3159000-7f1db315a000 r--p 00135000 08:01 270078 /usr/lib/x86_64-linux-gnu/libX11.so.6.3.0 7f1db315a000-7f1db315f000 rw-p 00136000 08:01 270078 /usr/lib/x86_64-linux-gnu/libX11.so.6.3.0 7f1db315f000-7f1db3170000 r-xp 00000000 08:01 270340 /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 7f1db3170000-7f1db336f000 ---p 00011000 08:01 270340 /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 7f1db336f000-7f1db3370000 r--p 00010000 08:01 270340 /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 7f1db3370000-7f1db3371000 rw-p 00011000 08:01 270340 /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 7f1db3371000-7f1db3380000 r-xp 00000000 08:01 270932 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0 7f1db3380000-7f1db357f000 ---p 0000f000 08:01 270932 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0 7f1db357f000-7f1db3580000 r--p 0000e000 08:01 270932 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0 7f1db3580000-7f1db3581000 rw-p 0000f000 08:01 270932 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0 7f1db3581000-7f1db3599000 r-xp 00000000 08:01 272833 /usr/lib/x86_64-linux-gnu/libXmu.so.6.2.0 7f1db3599000-7f1db3799000 ---p 00018000 08:01 272833 /usr/lib/x86_64-linux-gnu/libXmu.so.6.2.0 7f1db3799000-7f1db379b000 rw-p 00018000 08:01 272833 /usr/lib/x86_64-linux-gnu/libXmu.so.6.2.0 7f1db379b000-7f1db37b0000 r-xp 00000000 08:01 521230 /lib/x86_64-linux-gnu/libgcc_s.so.1 7f1db37b0000-7f1db39b0000 ---p 00015000 08:01 521230 /lib/x86_64-linux-gnu/libgcc_s.so.1 7f1db39b0000-7f1db39b1000 rw-p 00015000 08:01 521230 /lib/x86_64-linux-gnu/libgcc_s.so.1 7f1db39b1000-7f1db3a96000 r-xp 00000000 08:01 265853 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19 7f1db3a96000-7f1db3c96000 ---p 000e5000 08:01 265853 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19 7f1db3c96000-7f1db3c9e000 r--p 000e5000 08:01 265853 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19 7f1db3c9e000-7f1db3ca0000 rw-p 000ed000 08:01 265853 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19 7f1db3ca0000-7f1db3cb5000 rw-p 00000000 00:00 0 7f1db3cb5000-7f1db3cf7000 r-xp 00000000 08:01 299556 /usr/lib/x86_64-linux-gnu/libglut.so.3.9.0 7f1db3cf7000-7f1db3ef7000 ---p 00042000 08:01 299556 /usr/lib/x86_64-linux-gnu/libglut.so.3.9.0 7f1db3ef7000-7f1db3efb000 r--p 00042000 08:01 299556 /usr/lib/x86_64-linux-gnu/libglut.so.3.9.0 7f1db3efb000-7f1db3f00000 rw-p 00046000 08:01 299556 /usr/lib/x86_64-linux-gnu/libglut.so.3.9.0 7f1db3f00000-7f1db3f6c000 r-xp 00000000 08:01 272794 /usr/lib/x86_64-linux-gnu/libGLU.so.1.3.1 7f1db3f6c000-7f1db416c000 ---p 0006c000 08:01 272794 /usr/lib/x86_64-linux-gnu/libGLU.so.1.3.1 7f1db416c000-7f1db416d000 r--p 0006c000 08:01 272794 /usr/lib/x86_64-linux-gnu/libGLU.so.1.3.1 7f1db416d000-7f1db416e000 rw-p 0006d000 08:01 272794 /usr/lib/x86_64-linux-gnu/libGLU.so.1.3.1 7f1db416e000-7f1db41c8000 r-xp 00000000 08:01 270344 /usr/lib/x86_64-linux-gnu/libGL.so.1.2.0 7f1db41c8000-7f1db43c8000 ---p 0005a000 08:01 270344 /usr/lib/x86_64-linux-gnu/libGL.so.1.2.0 7f1db43c8000-7f1db43ca000 r--p 0005a000 08:01 270344 /usr/lib/x86_64-linux-gnu/libGL.so.1.2.0 7f1db43ca000-7f1db43cb000 rw-p 0005c000 08:01 270344 /usr/lib/x86_64-linux-gnu/libGL.so.1.2.0 7f1db43cb000-7f1db43cc000 rw-p 00000000 00:00 0 7f1db43cc000-7f1db444d000 r-xp 00000000 08:01 273938 /usr/lib/x86_64-linux-gnu/libGLEW.so.1.10.0 7f1db444d000-7f1db464d000 ---p 00081000 08:01 273938 /usr/lib/x86_64-linux-gnu/libGLEW.so.1.10.0 7f1db464d000-7f1db4653000 rw-p 00081000 08:01 273938 /usr/lib/x86_64-linux-gnu/libGLEW.so.1.10.0 7f1db4653000-7f1db4658000 rw-p 00000000 00:00 0 7f1db4658000-7f1db46f6000 r-xp 00000000 08:01 270326 /usr/lib/x86_64-linux-gnu/libfreetype.so.6.11.1 7f1db46f6000-7f1db48f5000 ---p 0009e000 08:01 270326 /usr/lib/x86_64-linux-gnu/libfreetype.so.6.11.1 7f1db48f5000-7f1db48fb000 r--p 0009d000 08:01 270326 /usr/lib/x86_64-linux-gnu/libfreetype.so.6.11.1 7f1db48fb000-7f1db48fc000 rw-p 000a3000 08:01 270326 /usr/lib/x86_64-linux-gnu/libfreetype.so.6.11.1 7f1db48fc000-7f1db4922000 r-xp 00000000 08:01 525952 /lib/x86_64-linux-gnu/libpng12.so.0.50.0 7f1db4922000-7f1db4b21000 ---p 00026000 08:01 525952 /lib/x86_64-linux-gnu/libpng12.so.0.50.0 7f1db4b21000-7f1db4b22000 r--p 00025000 08:01 525952 /lib/x86_64-linux-gnu/libpng12.so.0.50.0 7f1db4b22000-7f1db4b23000 rw-p 00026000 08:01 525952 /lib/x86_64-linux-gnu/libpng12.so.0.50.0 7f1db4b23000-7f1db4f84000 r-xp 00000000 08:01 300014 /usr/lib/python2.7/dist-packages/pymol/_cmd.so 7f1db4f84000-7f1db5184000 ---p 00461000 08:01 300014 /usr/lib/python2.7/dist-packages/pymol/_cmd.so 7f1db5184000-7f1db5193000 r--p 00461000 08:01 300014 /usr/lib/python2.7/dist-packages/pymol/_cmd.so 7f1db5193000-7f1db55bd000 rw-p 00470000 08:01 300014 /usr/lib/python2.7/dist-packages/pymol/_cmd.so 7f1db55bd000-7f1db5601000 rw-p 00000000 00:00 0 7f1db5601000-7f1db57c6000 r--p 00000000 08:01 260609 /usr/lib/locale/locale-archive 7f1db57c6000-7f1db5966000 r-xp 00000000 08:01 521248 /lib/x86_64-linux-gnu/libc-2.18.so 7f1db5966000-7f1db5b65000 ---p 001a0000 08:01 521248 /lib/x86_64-linux-gnu/libc-2.18.so 7f1db5b65000-7f1db5b69000 r--p 0019f000 08:01 521248 /lib/x86_64-linux-gnu/libc-2.18.so 7f1db5b69000-7f1db5b6b000 rw-p 001a3000 08:01 521248 /lib/x86_64-linux-gnu/libc-2.18.so 7f1db5b6b000-7f1db5b6f000 rw-p 00000000 00:00 0 7f1db5b6f000-7f1db5c70000 r-xp 00000000 08:01 521245 /lib/x86_64-linux-gnu/libm-2.18.so 7f1db5c70000-7f1db5e70000 ---p 00101000 08:01 521245 /lib/x86_64-linux-gnu/libm-2.18.so 7f1db5e70000-7f1db5e71000 r--p 00101000 08:01 521245 /lib/x86_64-linux-gnu/libm-2.18.so 7f1db5e71000-7f1db5e72000 rw-p 00102000 08:01 521245 /lib/x86_64-linux-gnu/libm-2.18.so 7f1db5e72000-7f1db5e89000 r-xp 00000000 08:01 521435 /lib/x86_64-linux-gnu/libz.so.1.2.8 7f1db5e89000-7f1db6088000 ---p 00017000 08:01 521435 /lib/x86_64-linux-gnu/libz.so.1.2.8 7f1db6088000-7f1db6089000 r--p 00016000 08:01 521435 /lib/x86_64-linux-gnu/libz.so.1.2.8 7f1db6089000-7f1db608a000 rw-p 00017000 08:01 521435 /lib/x86_64-linux-gnu/libz.so.1.2.8 7f1db608a000-7f1db608c000 r-xp 00000000 08:01 521236 /lib/x86_64-linux-gnu/libutil-2.18.so 7f1db608c000-7f1db628b000 ---p 00002000 08:01 521236 /lib/x86_64-linux-gnu/libutil-2.18.so 7f1db628b000-7f1db628c000 r--p 00001000 08:01 521236 /lib/x86_64-linux-gnu/libutil-2.18.so 7f1db628c000-7f1db628d000 rw-p 00002000 08:01 521236 /lib/x86_64-linux-gnu/libutil-2.18.so 7f1db628d000-7f1db6290000 r-xp 00000000 08:01 521240 /lib/x86_64-linux-gnu/libdl-2.18.so 7f1db6290000-7f1db648f000 ---p 00003000 08:01 521240 /lib/x86_64-linux-gnu/libdl-2.18.so 7f1db648f000-7f1db6490000 r--p 00002000 08:01 521240 /lib/x86_64-linux-gnu/libdl-2.18.so 7f1db6490000-7f1db6491000 rw-p 00003000 08:01 521240 /lib/x86_64-linux-gnu/libdl-2.18.so 7f1db6491000-7f1db64a9000 r-xp 00000000 08:01 521234 /lib/x86_64-linux-gnu/libpthread-2.18.so 7f1db64a9000-7f1db66a8000 ---p 00018000 08:01 521234 /lib/x86_64-linux-gnu/libpthread-2.18.so 7f1db66a8000-7f1db66a9000 r--p 00017000 08:01 521234 /lib/x86_64-linux-gnu/libpthread-2.18.so 7f1db66a9000-7f1db66aa000 rw-p 00018000 08:01 521234 /lib/x86_64-linux-gnu/libpthread-2.18.so 7f1db66aa000-7f1db66ae000 rw-p 00000000 00:00 0 7f1db66ae000-7f1db66b2000 r-xp 00000000 08:01 521254 /lib/x86_64-linux-gnu/libSegFault.so 7f1db66b2000-7f1db68b1000 ---p 00004000 08:01 521254 /lib/x86_64-linux-gnu/libSegFault.so 7f1db68b1000-7f1db68b2000 r--p 00003000 08:01 521254 /lib/x86_64-linux-gnu/libSegFault.so 7f1db68b2000-7f1db68b3000 rw-p 00004000 08:01 521254 /lib/x86_64-linux-gnu/libSegFault.so 7f1db68b3000-7f1db68d3000 r-xp 00000000 08:01 521238 /lib/x86_64-linux-gnu/ld-2.18.so 7f1db6902000-7f1db69c2000 rw-p 00000000 00:00 0 7f1db69f3000-7f1db6ab8000 rw-p 00000000 00:00 0 7f1db6acf000-7f1db6ad2000 rw-p 00000000 00:00 0 7f1db6ad2000-7f1db6ad3000 r--p 0001f000 08:01 521238 /lib/x86_64-linux-gnu/ld-2.18.so 7f1db6ad3000-7f1db6ad4000 rw-p 00020000 08:01 521238 /lib/x86_64-linux-gnu/ld-2.18.so 7f1db6ad4000-7f1db6ad5000 rw-p 00000000 00:00 0 7fff4c0d5000-7fff4c0f6000 rw-p 00000000 00:00 0 7fff4c178000-7fff4c17a000 r-xp 00000000 00:00 0 [vdso] ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall]

20 March 2014

567. Testing daisychain slurm script

I'm using stampede.TACC for jobs that need significantly longer than 48 hours to run. Luckily, John Fonner at the Texas Advanced Computing Centre has been kind enough to prepare a SLURM script that circumvents that through daisychaining jobs.

Note that you should under no circumstances do this unless you've been specifically allowed to do so by your cluster manager. 

If you get clearance, you submit the script and it will run in the background and resubmit scripts until the job is done.


To get the daisychain script, do

mkdir ~/tmp
cd ~/tmp
git clone https://github.com/johnfonner/daisychain.git

This will pull the latest version of daisychain.slurm. Rename it to e.g. edited.slurm

General editing of the slurm script:

1.
 Replace all instances of
 
~/.daisychain

with
 
~/daisychain_$baseSlurmJobName

to avoid conflicts when several jobs are running concurrently

2.
To run the script on your own system which you've set up like shown in this post, change

loginNode="login1"

to

loginNode="localhost"

If you're using stampede.TACC, stick to login1.  

3. For gaussian jobs on stampede.TACC  
A.
put

module load gaussian

before

if [ "$thisJobNumber" -eq "1" ]; then

B
Set up your restart job scripts. For example, if the job section of your slurm script looks like this
mkdir $SCRATCH/gaussian_tmp export GAUSS_SCRDIR=$SCRATCH/gaussian_tmp if [ "$thisJobNumber" -eq "1" ]; then #first job echo "Starting First Job:" g09 < freq.g09in > output_$thisJobNumber else #continuation echo "Starting Continuation Job:" g09 < freq_restart.g09in > output_$thisJobNumber fi
with freq.g09in looking like
%nprocshared=16 %rwf=/scratch/0XXXX/XXXX/gaussian_tmp/ajob.rwf %Mem=2000000000 %Chk=/home1/0XXX/XXXX/myjob/ajob.chk #P rpbe1pbe/GEN 5D Freq() SCF=(MaxCycle=256 ) Punch=(MO) Pop=()
with freq.g09in being something along the lines of
%nprocshared=16 %Mem=2000000000 %rwf=/scratch/0XXX/XXXX/gaussian_tmp/ajob.rwf %Chk=/home1/0XXXX/XXXX/myjob/ajob.chk #P restart
(note that the above example is a bit special since it 1) saves the .rwf (which is huge) and 2) is restarting a frequency job. For a simple geoopt job it's enough to restart from the .chk file.

Testing at home
I set up a home system with slurm as shown here: http://verahill.blogspot.com.au/2014/03/565-setting-up-slurm-on-debian-wheezy.html

First edit the daisychain.slurm script as shown above. Note that your slurm script must end with .slurm for the script to recognise it as a slurm script. You can get around this by editing your script and specifying a job script name.

Specifically, change the run time to
#SBATCH -t 00:00:10 # Run time (hh:mm:ss)
comment out the partition name
##SBATCH -p normal
and change the job section to
#-------------------Job Goes Here-------------------------- if [ "$thisJobNumber" -eq "1" ]; then echo "Starting First Job:" sh sleeptest.sh else echo "Starting Continuation Job:" sh sleeptest_2.sh fi #----------------------------------------------------------

Next set up key-based log in for localhost (if you haven't got a keypair, use ssh-keygen:

cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
ssh localhost
  exit

Create two  job files. sleeptest.sh:
echo "first job" date sleep 65 date
and
echo "second job" date sleep 9 echo "Do nothing"

Submit using
sbatch test.slurm

Make sure to change
#SBATCH -J testx          # Job name
for each job so that you can have several running concurrently.

15 March 2014

566. Briefly: Annoying warnings when plotting using gnuplot and octave on wheezy March 2014.

Note: I'm not going to give a proper fix for this, but rather a work-around -- and one which isn't very good at that.

When using gnuplot or plotting in octave on wheezy I keep getting the following warnings.
Fontconfig warning: "/etc/fonts/conf.d/41-arphic-ukai.conf", line 16: Having multiple  in  isn't supported and may not work as expected
Fontconfig warning: "/etc/fonts/conf.d/41-arphic-ukai.conf", line 16: Having multiple  in  isn't supported and may not work as expected
Fontconfig warning: "/etc/fonts/conf.d/41-arphic-ukai.conf", line 16: Having multiple  in  isn't supported and may not work as expected
Fontconfig warning: "/etc/fonts/conf.d/41-arphic-ukai.conf", line 16: Having multiple  in  isn't supported and may not work as expected
Fontconfig warning: "/etc/fonts/conf.d/41-arphic-ukai.conf", line 16: Having multiple  in  isn't supported and may not work as expected
Fontconfig warning: "/etc/fonts/conf.d/41-arphic-uming.conf", line 16: Having multiple  in  isn't supported and may not work as expected
Fontconfig warning: "/etc/fonts/conf.d/41-arphic-uming.conf", line 16: Having multiple  in  isn't supported and may not work as expected
Fontconfig warning: "/etc/fonts/conf.d/41-arphic-uming.conf", line 16: Having multiple  in  isn't supported and may not work as expected
Fontconfig warning: "/etc/fonts/conf.d/41-arphic-uming.conf", line 16: Having multiple  in  isn't supported and may not work as expected
Fontconfig warning: "/etc/fonts/conf.d/41-arphic-uming.conf", line 16: Having multiple  in  isn't supported and may not work as expected
Fontconfig warning: "/etc/fonts/conf.d/41-arphic-uming.conf", line 28: Having multiple  in  isn't supported and may not work as expected
Fontconfig warning: "/etc/fonts/conf.d/41-arphic-uming.conf", line 28: Having multiple  in  isn't supported and may not work as expected
Fontconfig warning: "/etc/fonts/conf.d/41-arphic-uming.conf", line 28: Having multiple  in  isn't supported and may not work as expected
Fontconfig warning: "/etc/fonts/conf.d/41-arphic-uming.conf", line 28: Having multiple  in  isn't supported and may not work as expected
Fontconfig warning: "/etc/fonts/conf.d/41-arphic-uming.conf", line 28: Having multiple  in  isn't supported and may not work as expected
Fontconfig warning: "/etc/fonts/conf.d/64-arphic-uming.conf", line 8: Having multiple values in  isn't supported and may not work as expected
Fontconfig warning: "/etc/fonts/conf.d/64-arphic-uming.conf", line 21: Having multiple values in  isn't supported and may not work as expected
Fontconfig warning: "/etc/fonts/conf.d/64-arphic-uming.conf", line 34: Having multiple values in  isn't supported and may not work as expected
Fontconfig warning: "/etc/fonts/conf.d/64-arphic-uming.conf", line 47: Having multiple values in  isn't supported and may not work as expected
Fontconfig warning: "/etc/fonts/conf.d/65-droid-sans-fonts.conf", line 103: Having multiple values in  isn't supported and may not work as expected
Fontconfig warning: "/etc/fonts/conf.d/65-droid-sans-fonts.conf", line 138: Having multiple values in  isn't supported and may not work as expected
Fontconfig warning: "/etc/fonts/conf.d/90-fonts-baekmuk.conf", line 10: Having multiple values in  isn't supported and may not work as expected
Fontconfig warning: "/etc/fonts/conf.d/90-fonts-baekmuk.conf", line 23: Having multiple values in  isn't supported and may not work as expected

My 'solution' was a bit radical -- I had already set up a system with apt-pinning (http://verahill.blogspot.com.au/2014/03/562-pulling-in-glibc-214-from-testing.html) so I figured that pulling in the fonts from testing couldn't hurt, assuming there were no dependencies to worry about.

So I did:
sudo apt-get install -t testing fonts-arphic-uming
and this worked fine.

The old 41-arphic-uming.conf:
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>

<!--
  Serif faces
 -->
        <alias>
                <family>AR PL ShanHeiSun Uni</family>
                <family>AR PL ShanHeiSun Uni MBE</family>
                <family>AR PL UMing CN</family>
                <family>AR PL UMing HK</family>
                <family>AR PL UMing TW</family>
                <family>AR PL UMing TW MBE</family>
                <default><family>serif</family></default>
        </alias>
<!--
  Monospace faces
 -->
        <alias>
                <family>AR PL ShanHeiSun Uni</family>
                <family>AR PL ShanHeiSun Uni MBE</family>
                <family>AR PL UMing CN</family>
                <family>AR PL UMing HK</family>
                <family>AR PL UMing TW</family>
                <family>AR PL UMing TW MBE</family>
                <default><family>monospace</family></default>
        </alias>
</fontconfig>
The new 41-arphic-uming.conf:
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>

<!--
  Serif faces
 -->
        <alias>
                <family>AR PL ShanHeiSun Uni</family>
                <default><family>serif</family></default>
        </alias>
        <alias>
                <family>AR PL ShanHeiSun Uni MBE</family>
                <default><family>serif</family></default>
        </alias>
        <alias>
                <family>AR PL UMing CN</family>
                <default><family>serif</family></default>
        </alias>
        <alias>
                <family>AR PL UMing HK</family>
                <default><family>serif</family></default>
        </alias>
        <alias>
                <family>AR PL UMing TW</family>
                <default><family>serif</family></default>
        </alias>
        <alias>
                <family>AR PL UMing TW MBE</family>
                <default><family>serif</family></default>
        </alias>
<!--
  Monospace faces
 -->
        <alias>
                <family>AR PL ShanHeiSun Uni</family>
                <default><family>monospace</family></default>
        </alias>
        <alias>
                <family>AR PL ShanHeiSun Uni MBE</family>
                <default><family>monospace</family></default>
        </alias>
        <alias>
                <family>AR PL UMing CN</family>
                <default><family>monospace</family></default>
        </alias>
        <alias>
                <family>AR PL UMing HK</family>
                <default><family>monospace</family></default>
        </alias>
        <alias>
                <family>AR PL UMing TW</family>
                <default><family>monospace</family></default>
        </alias>
        <alias>
                <family>AR PL UMing TW MBE</family>
                <default><family>monospace</family></default>
        </alias>
</fontconfig>
It just remained to pull in the rest of the offending fonts:
sudo apt-get install -t testing fonts-arphic-ukai fonts-droid fonts-baekmuk

14 March 2014

565. Setting up slurm on debian wheezy (very basic)

I have a problem: I've got access to stampede.tacc in Texas which is using slurm as the queue manager. And while I've got SGE figured out (use it on my own cluster, my collaborator's cluster and it's used on the university cluster) I'm having some conceptual issues with SLURM.

I don't have any problems writing slurm scripts -- it's similar enough to SGE. But nowhere do I see anyone use -cwd or any equivalent in their slurm scripts. Either that is because you don't have to, or it's just an oversight in all of the examples that I've seen.

Learning by doing has also been an issue -- whenever I submit a test job it takes many, many hours before it's run. That's no way to learn.

Either way, it's time for me to become more familiar with slurm, so I've decided to set it up on a dedicated box.

I look at this post while setting it up: http://paolobertasi.wordpress.com/2011/05/24/how-to-install-slurm-on-debian/

NOTE: I set up a single node. This won't deal with getting nodes to communicate, configuring master and submit nodes, or anything lik that.

NOTE: the package slurm is a completely different program (network monitor). You need slurm-llnl

I also wonder whether the name has got anything to with this Slurm...


Installation

sudo apt-get install slurm-llnl
Setting up munge (0.5.10-1) ... Not starting munge (no keys found). Please run /usr/sbin/create-munge-key Setting up slurm-llnl-basic-plugins (2.3.4-2+b1) ... Setting up slurm-llnl (2.3.4-2+b1) ... Not starting slurm-llnl slurm.conf was not found in /etc/slurm-llnl Please follow the instructions in /usr/share/doc/slurm-llnl/README.Debian.gz

Open the local file file:///usr/share/doc/slurm-llnl/slurm-llnl-configurator.html in a web browser and fill out the form. I got the following slurm.conf, which I put in /etc/slurm-llnl/ 
slurm.conf
# slurm.conf file generated by configurator.html. # Put this file on all nodes of your cluster. # See the slurm.conf man page for more information. # ControlMachine=ecce64bit #ControlAddr= #BackupController= #BackupAddr= # AuthType=auth/munge CacheGroups=0 #CheckpointType=checkpoint/none CryptoType=crypto/munge #DisableRootJobs=NO #EnforcePartLimits=NO #Epilog= #PrologSlurmctld= #FirstJobId=1 JobCheckpointDir=/var/lib/slurm-llnl/checkpoint #JobCredentialPrivateKey= #JobCredentialPublicCertificate= #JobFileAppend=0 #JobRequeue=1 #KillOnBadExit=0 #Licenses=foo*4,bar #MailProg=/usr/bin/mail #MaxJobCount=5000 #MaxTasksPerNode=128 MpiDefault=none #MpiParams=ports=#-# #PluginDir= #PlugStackConfig= #PrivateData=jobs ProctrackType=proctrack/pgid #Prolog= #PrologSlurmctld= #PropagatePrioProcess=0 #PropagateResourceLimits= #PropagateResourceLimitsExcept= ReturnToService=1 #SallocDefaultCommand= SlurmctldPidFile=/var/run/slurm-llnl/slurmctld.pid SlurmctldPort=6817 SlurmdPidFile=/var/run/slurm-llnl/slurmd.pid SlurmdPort=6818 SlurmdSpoolDir=/var/lib/slurm-llnl/slurmd SlurmUser=verahill #SrunEpilog= #SrunProlog= StateSaveLocation=/var/lib/slurm-llnl/slurmctld SwitchType=switch/none #TaskEpilog= TaskPlugin=task/none #TaskPluginParam= #TaskProlog= #TopologyPlugin=topology/tree #TmpFs=/tmp #TrackWCKey=no #TreeWidth= #UnkillableStepProgram= #UnkillableStepTimeout= #UsePAM=0 # # # TIMERS #BatchStartTimeout=10 #CompleteWait=0 #EpilogMsgTime=2000 #GetEnvTimeout=2 #HealthCheckInterval=0 #HealthCheckProgram= InactiveLimit=0 KillWait=30 #MessageTimeout=10 #ResvOverRun=0 MinJobAge=300 #OverTimeLimit=0 SlurmctldTimeout=300 SlurmdTimeout=300 #UnkillableStepProgram= #UnkillableStepTimeout=60 Waittime=0 # # # SCHEDULING #DefMemPerCPU=0 #EnablePreemption=no FastSchedule=1 #MaxMemPerCPU=0 #SchedulerRootFilter=1 #SchedulerTimeSlice=30 SchedulerType=sched/backfill SchedulerPort=7321 SelectType=select/linear #SelectTypeParameters= # # # JOB PRIORITY #PriorityType=priority/basic #PriorityDecayHalfLife= #PriorityCalcPeriod= #PriorityFavorSmall= #PriorityMaxAge= #PriorityUsageResetPeriod= #PriorityWeightAge= #PriorityWeightFairshare= #PriorityWeightJobSize= #PriorityWeightPartition= #PriorityWeightQOS= # # # LOGGING AND ACCOUNTING #AccountingStorageEnforce=0 #AccountingStorageHost= #AccountingStorageLoc= #AccountingStoragePass= #AccountingStoragePort= AccountingStorageType=accounting_storage/none #AccountingStorageUser= ClusterName=cluster #DebugFlags= #JobCompHost= #JobCompLoc= #JobCompPass= #JobCompPort= JobCompType=jobcomp/none #JobCompUser= JobAcctGatherFrequency=30 JobAcctGatherType=jobacct_gather/none SlurmctldDebug=3 SlurmctldLogFile=/var/log/slurm-llnl/slurmctld.log SlurmdDebug=3 SlurmdLogFile=/var/log/slurm-llnl/slurmd.log # # # POWER SAVE SUPPORT FOR IDLE NODES (optional) #SuspendProgram= #ResumeProgram= #SuspendTimeout= #ResumeTimeout= #ResumeRate= #SuspendExcNodes= #SuspendExcParts= #SuspendRate= #SuspendTime= # # # COMPUTE NODES NodeName=ecce64bit Procs=1 State=UNKNOWN PartitionName=debug Nodes=ecce64bit Default=YES MaxTime=INFINITE State=UP

sudo /usr/sbin/create-munge-key
sudo service slurm-llnl start
[ ok ] Starting slurm central management daemon: slurmctld.
[ ok ] Starting slurm compute node daemon: slurmd.
sudo service munge start
[ ok ] Starting MUNGE: munged.

At that point I tried sinfo, squeue etc., none of which returned anything other than a connection error:
squeue
slurm_load_jobs error: Unable to contact slurm controller (connect failure)
sinfo
slurm_load_partitions: Unable to contact slurm controller (connect failure)
So I rebooted. Which had no effect.The log file /var/log/slurm-llnl/slurmctld.log contains
fatal: Incorrect permissions on state save loc: /var/lib/slurm-llnl/slurmctld
verahill@ecce64bit:~$ sudo chown verahill /var/lib/slurm-llnl/slurmctld verahill@ecce64bit:~$ sudo service slurm-llnl restart
[ ok ] Stopping slurm central management daemon: slurmctld. No /usr/sbin/slurmctld found running; none killed. [ ok ] Stopping slurm compute node daemon: slurmd. No /usr/sbin/slurmd found running; none killed. slurmd dead but pid file exists [ ok ] Starting slurm central management daemon: slurmctld. [ ok ] Starting slurm compute node daemon: slurmd.
verahill@ecce64bit:~$ ps aux|grep slurm
verahill 3790 0.0 0.2 116164 2292 ? Sl 21:12 0:00 /usr/sbin/slurmctld root 3829 0.0 0.1 95064 1380 ? S 21:12 0:00 /usr/sbin/slurmd
verahill@ecce64bit:~$ squeue
JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)
verahill@ecce64bit:~$ sinfo
PARTITION AVAIL TIMELIMIT NODES STATE NODELIST debug* up infinite 1 idle ecce64bit

Testing
 
verahill@ecce64bit:~$ srun --ntasks=1  --label /bin/hostname && pwd && whoami
0: ecce64bit /home/verahill verahill

Time to write a simple queue script:
job.slurm
#!/bin/bash #SBATCH -J pbe_delta # Job name #SBATCH -o pbe_delta.o%j # Name of stdout output file(%j expands to jobId) #SBATCH -e pbe_delta.o%j # Name of stderr output file(%j expands to jobId) #SBATCH -N 1 # Total number of nodes requested (16 cores/node) #SBATCH -n 1 #SBATCH -t 48:00:00 # Run time (hh:mm:ss) date> output.out pwd >> output.out hostname >> output.out ls -lah
I submitted it using
sbatch job.slurm

and on running it gives two output files:
output.out
Fri Mar 14 17:16:10 EST 2014
/home/verahill/slurm/test
Ecce64bit
and pbe_delta.o4
total 16K
drwxr-xr-x 2 verahill verahill 4.0K Mar 14 17:16 .
drwxr-xr-x 3 verahill verahill 4.0K Mar 14 17:14 ..
-rw-r--r-- 1 verahill verahill  491 Mar 14 17:16 job.slurm
-rw-r--r-- 1 verahill verahill   59 Mar 14 17:16 output.out
-rw-r--r-- 1 verahill verahill    0 Mar 14 17:15 pbe_delta.o3
-rw-r--r-- 1 verahill verahill    0 Mar 14 17:16 pbe_delta.o4

564.Very, very briefly: ps2pdf not working on jessie 12 March 2014

Update: see second comment below post.

ps2pdf example.ps produces

Error: /typecheck in /findfont
Operand stack:
   -66.7   --nostringval--   0   --nostringval--   --nostringval--   {}
Execution stack:
   %interp_exit   .runexec2   --nostringval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval--   --nostringval--   --nostringval--   false   1   %stopped_push   1910   1   3   %oparray_pop   1909   1   3   %oparray_pop   1893   1   3   %oparray_pop   1787   1   3   %oparray_pop   --nostringval--   %errorexec_pop   .runexec2   --nostringval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval--   --nostringval--   --nostringval--   --nostringval--   %array_continue   --nostringval--   1868   6   6   %oparray_pop
Dictionary stack:
   --dict:1164/1684(ro)(G)--   --dict:0/20(G)--   --dict:78/200(L)--   --dict:196/300(L)--   --dict:44/200(L)--   --dict:194/256(L)--
Current allocation mode is local
Current file position is 393007
GPL Ghostscript 9.05: Unrecoverable error, exit code 1
The workaround is to remove the package  fonts-font-awesome, which will remove texlive-fonts-extra. As far as I understand a fix is included upstreams and will work its way down to Jessie eventually.

11 March 2014

563. High disk i/o caused by find/sort <- updatedb

High disk I/O, leading to system slowdown, has been bothering me a lot recently. Most of the time I've simply blamed it on ECCE, and while the situation gets better when ECCE isn't running, it's still occasionally very bad.

Diagnosis

iotop shows
 Total DISK READ:       3.48 M/s | Total DISK WRITE:    1193.67 K/s
  TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND                                                                                                                                                                     
25565 be/4 root        3.46 M/s    0.00 B/s  0.00 % 76.92 % find / ( -fstype nfs -o -fstype NFS -o -fstype proc -o -fstype afs -o -fstype smbfs -o -~$\)\|\(^/var/tmp$\)\|\(^/afs$\)\|\(^/amd$\)\|\(^/sfs$\)\|\(^/proc$\) ) -prune -o -print0
ps aux|grep 2556[0-9]
root     25562  0.0  0.0  18620   336 ?        S    12:33   0:00 /bin/sh /usr/bin/updatedb

root     25563 26.2  0.1  25996 12400 ?        S    12:33   1:51 /usr/bin/sort -z -f
root     25564  0.0  0.0   4216   116 ?        S    12:33   0:00 /usr/lib/locate/frcode -0
root     25565 24.2  0.0  19024   956 ?        R    12:33   1:09 /usr/bin/find / ( -fstype nfs -o -fstype NFS -o -fstype proc -o -fstype afs -o -fstype smbfs -o -fstype autofs -o -fstype iso9660 -o -fstype ncpfs -o -fstype coda -o -fstype devpts -o -fstype ftpfs -o -fstype devfs -o -fstype mfs -o -fstype sysfs -o -fstype shfs -o -type d -regex \(^/tmp$\)\|\(^/usr/tmp$\)\|\(^/var/tmp$\)\|\(^/afs$\)\|\(^/amd$\)\|\(^/sfs$\)\|\(^/proc$\) ) -prune -o -print0
Heading deeper down the rabbit hole:
me@beryllium:~$ ps -p 25565 -o ppid=
25562
me@beryllium:~$ ps -p 25562 -o ppid=
25554
me@beryllium:~$ ps -p 25554 -o ppid=
25553
me@beryllium:~$ ps -p 25553 -o ppid=
25552
me@beryllium:~$ ps -p 25552 -o ppid=
 4315
me@beryllium:~$ ps -p 4315 -o ppid=
    1
me@beryllium:~$ ps aux|grep 4315
root      4315  0.0  0.0  26124   428 ?        Ss   Mar07   0:05 /usr/sbin/cron
me@beryllium:~$ ps aux|grep 25552
root     25552  0.0  0.0  64068   844 ?        S    12:33   0:00 /USR/SBIN/CRON
me@beryllium:~$ ps aux|grep 25554
root     25554  0.0  0.0  18620   588 ?        S    12:33   0:00 /bin/sh /usr/bin/updatedb

So, updatedb is starting 25565, which is bogging down the computer. updatedb is starting 25565, and updatedb is started as a cron job. updatedb is run in order to update the locate database, and locate is a powerful file search function -- whereas find searches on the fly, locate consults a database.

At this point its probably a good idea to mention that I have a 4 Tb system, plus four mounted NFS folders with many Gb of content.

Either way, the only thing that remains is to identify which cron job is launching updatedb:

me@beryllium:~$ egrep "updatedb" /etc/cron.*/*
/etc/cron.daily/locate:# Please consult updatedb(1) and /usr/share/doc/locate/README.Debian
/etc/cron.daily/locate:[ -e /usr/bin/updatedb.findutils ] || exit 0
/etc/cron.daily/locate:# filesystems which are pruned from updatedb database
/etc/cron.daily/locate:# paths which are pruned from updatedb database
/etc/cron.daily/locate:if [ -r /etc/updatedb.findutils.cron.local ] ; then
/etc/cron.daily/locate: . /etc/updatedb.findutils.cron.local
/etc/cron.daily/locate:  cd / && nice -n ${NICE:-10} updatedb.findutils 2>/dev/null


Solution:
locate is a powerful command which I use frequently, but I'd be happy to change the frequency of updatedb to once per week instead of once per day, especially if running it takes hours.

sudo mv /etc/cron.daily/locate /etc/cron.weekly/locate

We can also work on excluding paths.
me@beryllium:~$ cat /etc/cron.weekly/locate |grep PRUNE
PRUNEFS="NFS nfs nfs4 afs binfmt_misc proc smbfs autofs iso9660 ncpfs coda devpts ftpfs devfs mfs shfs sysfs cifs lustre_lite tmpfs usbfs udf ocfs2"
PRUNEPATHS="/tmp /usr/tmp /var/tmp /afs /amd /alex /var/spool /sfs /media /var/lib/schroot/mount"
export FINDOPTIONS PRUNEFS PRUNEPATHS NETPATHS LOCALUSER

So my NFS folders are already excluded through PRUNEFS, but it might be worth throwing more paths into PRUNEPATHS. In my case I'm quite happy with a full run every week.

Update: I also discovered that I'd put an updatedb job manually in /etc/crontab which was run once every three hours. The cron.daily script was run at 6 am, and so was unlikely to cause slowdown during times when I'm actually at work. Instead it was the script I'd set up myself that was the culprit.