Friday, November 22, 2024

Đọc thông tin CPU trong Linux

-

Trong hệ điều hành Linux, CPU (Central Processing Unit) là bộ xử lý trung tâm của hệ thống, nó thực hiện các phép tính và điều khiển hoạt động của các thành phần khác trong máy tính. CPU trong Linux được điều khiển bởi kernel, và nó sử dụng các tài nguyên khác như RAM, bộ nhớ đệm, ổ đĩa, vv. để thực hiện các phép tính và hoạt động của hệ thống.

Xem thông tin phần cứng CPU

Trong Linux, bạn có thể sử dụng các công cụ như top, htop, cat /proc/cpuinfo để xem thông tin về CPU trên hệ thống của bạn, bao gồm tên CPU, số lượng core, tốc độ xung nhịp, các tính năng hỗ trợ, vv.

Ví dụ cho việc xem thông tin phần cứng CPU bằng cat /proc/cpuinfo

$ cat /proc/cpuinfo | more
processor	: 0
vendor_id	: GenuineIntel
cpu family	: 6
model		: 85
model name	: Intel(R) Xeon(R) Gold 6138 CPU @ 2.00GHz
stepping	: 4
microcode	: 0x2006b06
cpu MHz		: 1999.999
cache size	: 28160 KB
physical id	: 0
siblings	: 1
core id		: 0
cpu cores	: 1
apicid		: 0
initial apicid	: 0
fpu		: yes
fpu_exception	: yes
cpuid level	: 22
wp		: yes
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc cpuid pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2
apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch cpuid_fault invpcid_single pti ssbd ibrs ibpb stibp fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid avx512f avx512dq rdseed adx smap clflushopt clwb avx512cd avx512bw avx
512vl xsaveopt xsavec xgetbv1 xsaves arat pku ospke md_clear flush_l1d arch_capabilities
bugs		: cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit mmio_stale_data
bogomips	: 3999.99
clflush size	: 64
cache_alignment	: 64
address sizes	: 45 bits physical, 48 bits virtual
power management:

processor	: 1
vendor_id	: GenuineIntel
cpu family	: 6
model		: 85
model name	: Intel(R) Xeon(R) Gold 6138 CPU @ 2.00GHz
stepping	: 4
microcode	: 0x2006b06
cpu MHz		: 1999.999
cache size	: 28160 KB
physical id	: 2
siblings	: 1
core id		: 0
cpu cores	: 1
apicid		: 2
initial apicid	: 2
fpu		: yes
fpu_exception	: yes
cpuid level	: 22
wp		: yes
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc cpuid pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2
apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch cpuid_fault invpcid_single pti ssbd ibrs ibpb stibp fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid avx512f avx512dq rdseed adx smap clflushopt clwb avx512cd avx512bw avx
512vl xsaveopt xsavec xgetbv1 xsaves arat pku ospke md_clear flush_l1d arch_capabilities
bugs		: cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit mmio_stale_data
bogomips	: 3999.99
clflush size	: 64
cache_alignment	: 64
address sizes	: 45 bits physical, 48 bits virtual
power management:
--More--

Xem số core của máy chủ

Để hiển thị số lượng core của hệ thống trong Linux, bạn có thể sử dụng lệnh sau:

nproc

Lệnh này sẽ trả về số lượng core hiện có trên hệ thống. Ví dụ, nếu hệ thống có 4 core thì lệnh sẽ trả về số 4.

Bạn cũng có thể sử dụng lệnh lscpu để hiển thị thông tin chi tiết về CPU và core trên hệ thống. Lệnh này sẽ hiển thị thông tin như kiến trúc CPU, số lượng core, số thread, thông tin về cache, v.v.

