Differences

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

Link to this comparison view

ep:labs:05:contents:tasks:ex1 [2025/02/11 23:42]
cezar.craciunoiu
ep:labs:05:contents:tasks:ex1 [2026/03/30 22:15] (current)
radu.mantu
Line 1: Line 1:
-==== 01. [10pRotational delay - IOPS calculations ​====+==== 01. [20piostat & iotop ====
  
 +=== [10p] Task A - Monitoring the behaviour with Iostat ===
 <note tip> <note tip>
-Every disk in your storage system has a maximum theoretical IOPS value that is based on a formula. Disk performance and IOPS is based on three key factors+Parameteres for iostat
- +    * -x for extended statistics 
-  ​**Rotational speed**. Measured in RPM, mostly 7,200, 10,000 or 15,000 RPM. A higher rotational speed is associated with a higher-performing disk. +    -d to display device stastistics only 
-  **Average latency**. The time it takes for the sector of the disk being accessed ​to rotate into position under a read/write head. +    -m for displaying r/in MB/s 
-  **Average seek time**. The time (in ms) it takes for the hard drive’s read/write head to position itself over the track being read or written. +<code bash
-  * **Average IOPS**: Divide 1 by the sum of the average latency ​in ms and the average seek time in ms (1 (average latency in ms + average seek time in ms). +$ iostat -xdm
-</note+
-To calculate the **IOPS range** divide 1 by the sum of the average latency in ms and the average seek time in ms. The formula is:  +
-<​code>​average IOPS = 1 / (average latency in ms + average seek time in ms).+
 </​code>​ </​code>​
 +Use iostat with -p for specific device statistics:
 +<code bash>
 +$ iostat -xdm -p sda
 +</​code>​
 +</​note>​
  
-Let'​s ​calculate the Rotational Delay - RD for a 10K RPM drive:+  * Run //iostat -x 1 5//. 
 +  * Considering the last two outputs provided by the previous command, ​calculate ​**the efficiency of IOPS** ​for each of them. Does the amount of data written per I/O **increase** or **decrease**?​
  
-  * Divide 10000 RPM by 60 seconds: **''​10000/​60 = 166 RPS''​** +Add in your archive screenshot or pictures ​of the operations and the result you obtained, also showing the output ​of iostat from which you took the values.
-  * Convert 1 of 166 to decimal: **''​1/​166 = 0.006 seconds per Rotation''​** +
-  * Multiply ​the seconds per rotation by 1000 milliseconds (6 MS per rotation). +
-  * Divide ​the total in half (RD is considered half a revolution around a disk): **''​6/​2 = 3 MS''​** +
-  * Add an average ​of 3 MS for seek time: **''​3 MS + 3 MS = 6 MS''​** +
-  * Add 2 MS for latency (internal transfer): **''​6 MS + 2 MS = 8 MS''​** +
-  * Divide 1000 MS by 8 MS per I/O: **''​1000/​8 = 125 IOPS''​**+
  
-=== [10p] Task A - Calculate rotational delay ===+<​note>​ 
 +How to do:
  
-Add in your archive ​the operations ​and the result ​you obtained(Screenshotpicture of calculations made by hand on paper)+  * 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** outputfind out what they are exactly: 
 + 
 +<code bash> 
 +$ df -kh /​dev/​loop* 
 +</​code>​ 
 +</​note>​
  
-Calculate the Rotational Delay, and then the IOPS for a __5400 RPM drive__. 
  
 <​solution -hidden> <​solution -hidden>
-As shown in the //"​Calculating IOs Per Second"​// section:+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>​
-5400 60 90 RPS +53040/105 505KB per I/O 
-1/90 = 0.011 seconds per Rotation +71152/102 697KB per I/O
-0.011 * 1000 = 11ms per Rotation +
-11 5.5ms RD (Rotational Delay = half a revolution around a disk) +
-add approx. 3ms seek time => 8.5ms +
-add 2ms latency => 10.5ms +
-Divide 1000ms by 10.5ms ​per I/O => approx. 95 IOPS+
 </​code>​ </​code>​
 +
 +If everything is zero in iostat - perform some I/O operations...
 </​solution>​ </​solution>​
  
  
 +=== [10p] Task B - Monitoring the behaviour with Iotop ===
 +<note tip>
 +**Iotop** is an utility similar to top command, that 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>​
 +
 +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?]]
 +
 +<​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>​
ep/labs/05/contents/tasks/ex1.1739310174.txt.gz · Last modified: 2025/02/11 23:42 by cezar.craciunoiu
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