The main subsystems of Linux are CPU, Memory, IO, Network. in these subsystems, they are highly dependent on each other. A high load on any subsystem can cause problems in other subsystems. For example: a large number of paging requests to memory caused by the high throughput of the blocking NIC causes CPU overhead CPU overhead resulting in memory request queue a large amount of disk write requests from memory resulting in CPU and IO channel overhead and in order to optimize the system, we must locate the bottleneck. Even if the problem seems to be caused by a subsystem, it may be due to the high load on other subsystems.
To understand where to start optimizing bottlenecks, the first task is to analyze the current system's behavioral characteristics. The application of any system is usually divided into the following two categories: I/O Category: IO category applications require high-load use of memory and lower-level storage systems. Because the IO category processes large amounts of data in-memory, it is not too dependent on the CPU and the network (unless it is a networked storage system). The extent of the IO category uses CPU resources to generate IO requests, and then the CPU usually goes to sleep. Database applications typically fall into the IO category. CPU Category: CPU applications require high-load CPU usage. CPU-based applications require CPU bulk processing requests and mathematical calculations. A large number of Web servers, mail servers, and other rendering compute servers are typically CPU-bound.
Various subsystems of Linux