Saturday, 26 October 2013

Performance modelling of a linux system using fork bomb


Today I will be showing you a simple way to measure the memory allocation capacity of the system.

Unlike in case of httpperf my method doesn't rely on the network based requests to load the system

I will be loading the system with processes by running a shell script in each of the guest operating systems(If the system under test is a server virtualized system) The shell scripts can be controlled remotely using telnet.

I would like to measure active memory, free memory, swap memory, inactive memory while loading the system with processes.

The idea here is to get all the required performance metrics from /proc/meminfo while forking processes. For example at one particular instance on my system
/proc/meminfo:



MemTotal:        2945376 kB
MemFree:          765960 kB
Buffers:          144004 kB
Cached:           993792 kB
SwapCached:            0 kB
Active:           979460 kB
Inactive:         995496 kB
Active(anon):     838076 kB
Inactive(anon):   178496 kB
Active(file):     141384 kB
Inactive(file):   817000 kB
Unevictable:          84 kB
Mlocked:              84 kB
SwapTotal:       6261756 kB
SwapFree:        6261756 kB
Dirty:               800 kB
Writeback:             0 kB
AnonPages:        837144 kB
Mapped:           213612 kB
Shmem:            179416 kB
Slab:              91864 kB
SReclaimable:      60272 kB
SUnreclaim:        31592 kB
KernelStack:        4000 kB
PageTables:        39688 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     7734444 kB
Committed_AS:    4186924 kB
VmallocTotal:   34359738367 kB
VmallocUsed:      556904 kB
VmallocChunk:   34359177692 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:       63488 kB
DirectMap2M:     2942976 kB
=======

Also If we want to track any process, the folder /proc has details about each and every process running on the system.

Regarding loading the system:

There are two types of loads . Linear load  and Exponential load
In linear load, one process forks another process and waits for it to exit. The spawned process forks another process and waits for its child to exit. This keeps going on and on till the system eventually fails. To load the system with linear load we ran the following shell script:

#!/bin/bash
$0 &
wait

"$0 &" will run the same script in the background and 'wait' will make the current process to wait till the spawned process returns.

Similarly exponential load can be given by spawning 2 processes instead of one.
#!/bin/bash
$0 &
$0 &
wait

Collecting data:
The following code has to be embedded into the above script
# <epoch time> <PID> <Memory free> <swap free> <active memory> <inactive memory>

string=`date +%s`" "$$
i=`cat /proc/meminfo| grep "MemFree:"`
string=$string" "`expr "$i" : ".* \(.*\) kB"`
i=`cat /proc/meminfo| grep "SwapFree:"`
string=$string" "`expr "$i" : ".* \(.*\) kB"`
i=`cat /proc/meminfo| grep "Active:"`
string=$string" "`expr "$i" : ".* \(.*\) kB"`
i=`cat /proc/meminfo| grep "Inactive:"`
string=$string" "`expr "$i" : ".* \(.*\) kB"`
echo $string>>log
Sample output for linear load:
Sample output for exponential load:

Error removing file: Directory not empty

Something really weird happened today. I transferred some data to my external hard disk and for some reason I unplugged it from my comp without doing 'safely remove drive' (reason being I was lazy :P). Then after sometime I put it back on my laptop and tried removing the directory called Main_Game which I had created earlier. It said 'Error while deleting. Error removing file: Directory not empty'.

Then i tried doing that from terminal using 'rm -rf Main_Game'. Again it didn't work. It said rm: cannot remove 'Main_Game': Directory not empty


Then I thought there might be some process using that folder. So I restarted and tried again. It didn't work :(

Then I thought there might be some error in the filesystem. So I did force fsck.

$ sudo touch /forcefsck
$ sudo reboot

It successfully completed fsck. However the problem wasnt fixed

Then I did something which I should've tried long back and it worked!!

I simply deleted the folder (not force delete). The folder Main_Game was moved to recycle bin. I just deleted from there.

I dunno how this worked though :P

Saturday, 7 September 2013

Automatic log manager for Game of Thrones series.

I watch a lot of anime. When I started watching One Piece which had 500+ episodes, it was very hard for me to keep track of how many episodes I have seen already. So I used to keep a log file which always had the next episode's number and I used to manually update it whenever I watch an episode.

