10.1 緩存管理簡介

        TCP連接在進行數據傳輸時內存的佔用主要發生在:

(1)發送隊列(包括Small Queue)

(2)接收隊列(包括亂序隊列、prequeue隊列、異步等待隊列、backlog隊列)

        TCP的內存資源主要有:

(1)tcp_mem(3個INTEGER變量,由net.ipv4.tcp_mem內核參數配置):low,pressure,high

low:當TCP使用了低於該值的內存頁面數時,TCP不會考慮釋放內存。

pressure:當TCP使用了超過該值的內存頁面數量時,TCP試圖穩定其內存使用,進入pressure模式,當內存消耗低於low值時則退出 pressure狀態。

high:允許所有tcp sockets用於排隊緩衝數據報的頁面量(如果超過這個值,TCP 連接將被拒絕)。

(2)tcp_wmem(3個INTEGER變量,由net.ipv4.tcp_wmem內核參數配置): min,default,max。這是爲TCP socket預留用於發送緩衝的內存。

(3)tcp_rmem(3個INTEGER變量,由net.ipv4.tcp_rmem內核參數配置): min,default,max。這是爲TCP socket預留用於接收緩衝的內存。

        TCP緩存管理的任務是有效使用這些內存資源。

        下面介紹一下 struct sock數據結構中與緩存管理相關的部分成員:

int sk_forward_alloc:預分配內存, 即TCP連接的內存cache

int sk_rcvbuf:接收緩存大小;可以使用SO_RCVBUF socket選項設置

int sk_sndbuf:發送緩存大小;可以使用SO_SNDBUF socket選項設置

int sk_wmem_queued:發送隊列中所有skb所佔內存大小

atomic_t    sk_wmem_alloc:發送緩存已經使用的字節數(包括髮送到底層IP發送隊列中的skb所佔內存)

atomic_t    sk_rmem_alloc:接收緩存已經使用的字節數

        全局變量:

atomic_long_t tcp_memory_allocated:全部已分配的TCP內存的字節數

int tcp_memory_pressure:爲1時意味着內存壓力較大

發佈了79 篇原創文章 · 獲贊 46 · 訪問量 22萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章