Class: Ben::Disk

Inherits:
Object
  • Object
show all
Defined in:
lib/ben/disk.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(p_disk) ⇒ Disk

Returns a new instance of Disk.



12
13
14
# File 'lib/ben/disk.rb', line 12

def initialize(p_disk)
  @p_disk = p_disk
end

Instance Attribute Details

#p_diskObject (readonly)

/dev/sda



10
11
12
# File 'lib/ben/disk.rb', line 10

def p_disk
  @p_disk
end

Class Method Details

.run(p_disk) ⇒ Object



4
5
6
# File 'lib/ben/disk.rb', line 4

def run(p_disk)
  Disk.new(p_disk).run
end

Instance Method Details

#benchmarkObject

once



21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/ben/disk.rb', line 21

def benchmark
  read, unit = dd_result(`dd if=/dev/zero of=a.bin bs=1M count=1024 conv=fdatasync,notrunc 2>&1`)
  read = read.to_i

  `su root -c 'echo 3 > /proc/sys/vm/drop_caches'`
  write, unit1 = dd_result(`dd if=a.bin of=/dev/null bs=1M count=1024 2>&1`)
  write = write.to_i

  Ben.ui.say "This Time: #{read}#{unit} #{write}#{unit}"

  [read, write, unit]
end

#get_model_numberObject



16
17
18
# File 'lib/ben/disk.rb', line 16

def get_model_number
  `hdparm -I #{p_disk} | grep 'Model Number' | awk -F: '{print $2}'`.strip.downcase
end

#runObject

run n times



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/ben/disk.rb', line 35

def run
  rst = Rc.disk.counts.times.map { benchmark }
  unit = rst[0][2]

  read, write = rst.transpose[0..1].map {|v|
    v.inject(:+)/v.length.to_f
  }

  Ben.ui.say "Average: #{read}#{unit} #{write}#{unit}"

  today = Date.today.strftime("%Y-%m-%d")
  p_log = Pa("~/.ben/disk.#{get_model_number}")
  File.append(p_log.p, "#{today}: #{read}#{unit} #{write}#{unit}\n")
rescue => e
  Pa.rm "a.bin"
  raise e
end