That was a good idea but not good enough :P. At least for awesome people like me doing work manually is too mainstream xD.
If you do all the work what is your computer there for???
So I wrote a script which automatically manages the log. And next time when I run the script it will continue from the place I stopped last time \m/. Now I am planning to start Game of Thrones TV series. People tell I'll like it because I am a big fan of Age of Empires and I love wars :D.

So now what I am planning to do is to automate viewing it just like I did for One piece. In the version of Game of Thrones which I have, each episode name has SxxExx in it. For example S02E09 is there in the file name of episode 9 in season 2. So using this I can iterate over series and inside that i can iterate over episodes.

Setup

Download the gist from here or copy it from here:

Step1

Place the script in the base folder which has folders of all the series. Make it executable:
$ chmod +x script.sh

Step2

create a file called "log" in the same folder. The log file contains current series number and episode number. For example if you are watching third episode of season 1, put 1:3 in that file and save it.

Running:

Just go that folder in terminal and do this:
$ ./script.sh

Now just enter the  number of episodes you want to watch in a stretch and enjoy!

Monday, 20 May 2013

Customizing linux terminal with powerline (powerline-shell)

Borded of how your terminal looks?
In the past I used to edit the bash superglobal $PS1 to make it look a littile better.
I found this awesome thing called powerline-shell on github which makes your terminal look so awesome. Not only it makes your terminal look beautiful it also helps us to visualize many things easily. Like errors, git stuff..etc
I took some time and modified it a little. Here is mine:

Download

How to get it?


  1.  Download powerline-bash.py from the link and place it in the home folder.
  2. Make it executable

    chmod +x ~/powerline-bash.py
  3. Then add the following lines to the file ~/.bashrc:
    function _update_ps1() {    export PS1="$(~/powerline-bash.py $?) " } export PROMPT_COMMAND="_update_ps1"
  4. Now patch the font. Download anonymous Pro-Powerline.ttf and open it to install it
  5. You are done!!! Now just open the terminal.


NOTE: If it doesn't work properly and prints some garbage elements then u have to patch the font you are using for your terminal from here

Saturday, 18 May 2013

Jarvis, at your sevice


Hello everyone! Its been a long time since I blogged. Today I will show you how to use 'Jarvis' which is an open source software which can be used to control your Linux system using your hand motion, gestures which was made as my Human Computer Interaction project. This is mainly an image processing based project developed using python.



Things u can do using Jarvis:


  1. The first thing you can do using Jarvis is control your mouse. You just need a colored object (preferably has color different from its background). So you can do things like draw in air!
  2. The second thing is that you can assign any gesture which is a combination of
    Left->Right, Right->Left, Top->Bottom, Bottom->Top to any command. So using this you can literally perform anything!!! The following are the things you can do by default:

  • Maximize/Minimize/Close current window
  • Go next and forward in PPT presentation
  • Page up and Page down
  • Switch window (Alt+tab)
  • Take screenshot
  • Shutdown/Suspend system
  • Mute and unmute
  • Open Calculator, File manager, Gedit


You can practically add anything else also. All you need to know is the command which does that and the equivalent of the gesture which you want to assign in the combination of Left->Right, Right->Left, Top->Bottom, Bottom->Top.

Getting dependencies:

Ubuntu:
$ sudo apt-get install python-opencv xdotool
Fedora:
$ sudo yum install python-opencv xdotool

Installation:

$ git clone https://github.com/alseambusher/jarvis.git
$ cd jarvis
$ ./install

Now you need to set the screen resolution of your screen. If your screen resolution is 1366x768 then skip this step.
$ gedit ~/.jarvis/config.py
change the value of variable RESOLUTION corresponding to your screen resolution.

Running:

Now simply open Jarvis from your Applications menu
OR
Do this:
$ cd ~/.jarvis
$ python main.py
Now click on Start Jarvis 

Add new gesture:

1. Go to settings from the File menu


2. Click on Add gesture from the File menu of settings


3. Suppose say that you want to add a gesture which opens terminal.
Say the gesture you wish to give is (Left to Right)->(Right to Left)->(Top to Bottom)->(Bottom to Top)
The command corresponding to open gnome terminal is 'gnome-terminal'

