This week I was trying to find out what is the cause of the error that degrades the performance of Monkey. With the help of Eduardo (my mentor), I found out a few errors.
Web server benchmarking :
Server side profiling : I used a new tool of the name kcachegrind, which is a variation of valgrind, that helps find out how many times each function in the source code has been called and which function takes the maximum processing time.
Two simple things that I discovered that I was doing wrong are :
- For the purpose of debugging, I had been printing messages to the standard out, from the various functions of the caching plugin. I was also configuring the server with the trace mode on. This greatly slowed down the performance of the server.
- Also, at the end of stage_30 of the plugin, inspite of the request being successfully being handled by the plugin, it returned MK_PLUGIN_RET_NOT_ME, which meant that it would be handled by monkey core. This also affected the performance. I’m still working on fixing this issue and returning MK_PLUGIN_END at some point so that the request would be completely processed.
This blog post is regarding what I did during the week 7 of my GSoC internship. Due to unexpected emergencies, I could not access my laptop during the past few days because of which I could not send the update for the week on time.
I got some errors while integrating, such as :
bin/monkey: symbol lookup error: <path to monkey source code> /plugins/cache/monkey-cache.so: undefined symbol: je_malloc
I had to enable the –malloc-libc to get it fixed. But with no result. I used PLUGIN_TRACE to find out location of errors. I then tried to play around with the header files in the dependencies folder by including them in the necessary files this seemed to workout for me !
The next issue that I faced was that of a segmentation fault. I again used PLUGIN_TRACE to debug and find out the location and it turned out that it was being caused due to a null point exception.
These were a few among a list of other errors that I got.
I then did a basic integration of the caching plugin with the server – just an extra feature to look up files from the cache. I tried testing the performance of the server with and without the caching plugin, with the help of weighttp (a lightweight web server performance benchmarking tool) and found that I have done some grave error because of which the performance of the server deteriorates even more, when I run the server with the caching plugin (which is not supposed to happen !). I am looking into it right now.
Parallely I also tried out some basic tutorials for creation of GUI using Twitter bootstrap and Angular JS. This was the easiest part. But since as of now, the caching plugin is not yet ready, I will be concentrating on it till I get it fixed.
I hope to get it ready and working soon !
Link to code repo : https://github.com/tssavita/cache-plugin-implementation
Currently I am working on integrating the caching plugin with the monkey server. This week was spent on trying to fix errors that arise during integration. After the code refactoring, there were some errors that were present. I took time to fix those.
Problems are that arose :
I am stuck with a particular error related to je_malloc (something about a symbol missing, although I have included the necessary flags for dependencies in the makefile for the plugin). I am yet to fix it and hope to do so soon !
Timeline following :
I was supposed to finish integration by the end of this week and fix any errors in the coming week. But I am a little behind the schedule and need to speed up the work.
Tasks for the next week :
- Finish the integration
- Compare and test the efficiency of the server with and without the caching plugin.
This week was really tough ! I have one more exam on Wednesday the 25th and am preparing for it right now.
But earlier this week, with Eduardo’s help I started out with the integration of the plugin with the server. I used the proxy plugin code available in the proxy branch of monkey on github, that has the basic code that is required to create a plugin for the server. I have not completed the integration yet. Also according to my timeline, I am supposed to start with the integration, only next week.
Later, on Friday, I did a major refactoring of the code. Earlier I had a combined implementation of the hash table and cache. There was not a clean separation in the code. But this week, I rewrote the code to separate the various components such as hash table, the cache and the min heap. The refactored code is available on my github repo (The recently pushed files in the repo).
After Wednesday, I hope to speed up the process of integration only next week.