Differences

This shows you the differences between two versions of the page.

Link to this comparison view

ep:labs:03:contents:tasks:ex2 [2019/10/13 18:01]
emilian.radoi
ep:labs:03:contents:tasks:ex2 [2022/09/13 12:59] (current)
radu.mantu [02. [30p] iostat & iotop]
Line 1: Line 1:
-==== 02. [10pMonitor I/O with vmstat and iostat ====+==== 02. [30p] iostat ​& iotop ====
  
-=== [5pGenerate a script to determine ​the occurences of the words ===+=== [15pTask A - Monitoring ​the behaviour with Iostat ​=== 
 +<note tip> 
 +Parameteres for iostat: 
 +    * -x for extended statistics 
 +    * -d to display device stastistics only 
 +    * -m for displaying r/w in MB/s 
 +<code bash> 
 +$ iostat -xdm 
 +</​code>​ 
 +Use iostat with -p for specific device statistics:​ 
 +<code bash> 
 +$ iostat -xdm -p sda 
 +</​code>​ 
 +</​note>​
  
-  * Write a script for determining the number of occurrences of the words //"​not"​//, //"​yes"//​ and //"​course"//​ in the large text file that you generated earlier.+  * Run //iostat -x 1 5//
 +  * Considering the last two outputs provided by the previous commandcalculate **the efficiency of IOPS** for each of themDoes the amount of data written per I/O **increase** or **decrease**?​
  
-=== [5p] Monitoring the behaviour === +Add in your archive screenshot or pictures ​of the operations and the result you obtainedalso showing the output of iostat ​from which you took the values.
-  +
-  * Monitor the behaviour ​of the system while running your code (//vmstat////iostat//).+
  
-Hint:+<​note>​ 
 +How to do: 
 + 
 +  * Divide the kilobytes read (//rkB/s//) and written (//wkB/s//) per second by the reads per second (//r/s//) and the writes per second (//​w/​s//​). 
 +  * If you happen to have quite a few [[https://​en.wikipedia.org/​wiki/​Loop_device|loop devices]] in your **iostat** output, find out what they are exactly: 
 + 
 +<code bash> 
 +$ df -kh /​dev/​loop* 
 +</​code>​ 
 +</​note>​
  
-  * [[https://​stackoverflow.com/​questions/​17268958/​finding-occurrences-of-a-word-in-a-string-in-python-3|Finding occurrences of a word in a string in python 3]] 
-  * [[https://​stackoverflow.com/​questions/​8369219/​how-do-i-read-a-text-file-into-a-string-variable-in-python|How to read a text file into a string variable and strip newlines?]] 
  
 <​solution -hidden> <​solution -hidden>
 +The way to calculate the efficiency of IOPS is to divide the reads per second //(r/s)// and writes per second //(w/s)// by the kilobytes read //(rkB/s)// and written //(wkB/s)// per second.
 +
 +Example: the amount of data written per I/O for ///​dev/​sda//​ increases during each iteration:
 +
 +{{ :​ep:​labs:​ep2017_l3_ex01.png?​700 |}}
 +
 <​code>​ <​code>​
-import re +53040/​105 ​505KB per I/O 
-if __name__ ​== '​__main__':​ +71152/​102 ​697KB per I/O 
- word1 "​not"​ +</​code>​
- word2 = "​yes"​ +
- word3 = "​course"​ +
- text_file = open("​OliverTwistLarge.txt",​ "​r"​) +
- text_string = text_file.read().replace('​\n',​ ' ') +
- word1_count = sum(1 for _ in re.finditer(r'​\b%s\b'​ % re.escape(word1),​ text_string)) +
- word2_count = sum(1 for _ in re.finditer(r'​\b%s\b'​ % re.escape(word2),​ text_string)) +
- word3_count = sum(1 for _ in re.finditer(r'​\b%s\b'​ % re.escape(word3),​ text_string))+
  
- print 'The word <%soccurs %d times'​%(word1,​ word1_count) +If everything is zero in iostat - perform some I/O operations... 
- print 'The word <%soccurs %d times'​%(word2word2_count) +</solution
- print 'The word <%soccurs %d times'​%(word3,​ word3_count)+ 
 + 
 +=== [15p] Task B - Monitoring the behaviour with Iotop === 
 +<note tip> 
 +**Iotop** is an utility similar to top commandthat interfaces with the kernel to provide per-thread/​process I/O usage statistics. 
 + 
 +<code> 
 +Debian/​Ubuntu Linux install iotop 
 +$ sudo apt-get install iotop 
 + 
 +How to use iotop command 
 +$ sudo iotop OR $ iotop
 </​code>​ </​code>​
 +
 +Supported options by iotop command:
 +
 +| **Options** | **Description** ^^
 +| --version | show program’s version number and exit ||
 +| -h, --help | show this help message and exit ||
 +| -o, --only | only show processes or threads actually doing I/O ||
 +| -b, --batch | non-interactive mode ||
 +| -n NUM, --iter=NUM | number of iterations before ending [infinite] ||
 +| -d SEC, --delay=SEC | delay between iterations [1 second] ||
 +| -p PID, --pid=PID | processes/​threads to monitor [all] ||
 +| -u USER, --user=USER | users to monitor [all] ||
 +| -P, --processes | only show processes, not all threads ||
 +| -a, --accumulated | show accumulated I/O instead of bandwidth ||
 +| -k, --kilobytes | use kilobytes instead of a human friendly unit ||
 +| -t, --time | add a timestamp on each line (implies –batch) ||
 +| -q, --quiet | suppress some lines of header (implies –batch) ||
 +</​note>​
 +
 +
 +  * Run iotop (install it if you do not already have it) in a separate shell showing only processes or threads actually doing I/O.
 +  * Inspect the script code ({{:​ep:​laboratoare:​dummy.sh|dummy.sh}}) to see what it does.
 +  * Monitor the behaviour of the system with iotop while running the script.
 +  * Identify the PID and PPID of the process running the dummy script and kill the process using command line from another shell (sending SIGINT signal to both parent & child processes).
 +  * Hint - [[https://​superuser.com/​questions/​150117/​how-to-get-parent-pid-of-a-given-process-in-gnu-linux-from-command-line|How to get parent PID of a given process in GNU/Linux from command line?]]
 +
 +Provide a screenshot in which it shows the iotop with only the active processes and one of them being the running script. Then another screenshot after you succeeded to kill it. 
 +
 +<​solution -hidden>
 +{{:​ep:​laboratoare:​lab3-ex4.png?​600}}
 +
 +**dd** performs disk writes... wow! Reason why there are no disk reads is because it uses pseudo-files from **devtmpfs** that don't record these statistics. Also, **tmpfs** are not disks :p
 +
 +Find PPID from PID: ps -o ppid= -p PID
 +Send SIGINT signal: kill -SIGINT PID,PPID
 </​solution>​ </​solution>​
ep/labs/03/contents/tasks/ex2.1570978884.txt.gz · Last modified: 2019/10/13 18:01 by emilian.radoi
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0