2011-12-27 25 views
26

Bao nhiêu bộ nhớ trung bình được tiêu thụ bởi hạt nhân Linux (trong không gian địa chỉ hạt nhân) trên mỗi kết nối mạng TCP/IP?Bao nhiêu bộ nhớ được tiêu thụ bởi hạt nhân Linux trên mỗi kết nối mạng TCP/IP?

+0

Bạn có thể mô tả tình huống chi tiết hơn không? Nếu không có nó, ước tính tốt nhất mà bất cứ ai có thể đưa ra sẽ giống như "giữa 1K và 10M", điều này sẽ không giúp bạn nhiều. Tôi giả sử bạn có nghĩa là kết nối TCP/IP, nơi một đầu (máy chủ?) Là máy của bạn.Bạn có thể giả định rằng kết nối hiện không hoạt động hoặc ít nhất là kết nối không bị treo (tức là mọi thứ đều bị ACK trong thời gian hợp lý)? – ugoren

Trả lời

40

Đối với một bộ nhớ kết nối TCP tiêu thụ phụ thuộc vào

  1. kích thước của sk_buff (cấu trúc mạng nội bộ được sử dụng bởi hạt nhân Linux)

  2. đọc và viết đệm cho một kết nối

kích thước bộ đệm có thể được tinh chỉnh theo yêu cầu

[email protected]:~# sysctl -A | grep net | grep mem 

kiểm tra cho các biến

những chỉ định việc sử dụng bộ nhớ đệm mặc định tối đa cho tất cả các kết nối mạng trong kernel

net.core.wmem_max = 131071 

net.core.rmem_max = 131071 

net.core.wmem_default = 126976 

net.core.rmem_default = 126976 

những chỉ định sử dụng bộ nhớ đệm cụ thể để kết nối tcp

net.ipv4.tcp_mem = 378528 504704 757056 

net.ipv4.tcp_wmem = 4096 16384 4194304 

net.ipv4.tcp_rmem = 4096 87380 4194304 

sự ba giá trị được chỉ định là kích thước bộ đệm "tối thiểu mặc định tối thiểu". Vì vậy, để bắt đầu với Linux sẽ sử dụng các giá trị mặc định của bộ đệm đọc và ghi cho mỗi kết nối. Khi số lượng kết nối tăng lên, các bộ đệm này sẽ được giảm [tối đa cho đến khi giá trị min đã chỉ định] Tương tự trường hợp cho giá trị bộ đệm tối đa.

Những giá trị này có thể được thiết lập sử dụng này sysctl -w KEY=KEY VALUE

ví dụ. Lệnh dưới đây đảm bảo bộ đệm đọc và ghi cho mỗi kết nối là 4096.

sysctl -w net.ipv4.tcp_rmem='4096 4096 4096' 

sysctl -w net.ipv4.tcp_wmem='4096 4096 4096' 
-1

Điều đó tùy thuộc. Trên nhiều thứ.
Tôi nghĩ rằng kết nối không hoạt động sẽ mất vài trăm byte.
Nhưng nếu có dữ liệu trong quá trình truyền và/hoặc nhận dữ liệu thì mức tiêu thụ sẽ tăng lên. Kích thước cửa sổ gần như có thể giới hạn mức tiêu thụ này.
Mức tiêu thụ thêm cho dữ liệu không chỉ là các byte trong hàng đợi nhận/truyền. Có tổng chi phí, do đó, một phân đoạn với một byte có thể mất khoảng 2K. TCP cố gắng giảm bớt điều này, ví dụ bằng cách hợp nhất các phân đoạn thành một sk_buff duy nhất, nhưng nó không phải lúc nào cũng thành công.

2

Cũng phụ thuộc vào lớp nào. Trong trường hợp của một kịch bản cầu nối thuần túy, chỉ có FDB cấp cầu. Khi định tuyến được phát, có bảng định tuyến và db cấp FDB/hàng xóm cấp IP. Và cuối cùng, khi ổ cắm cục bộ ở trong chế độ chơi, bạn có kích thước cửa sổ khóa, bộ đệm ổ cắm (cả gửi và nhận và chúng mặc định là 128k lần cuối cùng), danh sách phân đoạn (nếu được sử dụng), vì vậy đó là bộ nhớ đi, nhưng một câu trả lời rõ ràng là khó thực hiện với tất cả các bộ phận được sử dụng. Bạn có thể sử dụng ss -m để lấy số liệu thống kê bộ nhớ của các ổ cắm cục bộ.

+0

Bạn có thể giải thích cho tôi 4 ký tự (r, w, f, t) trong đầu ra 'ss -m' không? – pradeepchhetri

Các vấn đề liên quan