Performance
Performance usually means certain characteristics of hardware or software. Measuring performance usually requires measurement and comparison of bandwidth, latency and throughput.
- For measuring performance, please see benchmarking.
- For increasing performance, please see tuning.
On PCs mostly the performance of hard disks, CPU, network and video cards are measured.
What affects performance
Cache
Caches are use to temporary store data, so we can access that data again faster. A common example is the OS caching files to RAM, so if you access them again while they are still in RAM, the OS doesn't need to perform disk access, and the file loads much, much faster. More important to most applications, however, is the internet. Most web browsers will store various website files on your hard disk, so it can load the page faster if you revisit it.
Compiler Optimizations
The performance of running software can also be effected by its compile options. Compile options are passed to the compiler. They state, among various things, optimizations that the compiler should perform. The programs most likely effected by these are programs that crunch numbers, lots of them, over and over. Examples are encoders/decoders, compression/decompression, multimedia applications, possibly some games, etc.
I/O
With I/O, mostly read and write to and from the hard disk, the factors of influence can be:
- the filesystem
- the bus-connection (scsi, ide or usb)
- the operating system cache
- the I/O scheduler
I/O scheduler
As of Linux 2.6 its possible to have different I/O Schedulers (See IOSched for more info). The I/O scheduler is what manages access to block devices such as the hard disk, it gets to determine when and what programs get access to the disk. There are currently three IOSched managers you can choose from.
- Anticipatory - The first scheduler, developed before IOSched was in place.
- Deadline - Acts like the Anticipatory scheduler only is much less complex.
- CFQ - Completely Fair Queuing scheduler, it divides up access fairly.
CFQ is probably the best for a desktop, while more specialized loads (servers) should look into Deadline or Anticipatory for their scheduling needs.