$ lscpu
Architecture:        x86_64
CPU op-mode(s):      32-bit, 64-bit
Byte Order:          Little Endian
CPU(s):              8
On-line CPU(s) list: 0-7
Thread(s) per core:  1
Core(s) per socket:  1
Socket(s):           8
NUMA node(s):        1
Vendor ID:           GenuineIntel
CPU family:          6
Model:               85
Model name:          Intel(R) Xeon(R) Gold 6138 CPU @ 2.00GHz
Stepping:            4
CPU MHz:             1999.999
BogoMIPS:            3999.99
Hypervisor vendor:   VMware
Virtualization type: full
L1d cache:           32K
L1i cache:           32K
L2 cache:            1024K
L3 cache:            28160K
NUMA node0 CPU(s):   0-7
Flags:               fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc cpuid pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch cpuid_fault invpcid_single pti ssbd ibrs ibpb stibp fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid avx512f avx512dq rdseed adx smap clflushopt clwb avx512cd avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves arat pku ospke md_clear flush_l1d arch_capabilities

Ví dụ về cách đọc thông tin sử dụng tài nguyên CPU bằng top -c. Khi sử dụng lệnh top, bạn có thể xem thông tin về CPU trên hệ thống của mình. Dưới đây là một số thông tin bạn có thể thấy được:

  • %Cpu(s): tỉ lệ sử dụng CPU hiện tại của hệ thống.
  • us: tỉ lệ sử dụng CPU bởi các tiến trình người dùng.
  • sy: tỉ lệ sử dụng CPU bởi các tiến trình hệ thống.
  • ni: tỉ lệ sử dụng CPU bởi các tiến trình được ưu tiên.
  • id: tỉ lệ CPU không được sử dụng.
  • wa: tỉ lệ sử dụng CPU cho các hoạt động I/O đĩa.
  • hi: tỉ lệ sử dụng CPU cho các hoạt động I/O ngắt.
  • si: tỉ lệ sử dụng CPU cho các hoạt động I/O swap.
  • st: tỉ lệ CPU bị gián đoạn bởi các tiến trình khác trong hệ thống ảo hóa.

Bạn có thể sử dụng các phím mũi tên để di chuyển giữa các tiêu đề cột trong bảng top. Bạn cũng có thể sử dụng các tùy chọn khác để tùy chỉnh hiển thị của top, ví dụ như -d <thời gian cập nhật> để thiết lập thời gian cập nhật của bảng top.

top - 09:37:11 up 152 days, 11:30,  2 users,  load average: 0.08, 0.27, 0.23
Tasks: 310 total,   1 running, 199 sleeping,   0 stopped,   4 zombie
%Cpu(s):  0.1 us,  0.2 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem : 16399552 total,   815224 free,  2419572 used, 13164756 buff/cache
KiB Swap:  4194300 total,  4191976 free,     2324 used. 13591288 avail Mem

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
130031 root      20   0   43116   4304   3452 R   0.7  0.0   0:00.07 top -c
   857 root       0 -20  143376   7020   5876 S   0.3  0.0 212:31.02 /usr/bin/vmtoolsd
  2886 root      20   0 2020024  44448  27316 S   0.3  0.3 213:02.12 /usr/bin/containerd
 40831 nobody    20   0  726980  26924  11264 S   0.3  0.2 746:38.93 /bin/pushgateway
 40963 nobody    20   0  729892  39012  19944 S   0.3  0.2 276:46.19 /bin/alertmanager --cluster.advertise-address=0.0.0.0:9093 --config.file=/etc/alertmanager/config.yml --storage.path=/alertmanager
 41090 nobody    20   0 1313176 113404  53116 S   0.3  0.7 355:51.26 /bin/prometheus --config.file=/etc/prometheus/prometheus.yml --storage.tsdb.path=/prometheus --web.console.libraries=/usr/share/prometheus/console_libraries --web.console.templates=/usr/share/prometh+
