What happened Can we trust anything that gprof says Which parts of its output are entirely wrong like this easy is the same as hard business and which parts are roughly correct, give or take a measurement error To answer this, we need to briefly discuss how gprof works. Roughly, gprofs two sources of information are profil and mcount profil a cousin of creat in that it could have been spelled with an e as well updates an instruction address histogram every 1. That is, 1. 00 times a second the OS looks which instruction the program is executing, and increments a counter corresponding to that instruction. So the share of increments corresponding to a functions body is proportionate to the share of time the program spent in the function. Specifically, when a function is entered, it calls mcount to record a call to itself from the caller the caller is generally easy to identify because it necessarily passes a return address to your function and that address points right into the callers body. So if f calls g 1. With this in mind, we can roughly tell what gprof knows. Linux Information Portal YoLinux. Linux sites. Covers Linux topics from desktop to servers and from developers to. Linux distributions can leverage an extensive range of commands to accomplish various tasks. For most Linux distros, bash bourne again shell is the default command. This guide takes you from a clean Ubuntu install to a working installation of OpenCV 2. Read More. Well see how gprof and KCachegrind lie to us and why they do so, discuss the limits within which we can trust them nonetheless, and attempt to draw more general. Status. This is a 2. GnuCOBOL FAQ. Sourced at gcfaq. Courtesty of ReStructuredText, Sphinx, Pandoc, and Pygments. Specifically, it knows that easy and hard were both called once work, called from each, ran twice. This info is from mcount and its 1. The program spent almost no time in the code of easy and hard, and most of its time in the code of work. This info is from profil and its rather reliable because the program ran for 3 seconds, which means we had 3. If almost all of these increments are in work, thats significant enough. What about the share of time easy spent in its call to work, and the share of time hard spent in work By now we know that gprof knows absolutely nothing about this. So it guesses, by taking 3. This shows how bad results can be produced from perfectly good measurements, if passed to the wrong algorithm. More generally, gprofs output falls into the following categories, listed in decreasing order of reliability Number of calls 1. I think please correct me if Im wrong. Self seconds in the Flat profile time spent in a given function not including children reliable to the extent that 1. Seconds attributed to call graph edges contribution of children to parents, total runtime spent in selfchildren, etc. Only trust it if theres zero code reuse in a given case that is, f is only called by g, or if the function in question is known to take about the same time regardless of the call site for example, rand. BTW, the fact that gprof lies doesnt mean that its documentation does on the contrary, man gprof says, in the BUGS section The granularity of the sampling is shown, but remains statistical at best. We assume that the time for each execution of a function can be expressed by the total time for the function divided by the number of times the function is called. Thus the time propagated along the call graph arcs to the functions parents is directly proportional to the number of times that arc is traversed. Unfortunately, users tend to read tools output without reading documentation. The ability of users who arent into profiling tools to understand the implications of this passage is a separate question. The man page also refers to papers from 1. An age of over three decades is a good reason to cut a program some slack. In a way, gprofs age is not only a source of its limitations, such as only 1. Now lets look at a more modern profiler called callgrind a valgrind plugin. Being more modern, callgrind has a few advantages over gprof such as not lying in its call graph though some would debate that as well see, and coming with a GUI program to visualize its output called KCachegrind. KCachegrind the viewer as opposed to callgrind the measurements collector does lie in its call tree as opposed to call graph as well shortly observe. But first lets have a look at its truthful reporting of the situation with easy being easier than hard As you can see, easy isnt even shown at the graph KCachegrind hides things with insignificant cost you can, however, see the cost of mains call to easy and hard at the source view indeed easy is 1. Why 1. 00. 0x and not 1. Because I changed hard to run a million iterations instead of a billion, bringing the difference down to 1. Why did I do that Because callgrind is slow its based on Valgrind which is essentially a processor simulator. This means that you dont measure time you measure things like instructions fetched and cache misses which are interesting in their own right, and you get an estimation of the time the program should take given these numbers and your processor model. It also means callgrind is slow. Is it slower than gprof Not necessarily. With gprof, code runs at near native speed, but you only get 1. With callgrind you get much more data points per second. So for a hairy program, with callgrind you get statistically significant data more quickly so effectively callgrind is faster. But for a simple program with just a couple of hot spots, callgrind is slower because if the program has a costly part 1 and then a costly part 2, itll take callgrind more time to even get to part 2, whereas gprof, with its near native speed, will give you good enough data from its fast run. So much about speed now lets look at a case where KCachegrind lies to us, and then well discuss why it happens. To expose the lie, well need a more complicated program. Well achieve the required complexity by having two worker functions instead of one, and then adding a manager a function that does nothing except calling the two workers with the number of iterations to run. How does the manager decide the number of iterations each worker should run Based on the project requirements, of course. Our projects will be two more functions, each calling the manager with its own pair of iteration numbers for the two workers. As you can see, both workers work on both projects, but each project is mostly done by one of the workers, the other contributing 1. Now lets see what KCachegrind says about this we need to run callgrind, which can be done without special compilation flags gcc o try. Heres what well see The bottom part of the screen shows us truths, but the top part shows falsehoods. The truth is that each project called the manager once the manager called each worker twice and each worker did half the work in the program all shown at the call graph at the bottom. However, at the top, each of the project functions occupies half the window and shows that worker. The Ultimate A To Z List of Linux Commands. Short Bytes Linux distributions can leverage an extensive range of commands to accomplish various tasks. For most Linux distros, Bash bourne again shell is the default command line interface or shell used to execute these commands. In this A to Z list of Linux commands, we have tried to include as many commands as possible which can be run using bash. CLIs command line interface have existed since ages. We can find their roots in the first instance of CLI built for interfacing with computers over teletype machines in the 1. It allows a user to interact with the system, taking character based command inputs from the keyboard or a script. However, CLI is just an interface, the main task is done by a program called command language interpreter. In the past, we compiled the list of commands for the CMD command line interpreter in Microsoft Windows, you can take a look at it below Its a known fact that the command line interface CLI, also known as the shell, is an integral part of the digital lives of various Linux users even when the graphical desktop environments on Linux systems have become quite user friendly. The first piece of text you see when you land on the shell is called prompt. It signifies systems readiness to execute commands. The shell is accessed using the Terminal a hardware device used to input data into, and displaying device from. However, the terminal application you see on your Linux systems is an emulator that replicates the jobs of a real world terminal. Many people often confuse the terms shell and terminal. Take the example of a car the body of the car is the terminal and the dashboard can be considered as the shell where you perform various operations like acceleration, reverse, shifting, etc. The car responds to your actions performed using the dashboard. Similarly, the terminal displays responses for the commands executed using the shell or CLI. Is Linux CLI case sensitiveThe answer is, yes. If you try to run LS instead of ls, it would display an error. There are some advantages of using a case sensitive command line. The computers that existed in earlier decades werent fast enough, it was favorable to compare identical strings instead of normalizing the upper and lower cases. This continued and became a habit, even though todays machines are way faster and efficient. It also gives people the flexibility over the choice of the command name. A Z List of Linux Commands. So, In this post, I have tried to compile a list of commands used in various Linux distributions. This has been possible with inputs from Ubuntu manual, SS6. Linux Dev Center. As you might be knowing, some or many of these commands may not work on your distribution. Running those commands may require you to install additional packages or its just that the commands arent meant to work on your system. The descriptions of these Linux commands are based on their manual pages. To access the man page man commandname. For eg man cat. If you find any discrepancy, please feel free to contact for any correction. Linux Commands ACommand. Descriptionaccept Accept or Reject jobs to a destination, such as a printer. Check a users RWX permission for a file. GNU autoconf tooaconnect ALSA sequencer connection manager. Show information about the Advanced Configuration and Power Interface. Check if ACPI functionality exists on the system. Informs user space programs about ACPI events. Used to convert addresses into file names and line numbers. Formats for internet mail addresses. An alternative Linux Gettyalias Create an alias for Linux commandsalsactl Access advanced controls for ALSA soundcard driver. Perform readwrite operation for ALSA Raw. MIDI ports. amixer Access CLI based mixer for ALSA soundcard driver. Used to run commands periodically. Sound recorder and player for CLI. CLI utility used to play MIDI files. Show Advanced Power Management APM hardware info on older systems. Used to handle events reported by APM BIOS drivers. Shows the list of all man pages containing a specific keywordapt Advanced Package Tool, a package management system for Debian and derivatives. Command line utility to installremoveupdate packages based on APT system. Another utility to addremoveupgrade packages based on the APT system. A utility to createmodifyextract from archives. Display print machine hardware name. Just like aplay, its a sound recorder and player for ALSA soundcard driver. Record standard MIDI files. Used to make changes to the systems ARP cacheas A portable GNU assembler. An interactive spell checker utility. Used to schedule command execution at specified date time, reading commands from an input file. Used to execute jobs queued by the at command. List a users pending jobs for the at command. Delete jobs queued by the at command. Used to send an audio recording as an email. An audio mixer utility. Generate configuration scripts from a TEMPLATE FILE and send the output to standard output. Create a template header for configure. Creates GNU standards compliant Makefiles from template filesautoreconf Update generated configuration files. Generate a preliminary configure. Update a configure. Used to find and replace text in a files. Linux Commands BCommand. Descriptionbadblocks Search a disk partition for bad sectors. Used to print characters as a poster. Used to display filenames with directoy or suffix. GNU Bourne Again Shell. Used to run commands entered on a standard input. Access the GNU bc calculator utility. Send processes to the background. Notify about incoming mail and senders name on a system running comsat server. Used to attach a name to a socket. A GNU parser generator, compatible with yacc. Used to exit from a loop eg for, while, select. Used to run shell builtin commands, make custom functions for commands extending their functionality. Used to call the cmp program for b Used to call the diff program for b Used to call grep for b A block sorting file compressor used to shrink given files. Used to apply less show info one page at a time to b Used to apply more an inferior version of less to b Linux Commands CCommand. Descriptioncal Show calendar. Used to control PCMCIA sockets and select configuration schemes. Keeps an eye on the addedremoves sockets for PCMCIA devices. Execute a command conditionally by matching a pattern. Used to concatenate files and print them on the screen. GNU C and C compiler. Used to change directory. Used to rip a CD ROM and make WAV file. Record audio from CD more reliably using data verification algorithms. Used to write all the content specified to a file to a CD all at once. Used to record data or audio compact discs. Show or change the disk partition table. Used to change user password information. Used to change file attributes. Used to change active working directory. Used to change real user name and information. Used to change group ownership for file. Manage execution of runlevel services. Change access permission for a files. Change the owner or group for a file. Update password in a batch. Run a command with root privileges. Alter process attributed in real time. Switch login shell. Change foreground virtual terminal. Perform a CRC checksum for files. Used to clear the terminal window. Compare two files byte by byte. Filter reverse and half reverse line feeds from the input. Filter nroff output for CRT previewing. Remove columns from the lines of a file. A utility that formats its input into columns. Used to compare two sorted files line by line. Used to execute a command with arguments ignoring shell function named command. Used to compress one or more files and replacing the originals ones. Resume the next iteration of a loop. Copy contents of one file to another. Copy files from and to archives. A Little Jazz Exercise Oscar Peterson Pdf File. GNU C language processor. A daemon to execute scheduled commands. Same work as cron. Manage crontab files containing schedules commands for users. Split a file into sections on the basis of context lines.