4. Fill the details and save it.


You are done!!!

Editing and deleting gestures are simple :P

How to use?

We need two different colored objects which are required to run. One the tracker and the other one is the flag!

  1. If the flag is not exposed then the gesture is disabled and Jarvis works as a mouse controller.
  2. When both tracker and flag are exposed the gesture begins. Perform the gesture using the tracker. Once the gesture is complete hide the flag. Jarvis then processes and analyses the gesture performed and checks for any matches from the existing database. If there is a match then it executes it!.

Customizing Tracker and Flag color:

By default the tracker is yellow color and flag is blue color.
You can change it by editing the config.py file

$ gedit ~/.jarvis/config.py

Change the min and max values of TRACKER_COLOR and GESTURE_COLOR corresponding to the HSV values of the color intended

By default these are the values:
TRACKER_COLOR={'MIN':[20,100,100],'MAX':[30,255,255]}
GESTURE_COLOR={'MIN': [108.0, 100, 10],'MAX': [118.0, 255, 255]}

Thank you. Dont forget to contribute to this open source project as there is a lot of scope for improvements. :)

Fork the project from here: https://github.com/alseambusher/jarvis

Thursday, 4 April 2013

Open with script in Gnome/Ubuntu

I always liked the feature open with script which was there in old ubuntu. I have no clue why they removed it. However as always in Linux there is always a way to do anything! Today I will show you a simple way( complex than before though ) to do it. Using this I was able to install Picasa Photo Viewer, Logism, yEd, MS Office..etc on my Ubuntu \m/

Step 1: Find MimeType of the target file (the file you want to open). You can find it in file properties


























Step2: Download this gist. And make it executable:

$ chmod +x open_with_script.sh

Step3: Then run the script and enter necessary details. For example I was trying to install yEd, an awesome Software Engineering Drawing tool. This is what I did:
NOTE that if the command is <command> <file name> enter as <command> %U





















Step4: This step is optional. This is to set font to the script. If you don't wanna do it, skip it. Open application called "Main Menu" or alacarte which comes by default in ubuntu. Then search for the script you just added and then set the font.

























Step5: Now just set the file to open with the script by default if necessary using file properties.


























Now you can simply open the file using yEd by default. So you are done!!! 

Saturday, 16 March 2013

Installing Turbo Assembler (TASM), Turbo Debugger (TD) on Ubuntu

Step 1
First we will install an windows emulator called dosbox.
sudo apt-get install dosbox

Step2

Download the packages for Turbo Assembler(tasm) Turbo Debugger(td)Create a directory for tasm in your home directory and extract files into that directory.If you are unable to extract type this in your terminal and try again
sudo apt-get install unrar

Step3

download this sample .asm file. Place the file in the tasm directory.

NOTE:  You can use your own asm file instead

Step4

Open dosbox( generally found in games sublist ). Now you have to mount the virtual c drive.
mount c /home/<username> eg: /home/alse

Step5

Now go to your TASM directory



Now test the test3.asm which you downloaded






Tuesday, 26 February 2013

Make STAR WARS message greet you when you open the terminal

I am a great fan of STAR WARS like many of you out there. So I decided to write a script which greets me with star wars message every time I open my Terminal to code.
Suppose say you are using Bash, when you open your terminal the file ~/.bashrc will run. Similarly if you are using Zsh => ~/.zshrc will run. So basically I can just put an echo statement in that to make it greet me every time I open my terminal. Today lets do something more interesting. Someting like this:


To get this you can just download this gist and add the contents in it to ~/.bashrc or ~/.zshrc or ~/.cshrc ..etc depending on which shell you are using. Or you can just copy the following and paste it in ~/.bashrc or ~/.zshrc or ~/.cshrc


Saturday, 16 February 2013

(98)Address already in use: make_sock: could not bind to address 0.0.0.0:443



I was setting up SSL on localhost to get https://localhost. I was successfully able to get the digital signature, sign it. But when i restarted apache2 I was getting this error:

(98)Address already in use: make_sock: could not bind to address 0.0.0.0:443