126734 root      20   0       0      0      0 I   0.3  0.0   0:00.05 [kworker/4:2]
     1 root      20   0  225576   8704   6028 S   0.0  0.1   2:57.68 /lib/systemd/systemd --system --deserialize 38
     2 root      20   0       0      0      0 S   0.0  0.0   0:00.86 [kthreadd]
     4 root       0 -20       0      0      0 I   0.0  0.0   0:00.00 [kworker/0:0H]

Khi sử dụng các lệnh trên, nếu bạn muốn hiển thị thông tin một cách chi tiết hơn, bạn có thể sử dụng thêm các tùy chọn để tùy chỉnh đầu ra, ví dụ:

nproc --all # hiển thị số lượng core, bao gồm cả core ảo (thread)
lscpu | grep 'Core(s) per socket' # hiển thị số lượng core trên mỗi socket

Phân tích chỉ số phần trăm CPU trongtop -c

Bây giờ chúng ta sẽ phân tích các thành phần liên quan đến CPU khi dùng lệnh top -c. Ví dụ mình sẽ phân tích các thông tin sau đây:

%Cpu(s):  7.1 us,  0.3 sy,  0.0 ni, 92.5 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0

Phần này trong lệnh top cung cấp thông tin về tỉ lệ sử dụng CPU hiện tại của hệ thống.

  • %Cpu(s): Tổng tỉ lệ sử dụng CPU hiện tại của hệ thống.
  • us: Tỉ lệ sử dụng CPU bởi các tiến trình người dùng. Ở đây, giá trị là 7.1% tức là có khoảng 7.1% CPU được sử dụng cho các tiến trình người dùng.
  • sy: Tỉ lệ sử dụng CPU bởi các tiến trình hệ thống. Ở đây, giá trị là 0.3% tức là có khoảng 0.3% CPU được sử dụng cho các tiến trình hệ thống.
  • ni: Tỉ lệ sử dụng CPU bởi các tiến trình được ưu tiên. Trong trường hợp này, giá trị là 0.0%.
  • id: Tỉ lệ CPU không được sử dụng. Ở đây, giá trị là 92.5% tức là có khoảng 92.5% CPU không được sử dụng.
  • wa: Tỉ lệ sử dụng CPU cho các hoạt động I/O đĩa. Trong trường hợp này, giá trị là 0.0%.
  • hi: Tỉ lệ sử dụng CPU cho các hoạt động I/O ngắt. Trong trường hợp này, giá trị là 0.0%.
  • si: Tỉ lệ sử dụng CPU cho các hoạt động I/O swap. Trong trường hợp này, giá trị là 0.0%.
  • st: Tỉ lệ CPU bị gián đoạn bởi các tiến trình khác trong hệ thống ảo hóa. Trong trường hợp này, giá trị là 0.0%.

Phân tích chỉ số % sử dụng CPU của một tiến trình

Thông số này đang mô tả tiến trình “apache2” đang chạy trên hệ thống của bạn.

10565 www-data  20   0  480288 217000  66448 R  93.7  1.3   1:47.06 apache2 -DFOREGROUND

Dưới đây là giải thích chi tiết về các thông số:

  • 10565: đây là Process ID (PID) của tiến trình.
  • www-data: đây là tên người dùng chạy tiến trình. Trong trường hợp này, tiến trình đang chạy với quyền của người dùng “www-data”.
  • 20: đây là mức độ ưu tiên của tiến trình. Đây là mức độ ưu tiên “nice” của tiến trình, được sử dụng để điều chỉnh mức độ ưu tiên của tiến trình trên hệ thống.
  • 0: đây là tiền tố của tiến trình (prefix).
  • 480288: đây là kích thước bộ nhớ ảo được cấp phát cho tiến trình.
  • 217000: đây là kích thước bộ nhớ vật lý (RSS) được sử dụng bởi tiến trình.
  • 66448: đây là kích thước bộ nhớ chưa được sử dụng (shared memory) của tiến trình.
  • R: đây là trạng thái của tiến trình (Running).
  • 93.7: đây là tỷ lệ sử dụng CPU hiện tại của tiến trình, tính bằng phần trăm.
  • 1.3: đây là tỷ lệ sử dụng bộ nhớ hiện tại của tiến trình, tính bằng phần trăm.
  • 1:47.06: đây là thời gian CPU đã sử dụng bởi tiến trình tính bằng giây.
  • apache2 -DFOREGROUND: đây là câu lệnh chạy tiến trình.

