Trên kernel Arch 3.6.7 x86_64 tôi đang cố gắng tính đến việc sử dụng bộ nhớ của hệ thống, mà tôi càng nhìn vào nó, dường như càng có một lỗ hổng (trong kế toán của bộ nhớ đã sử dụng, không phải là lỗ hổng cách sử dụng).
Đây là một hệ thống mới khởi động. Không chạy nhiều ngoài systemd và sshd để giữ cho nó đơn giản
$ ps aux | sort -n -k6
...
root 316 0.0 0.0 7884 812 tty1 Ss+ 14:37 0:00 /sbin/agetty --noclear tty1 38400
matt 682 0.0 0.0 24528 820 pts/0 S+ 15:09 0:00 sort -n -k6
dbus 309 0.0 0.0 17280 1284 ? Ss 14:37 0:00 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation
matt 681 0.0 0.0 10808 1364 pts/0 R+ 15:09 0:00 ps aux
root 308 0.0 0.0 26060 1516 ? Ss 14:37 0:00 /usr/lib/systemd/systemd-logind
root 148 0.0 0.0 25972 1692 ? Ss 14:37 0:00 /usr/lib/systemd/systemd-udevd
matt 451 0.0 0.0 78180 2008 ? S 14:37 0:00 sshd: matt@pts/0
root 288 0.0 0.0 39612 2708 ? Ss 14:37 0:00 /usr/sbin/sshd -D
matt 452 0.0 0.0 16452 3248 pts/0 Ss 14:37 0:00 -bash
root 1 0.0 0.0 32572 3268 ? Ss 14:37 0:00 /sbin/init
root 299 0.0 0.0 69352 3604 ? Ss 14:37 0:00 /usr/sbin/syslog-ng -F
root 449 0.0 0.0 78040 3800 ? Ss 14:37 0:00 sshd: matt [priv]
root 161 0.0 0.0 358384 9656 ? Ss 14:37 0:00 /usr/lib/systemd/systemd-journald
Thông báo thông tin bộ nhớ chi tiết nhất mà tôi có thể tìm thấy là này từ năm 2007 mà dường như đã dẫn đến việc bổ sung các lĩnh vực PSS để hạt nhân nói chung chiếm một quá trình nhưng mã python của họ là dành cho kernel cũ và tiếc là một số / proc / k * file đã biến mất kể từ đó. Tài liệu / Proc / meminfo cũng hữu ích nhưng cũng già đi một chút.
Vì vậy, một minh chứng cho những gì tôi đang nhìn thấy.
# cat /proc/meminfo
MemTotal: 16345780 kB
MemFree: 16129940 kB
Buffers: 10360 kB
Cached: 48444 kB
SwapCached: 0 kB
Active: 24108 kB
Inactive: 46724 kB
Active(anon): 12104 kB
Inactive(anon): 3616 kB
Active(file): 12004 kB
Inactive(file): 43108 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 0 kB
Writeback: 0 kB
AnonPages: 11996 kB
Mapped: 16372 kB
Shmem: 3696 kB
Slab: 25092 kB
SReclaimable: 11716 kB
SUnreclaim: 13376 kB
KernelStack: 928 kB
PageTables: 2428 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 8172888 kB
Committed_AS: 34304 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 372788 kB
VmallocChunk: 34359362043 kB
HardwareCorrupted: 0 kB
AnonHugePages: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 12288 kB
DirectMap2M: 16680960 kB
Nếu chúng ta thêm sử dụng:
MemTotal - MemFree - Buffers - Cached = Used
16345780 - 16129940 - 10360 - 48444 = 157036
Tất cả Hoạt động * / Không hoạt động * dường như là các bộ đếm được áp dụng trên một số trang (không phải tất cả) vì vậy có thể sao chép những gì được tính ở nơi khác.
Active + Inactive = Used
46724 + 24108 = 70832 (not quite)
Commited_AS ở đây dường như theo dõi sát với tổng số không gian chia sẻ bộ nhớ riêng tư / chia sẻ bộ nhớ từ / Proc / * / smaps. đưa PSS vào tài khoản cũng xếp hàng. (Không quan tâm, tôi nhận được một Cam kết_AS lớn hơn rất nhiều trên một debian 32 bit 2.6.32-5-686)
AnonPages + Mapped + Commited_AS = Userspace?
11996 + 16372 + 34304 = 62672
Slab là nội tuyến với / Proc / slabinfo
Slab + Shmem + KernelStack + PageTables = Kernelspace?
25092 + 3696 + 928 + 2428 = 32144
Userspace? + Kernelspace? = Used?
62672 + 32144 = 94816
Vì vậy, ngắn ~ 63M. Tôi nhận ra rằng hạt nhân và tất cả các mô-đun được tải đang thiếu một số MB. Tấm có vẻ bao phủ rất nhiều, vì vậy nếu có bất kỳ mất tích, tôi không chắc chắn nếu điều đó sẽ tương đương với ~ 60Mb?
63 gần giống với con số Active + Inactive nhưng điều đó không đúng.
Vậy có ai biết công thức kỳ diệu không ?? Mặt khác, nếu hình tôi đang nhìn là đúng thì các vùng màu xám trong phân bổ bộ nhớ mà tôi có thể chọc vào là gì?
Nó xuất hiện linux ăn ram của tôi! Mặc dù một phần nhỏ hơn bình thường bị buộc tội =)
chỉnh sửa Commited_AS là một dự đoán từ hạt nhân của bộ nhớ cần bao nhiêu để chiếm 99,9% những gì nó đã cam kết, do đó không phải là một số được phân bổ thực sự. AnonPages + Mapped là một thành phần của nó, do đó để lại một lỗ lớn hơn, khoảng 100MB bây giờ.
User + Kernel
28368 + 32144 = 60512 != 157036
AnonPages và Mapped chủ yếu theo dõi với thông tin anon / ánh xạ từ / Proc / [0-9] * / smaps wgen dùng PSS / Shared vào tài khoản.
Các khu vực dành riêng dường như vừa vặn với khối đã lấy hết bộ nhớ:
Tổng free
bộ nhớ là 16345032Kb
Tổng bộ nhớ hệ thống là 16777216Kb
PCI 'lỗ' - lspci -v
266520K = 16510696K Số lượng
dự trữ - dmesg
92793K = 16417903K
edit2
Tôi nhận thấy việc sử dụng bộ nhớ bổ sung này không có trên máy ảo đang chạy bên trong hộp ban đầu /proc/meminfo
. Vì vậy, tôi bắt đầu chọc ngoáy xem có gì khác biệt giữa hai người. Cuối cùng nhận thấy rằng sự gia tăng tổng bộ nhớ vật lý có sẵn trùng khớp với sự gia tăng của bộ nhớ đã sử dụng.
phys 16GB used>144508 vm>50692 user>21500 kern>26428 u+ktot>47928
vm 64MB used>24612 vm>31140 user>14956 kern>14440 u+ktot>29396
vm 256MB used>26316 vm>35260 user>14752 kern>14780 u+ktot>29532
vm 1GB used>33644 vm>35224 user>14936 kern>14772 u+ktot>29708
vm 2GB used>41592 vm>35048 user>14736 kern>15056 u+ktot>29792
vm 4GB used>57820 vm>35232 user>14780 kern>14952 u+ktot>29732
vm 8GB used>82932 vm>36912 user>15700 kern>15388 u+ktot>31088
vm 12GB used>110072 vm>35248 user>14812 kern>15624 u+ktot>30436
vm 15GB used>122012 vm>35424 user>14832 kern>15824 u+ktot>30656
Tính ra là ~ 8Mb được phân bổ cho mỗi 1 GB bộ nhớ. Có thể là bản đồ bộ nhớ trong kernel ... nhưng tôi nghĩ rằng nó sẽ chỉ phát triển khi bộ nhớ được cấp phát chứ không phải là thiết lập khi khởi động.
Sẽ rất thú vị để xem nếu có ai có quyền truy cập vào bất kỳ máy bigmem nào nếu xu hướng tiếp tục?
ps
. Đó là cách sử dụng tổng thể trong /proc/meminfo
. Kế toán quy trình duy nhất là thông qua các smaps chiếm tài khoản cho bộ nhớ chung và riêng nhưng chỉ để so sánh với các giá trị AnonPages / Mapped từ meminfo.
ps
nằm bởi thiết kế. Đừng sử dụng nó cho kế toán bộ nhớ.