This means that port was already being listened. Hence at first I tried to kill the processes which are using that port. When this didn't work I tried this:

open /etc/apache2/ports.conf
Remove the line outside any <IfModule> tag which says Listen 443

Problem solved!!

Wednesday, 6 February 2013

Top 100 apps / software / libraries in Linux


Yesterday I took up the task of of listing out top hundred+ apps/softwares/libraries I use in Linux thinking that it might help people to make a list of what they have to install when they have newly installed linux.

         Editors
  1. vim - Vi improved
  2. gvim - Vim with GUI
  3. emacs
  4. kate
  5. geany - Good editor for many languages.
  6. bluefish - Good editor for PHP, Javascript, HTML, CSS
  7. code blocks
  8. eclipse
  9. netbeans
  10. pycharm 
  11. jedit

    Programming
  12. qt designer - Design in Qt
  13. pyqt4 - Python Qt library
  14. qt creater - Design and Code for Qt
  15. freeglut - OpenGL library
  16. filezilla - Good ftp client
  17. g++ - c/c++ compiler
  18. cmake - Cross-Platform Makefile Generator
  19. wireshark - Packet analyser
  20. unetbootin - startup disk creater
  21. apache2 - apache server
  22. mysql - mysql client/server
  23. php5 - php5 library
  24. php5-mysql - mysql library for php
  25. ipython - interactive python shell
  26. phpmyadmin - manage mysql databases
  27. open-jdk - java development kit
  28. git - revision control
  29. sqlite3 - database
  30. arduino - arduino programming
  31. linux-matlab - matlab for linux
  32. FontForge - create your ttf, ps..etc
  33. xampp

    General stuff
  34. unrar - extract files from rar archives
  35. ark - KDE archiving tool
  36. kchmviewer -  Windows CHM viewer for KDE
  37. gsnash-viewer - swf viewer
  38. virtualbox - x86 virtualization solution
  39. wine - wine is not an emulator
  40. deluge - torrent client
  41. linuxdcpp - Dc++ client
  42. ubuntu-tweak -tweak ubuntu settings
  43. compiz-config -change compiz settings
  44. k3b - CD/DVD buring tool
  45. brasero - CD/DVD buring tool
  46. nerolinux - CD/DVD buring tool
  47. playonlinux - Play on Linux
  48. q4wine -runs  GUI utility for wine applications and prefixes management.
  49. dropbox - cloud
  50. gnome-do - Launcher application
  51. gparted - partition manager
  52. empathy - GNOME multi-protocol chat and call client
  53. lightread - Google reader
  54. pidgin - IM client
  55. dolphin - File manager
  56. thunderbird - Mail manager
  57. cheese - webcam client
  58. evolution - calander
  59. adobe flash player
  60. axel - A light download accelerator for Linux
  61. proxychains - proxifier for linux
  62. ubuntu one - ubuntu cloud
  63. stellarium - astronomy
  64. byobu - cool terminal
  65. burg - customize how your bootloader looks
  66. dosbox
  67. docky - dock
  68. avant-window-navigator - MacOS X like panel for GNOME
  69. gnome-do - awesome searcher

    Update
  70. Conky

    Package Managers
  71. synaptic - package manager
  72. apt-fast - 'apt-get + axel' to download very fast
  73. aptitude - command line package manager
  74. pacman - package manager

    Browsers
  75. chomium-browser
  76. google-chrome-stable
  77. firefox
  78. konqueror - advanced file manager, web browser and document viewer

    Media editors
  79. picasa(on wine) - photo editor/viewer
  80. blender - 3D modelling
  81. gimp - photo editor
  82. audacity - audio editor
  83. inkscape - an SVG editing program
  84. dia - diagram editor (UML,Use Case,ER..etc)

    Update
  85. Kdenlive - awesome video editing software

    Media Players
  86. amarok
  87. banshee
  88. vlc
  89. mplayer
  90. Rhythmbox

    Interfaces
  91. unity
  92. gnome-shell 3
  93. kde plasma
  94. awesome
  95. openbox

    Games
  96. open Arena
  97. savage2
  98. assault cube
  99. nexuiz
  100. super tuxkart
  101. blobby volley
  102. hedgewars