Với CPU 93.7%, điều này cho thấy tiến trình đang sử dụng một phần lớn tài nguyên CPU của hệ thống. Vì bạn có 8 core, nên CPU sử dụng của tiến trình này có thể tương đương với sử dụng gần 8/100 phần tài nguyên CPU của hệ thống.

Thông số đang hiển thị chỉ cho biết tỷ lệ sử dụng CPU của tiến trình đó trên toàn bộ hệ thống, không phải trên một core cụ thể nào. Tuy nhiên, nếu giả định rằng hệ thống của bạn có 8 core, và tiến trình này đang sử dụng 93.7% của tài nguyên CPU trên toàn bộ hệ thống, thì tiến trình này đang sử dụng gần 7.5 core (tính bằng 93.7% của 8 core) trong khi chạy. Tuy nhiên, đây chỉ là một ước tính và không chính xác vì không phải tất cả các core đều có thể sử dụng được với cùng một tỷ lệ sử dụng CPU.

Để tính toán con số 7.5 core, bạn có thể sử dụng công thức sau:

Số core sử dụng = (Tỷ lệ sử dụng CPU / 100) x Tổng số core

Trong trường hợp này, với tỷ lệ sử dụng CPU là 93.7% và tổng số core là 8, ta có:

Số core sử dụng = (93.7 / 100) x 8 = 7.496

Vì số core không thể chia thành một phần, nên ta có thể làm tròn kết quả đến 1 chữ số thập phân gần nhất để ra được kết quả tương đối là 7.5 core.

Phân tích chỉ số load average trong top -c

Chỉ số load average là một đại lượng thể hiện mức độ tải trung bình trên hệ thống trong một khoảng thời gian nhất định (thường là 1 phút, 5 phút và 15 phút). Nó đo lường số lượng tiến trình đang chờ đợi được thực thi trên hệ thống. Load average càng cao thì có nghĩa là hệ thống đang phải xử lý nhiều tiến trình đồng thời và có thể gây ra tình trạng quá tải cho hệ thống.

Ví dụ tôi có 2 socket “Intel(R) Xeon(R) Gold 5218R CPU @ 2.10GHz” (40 Core mỗi socket). Và hiện tại đang có load average chỉ số sau:

load average: 44.81, 40.18, 38.86

Công thức tính load average là tổng số tiến trình đang chờ đợi trong một khoảng thời gian nhất định chia cho số lượng CPU (cores) có sẵn trên hệ thống.

Vì vậy, nếu load average trung bình trên ba khoảng thời gian (1 phút, 5 phút và 15 phút) lớn hơn số lượng CPU có sẵn trên hệ thống, thì điều này cho thấy hệ thống đang bị tải cao. Nếu load average nhỏ hơn số lượng CPU, thì hệ thống đang hoạt động tốt.

Ví dụ, nếu bạn có hệ thống với 8 cores và load average trung bình trên ba khoảng thời gian là 44.81, 40.18 và 38.86, thì load average trung bình trên ba khoảng thời gian là (44.81 + 40.18 + 38.86)/3 = . Nó lớn hơn số lượng CPU (80 cores) có sẵn trên hệ thống, vì vậy hệ thống đang bị tải cao.

Tuy nhiên, để đánh giá mức độ tải của hệ thống, bạn nên xem xét các yếu tố khác như tài nguyên hệ thống khác như bộ nhớ và đĩa cứng, lưu lượng mạng và loại công việc đang chạy trên hệ thống.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories