- 1 - processor là 1 bo mạch vật lý, 1 - processor có thể là 1 CPU, 1 CPU core hoặc 1 - processor có thể được thiết kết để tích hợp nhiều CPU trên nó. Nói chung nó là một bo mạch vật lý.
- Core là đơn vị tính toán cơ bản nhất của máy tính, 1 core sẽ thực hiện 1 phép toán số học(cộng, trừ, so sánh 2 số hoặc lấy giá trị) ở một thời điểm. Máy tính chúng ta đang dùng, chương trình chúng ta đang chạy tất cả đều là phép tính số học đối với máy tính. Ngày xưa 1 core chỉ thực hiện được một phép toán số học trên một đơn vị clock cycle(xem clock cycle là gì bên dưới), nhưng với thiết kết hyperthread của intel thì hiện tại 1 core có thể thực hiện được 2 hoặc nhiều phép toán số học trong một clock cycle. 1 core là 1 đơn vị vật lý nhưng với thiết kế hyperthread thì 1 core có thể được chia thành 2 đơn vị vật lý ảo(2 core ảo nhưng thực chất chúng chỉ nằm trên 1 đơn vị vật lý).
- Clock cycle là thời gian giữa 2 tín hiệu xung nhịp trong 1 core. Khi chúng ta đi mua máy tính, để ý có thông số ví dụ như "CPU: Intel Core i3 350M at 2.27GHz, dual core with hyperthreading" nghĩa là máy tính đó có 1 CPU với 2 core, mỗi core đều có thiết kế hyperthreading (hyperthread vừa giải thích ở trên) và con số 2,27Ghz(số này gọi là clock speed) nghĩa là mỗi core có tốc độ xử lý xung nhịp là 2,27 tỉ xung nhịp (clock cycle) trên một giây. Trong 1 clock cycle, số phép toán được tính toán càng nhiều thì máy tính đó càng nhanh (cái này là nhìn từ cpu chứ nhìn từ người dùng thì còn phụ thuộc vào nhiều yếu tố khác nữa).
- Multiprogramming là khái niệm liên quan tới phần mềm, nghĩa là nhiều phần mềm có thể chạy đồng thời với 1 CPU(nói 1 CPU là tương đương với nói 1 CPU core), tuy nói là chạy đồng thời nhưng vì cpu core chỉ thực hiện được 1 phép toán ở một thời điểm nên thật ra là có khoảng thời gian rất nhỏ giữa các lần chuyển các phép toán của các phần mềm, vì khoảng thời gian này rất nhỏ nên khiến người ta nghĩ là các tiến trình đó chạy đồng thời. Multiprogramming là khái niệm liên quan tới phần mềm, là thuật ngữ được dùng với máy tính ngày xưa, lúc đó khi load chương trình từ bộ nhớ ngoài lên RAM thì load toàn bộ chương trình. Khái niệm này đã lỗi thời đối với máy tính ngày nay.
- Multitasking thay thế cho khái niệm multiprogramming đối với máy tính ngày nay, trong các máy tính multitasking, khi load chương trình vào RAM thì sẽ load từng đoạn chương trình và được phân trang chứ không phải load toàn bộ chương trình.
- Multithreading là khái niệm liên quan tới phần mềm, nghĩa là một phần mềm có thể có nhiều phiên hoạt đông cùng khi. Ví dụ như bạn có 2 request tới server web PHP của bạn thì apache sẽ đẻ ra 2 thread để phục vụ 2 request đó cùng khi (giải thích rõ hơn ở phần 2), 2 thread này sẽ được phục vụ đồng thời trong CPU.
- Multi-processing: khác với những khái niệm liên quan tới phần mềm ở trên, multi- processing là khái niệm liên quan phần cứng, nghĩa là máy tính có nhiều - processor(cpu hoặc core) thì có thể phục vụ được nhiều - process(tiến trình) cùng lúc.
- Chương trình là một file chạy được ( execuable ) chưa các lệnh theo hướng chỉ thị ( instruction) được viết để thực thi một công việc nào đó trên máy tính. Khác với chương trình, - process là một phiên bản đang chạy của của một chương trình, - process được hiểu là các chương trình ở dạng runntime. Máy tính xây dựng một tiến trình từ một chương trình bằng cách copy chương trình vào RAM để chạy trên hệ điều hành của máy tính, cấp phát tài nguyên dựa trên mỗi chương trình. Trên góc nhìn từ kernel, một tiến trình bao gồm (1) không gian bộ nhớ người dùng (user-space) chứa mã nguồn chương trình và (2) các cấu trúc dữ liệu của kernel chứa thông tin trạng thái của tiến trình đó. Kernel duy trì một cấu trúc task_struct cho mỗi tiến trình để lưu các thông tin cho mỗi tiến trình đó như các - process ID liên quan, virtual memory table, bảng mô tả file (open file descriptor), đường dẫn hiện tại (current working directory)...
- Mỗi tiến trình đều có một ID hay là index number, số định danh này để xác định tiến trình này là duy nhaaasts trên hệ thống, đảm bảo các proccess descriptor không bị trùng nhau về mặt thông tin cấp phát. Người dùng có thể gửi một tín hiệu đến các - process này thông qua ID của chúng, ví dụ có thể gửi một SIGTERM đến - process để báo hiệu tắt.
- Init là một tiến trình đầu khi được khởi động bởi kernel để xây làm quản lý các - process trên hệt hống, một - process trên hệ thống đều có ít nhất một tiến trình cha.
Trong quá trình phát triển, Linux kernel hỗ trợ tiến trình real-time, vì vậy trong cuốn Understanding Linux Kernel, tiến trình được phân loại như sau:
- Real-time - process : đảm bảo khả năng xử lý và phản hời nhanh nhấp đảm bảo yếu tố hoạt động theo gian thực
- Normal - process : các tiến trình không đòi hỏi realtime, nên có độ ưu tiên thấp hơn tất cả các tiến trình real-time trong hệ thống. Một normal - process được chia thành 2 loại sau:
- Interactive - process: là các tiến trình tương tác với người dùng. Vì vậy nó dùng nhiều thời gian để chờ dữ liệu được nhập từ người dùng thông qua bàn phím hoặc chuột. Khi có input, tiến trình này cần được chạy càng sớm càng tốt để đảm bảo người dùng không cảm thấy ứng dụng bị lag. Các ứng dụng loại này như phần mềm text editor, shell, hoặc các ứng dụng GUI.
- Batch - process: là các tiến trình không tương tác với người dùng. Nói cách khác, các tiến trình này cứ âm thầm chạy trong hệ thống từ đầu đến khi kết thúc mà không cần phải gián đoạn chờ các input từ người dùng (ví dụ chương trình Compiler gcc, g++…). Các tiến trình này thường sử dụng nhiều thời gian của CPU, nhưng độ ưu tiên cần thấp hơn các tiến trình interactive - process.
- Trong mỗi - process lại có một hoặc nhiều tác vụ con gọi là Thread (tiểu trình), các thread này sử dụng chung vùng nhớ trong toàn bộ phạm vi của - process. Các - process chạy song song với nhau, các thread trong một - process cũng chạy song song với nhau. Về bản chất từ "song song" có tính tương đối bởi vì trong thực tế, trong một thời điểm CPU chỉ có thể chạy duy nhất một tác vụ, vì thế mỗi - process được phân chia khe thời gian (được lập lịch), mỗi thread trong một - process cũng được chia nhỏ khe thời gian ra nữa, nhưng do quá trình này quá nhanh nên đứng dưới góc độ con người chúng ta thấy chúng chạy song song với nhau. Ngoài ra các - process/thread có thể được đặt các chế độ ưu tiên khác nhau.
- Các thread được sử dụng nhiều trong chương trình yêu cầu thực hiện multi-task. Ví dụ một trường hợp đòi hỏi multi-task sau: một tiến trình web server của một trang web giải trí phải phục vụ hàng trăm hoặc hàng nghìn client cùng một lúc. Công việc đầu tiên của tiến trình là lắng nghe xem có client nào yêu cầu dịch vụ không. Giả sử có client A kết nối yêu cầu nghe một bài nhạc, server phải xử lý chạy bài hát client A yêu cầu; nếu trong lúc đó client B kết nối yêu cầu tải một bức ảnh thì server lúc đó không thể phục vụ vì đang bận phục vụ client A. Đây chính là kịch bản yêu cầu một tiến trình cần thực thi multi-task. Các thread trong tiến trình có thể thực thi đồng thời và độc lập với nhau. Nghĩa là nếu một thread bị block do đang chờ I/O thì các thread khác vẫn được lập lịch và thực thi thay vì cả tiến trình bị block.
![](http://3.bp.blogspot.com/-j3LvlWfEWqc/VXHHR-v5OCI/AAAAAAAAXzI/xvGdGvbBQ04/s400/- process.png)
- Theo dõi hoạt động của CPU
- Theo dõi hoạt động vào/ra mạng
- Theo dõi hoạt động vào/ra ổ đĩa
- Theo dõi hoạt động của bộ nhớ vật lý
- Theo dõi hoạt động của bộ nhớ ảo
- Theo dõi hoạt động của các tiến trình
-
CPU time
-
System Idle - process là tiến trình cho biết - % CPU đang rảnh rỗi.
-
cpu.idle:Percentage of time that the CPU or CPUs were idle and the system did not have an outstanding disk I/O request.
-
cpu.busy:complementation of cpu.idle that equals 100 minus cpu.idle
-
cpu.guest:Percentage of time spent by the CPU or CPUs to run a virtual - processor.
-
cpu.iowait:Percentage of time that the CPU or CPUs were idle during which the system had an outstanding disk I/O request.
-
cpu.irq:Percentage of time spent by the CPU or CPUs to service hardware interrupts.
-
cpu.softirq:Percentage of time spent by the CPU or CPUs to service software interrupts.
-
cpu.nice:Percentage of CPU utilization that occurred while executing at the user level with nice priority.
-
cpu.steal:Percentage of time spent in involuntary wait by the virtual CPU or CPUs while the hypervisor was servicing another virtual - processor.
-
cpu.system:Percentage of CPU utilization that occurred while executing at the system level (kernel).
-
cpu.user:Percentage of CPU utilization that occurred while executing at the user level (application).
-
cpu.cnt:Number of cores of cpu.
-
cpu.switches:A kind of counter that counts how many times CPU switches between context.
-
All UNIX-like systems traditionally display the CPU load as 1-minute, 5-minute and 15-minute load averages. Essentially, the load average represents the fraction of time that the CPU is busy. Remember that a CPU can be over-utilized – processes can be waiting for a CPU to become available, so you could see utilization rates over 1.00. The “perfect” utilization point of 1.00 per CPU means that CPU is executing 100- % of the time and no processes are waiting for a CPU to become available. (On a machine with a single dual-core CPU that point would be 2.00, on a dual quad-core CPU – 8.00 and so on). Of course a utilization of 1.00 per CPU would mean that there is no spare capacity to take an increased load, so most administrators are worried when they see utilization numbers consistently over 0.70.
-
Các thông số trong
top
về CPU -
%us – percentage of time processes execute in user mode
-
%sy – time processes spent in system (kernel) mode
-
%ni – time spent executing in user mode under nice priority
-
%id – idle time
-
%wa – time spent waiting on I/O or timer
-
%hi – time spent servicing hardware interrupts
-
%si – servicing software interrupts
- Stress CPU. V
yum install epel-release stress
stress --cpu 2 --timeout 180
- Test CPU Ben
yum install sysbench
sysbench --test=cpu run
- df.bytes.free: the available capacity of the disk
- df.bytes.free.percent: the percentage of the available capacity of the disk float64, like 32.1
- df.bytes.total: the total capacity of the disk
- df.bytes.used: the used capacity of the disk
- df.bytes.used.percent: the percentage of the used capacity of the disk
- df.inodes.total: the number of inodes
- df.inodes.free: the number of available inodes
- df.inodes.free.percent: the percentage of available inodes
- df.inodes.used: the number of used inodes
- df.inodes.used.percent: the percentage of used inodes
-
disk.io.ios_in_progress:Number of actual I/O requests currently in flight.
-
disk.io.msec_read:Total number of ms spent by all reads.
-
disk.io.msec_total:Amount of time during which ios_in_progress >= 1.
-
disk.io.msec_weighted_total:Measure of recent I/O completion time and backlog.
-
disk.io.msec_write:Total number of ms spent by all writes.
-
disk.io.read_merged:Adjacent read requests merged in a single req.
-
disk.io.read_requests:Total number of reads completed successfully.
-
disk.io.read_sectors:Total number of sectors read successfully.
-
disk.io.write_merged:Adjacent write requests merged in a single req.
-
disk.io.write_requests:total number of writes completed successfully.
-
disk.io.write_sectors:total number of sectors written successfully.
-
disk.io.read_bytes:the number in the result measured in byte
-
disk.io.write_bytes:the number in the result measured in byte
-
disk.io.avgrq_sz:the numbers below are what iostat -x 1 sees
-
disk.io.avgqu-sz
-
disk.io.await
-
disk.io.svctm
-
disk.io.util:the number in percentage, like 56.43 in 56.43- %
-
CEPH IO
ceph osd pool create scbench 100 100
rados bench -p scbench 10 write --no-cleanup
rados -p scbench cleanup
- FIO Random Benchmarks
yum install fio
fio --time_based --name=benchmark --size=5G --runtime=30 --filename=/dev/sdb --ioengine=libaio --randrepeat=0 --iodepth=128 --direct=1 --invalidate=1 --verify=0 --verify_fatal=0 --numjobs=4 --rw=randwrite --blocksize=4k --group_reporting
fio --time_based --name=benchmark --size=100G --runtime=30 --filename=/dev/sdb --ioengine=libaio --randrepeat=0 --iodepth=128 --direct=1 --invalidate=1 --verify=0 --verify_fatal=0 --numjobs=4 --rw=randread --blocksize=4k --group_reporting
- IO statistics `` yum install -y sysstat iostat
## 5. Related memory
- mem.memtotal:the size of total memory
- mem.memused:the size of used memory
- mem.memused.percent:the percentage of the size of used memory
- mem.memfree : the size of free memory
- mem.memfree.percent
- mem.swaptotal:the size of total swap
- mem.swapused:the size of used swap
- mem.swapused.percent:the percentage of the size of used swap
- mem.swapfree : the size of free swap memory
- mem.swapfree.percent
- When a process requests the kernel to allocate memory and the system has run out of physical memory, the kernel will start paging out the least-used memory blocks to disk to free up some space, until the process that allocated them needs them back, at which point the kernel will have to find another least-used block, page it out and page in the original block in physical memory. This mechanism means that more memory is available to applications than the physical memory installed on the server – this memory is known as virtual memory. The good thing is that your application doesn’t even know it is using virtual memory. But that doesn’t mean you should not keep track of memory usage because nothing is free. Since disk access is slower than RAM access, if your system starts paging excessively, virtual memory access will become a performance bottleneck. (A quick note: although the terms paging and swapping are often used interchangeably, strictly speaking paging refers to individual memory pages being loaded or saved to disk, and swapping – to the entire memory space of a Linux process being moved from memory to disk or vice versa).
## 6. Related - network
- net.if.in.bytes
- net.if.in.compressed
- net.if.in.dropped
- net.if.in.errors
- net.if.in.fifo.errs
- net.if.in.frame.errs
- net.if.in.multicast
- net.if.in.packets
- net.if.out.bytes
- net.if.out.carrier.errs
- net.if.out.collisions
- net.if.out.compressed
- net.if.out.dropped
- net.if.out.errors
- net.if.out.fifo.errs
- net.if.out.packets
- net.if.total.bytes
- net.if.total.dropped
- net.if.total.errors
- net.if.total.packets
## 7. Related process
- process.cpu.all: the sys CPU and user CPU that a - process and its sub- process use, measured in jiffies
- process.cpu.sys: the sys CPU that a - process and its sub- process use, measured in jiffies
- process.cpu.user: the user CPU that a - process and its sub- process use, measured in jiffies
- process.swap: the swap that a - process and its sub- process use, measured in page
- process.fd: the number of file descriptors that a
- process.mem: the memory that a - process uses, measured in byte
## 8. ulimit tool
- ulimit được sử dụng để quản lý phần tài nguyên giới hạn cho từng người dùng trên hệ thống, giúp chống hiện tượng nghẽn cổ chai và tăng priority cho các người dùng và dịch vụ khác.
- Xem các thông tin về quản lý tài nguyên
ulimit -a
## 9. Proc folder
- Thư mục proc là một hệ thống phân cấp đại diện cho trạng thái của Linux Kernel. Ở thư mục chính sẽ là hiển thị tổng quan về hệ thống , tương ứng với mỗi folder sẽ là thông tin của từng tiến trình tương ứng với process ID