
# HCE 2.0上tcp_rmem行为和其他低版本内核差异说明
#### 问题现象
从低版本内核（内核版本号为5.10之前的内核，比如4.18）升级至高版本的HCE内核，内核对tcp_rmem的处理方式存在变动，由原先的TCP缓冲区上限自适应调整为由用户态socket程序自设置。如果用户态socket参数设置的不合理，在低版本内核上，因为系统自适应，可以正常运行，但是在高版本内核上，系统取消了自适应，完全按照用户态socket参数设置，无法正常运行。
#### 原因分析
linux社区在低版本内核，如4.18内核上，TCP连接会通过tcp_fixup_rcvbuf在新建链接时重新调整大小，覆盖系统默认的tcp_rmem的参数上限。而linux社区在5.10内核调整和简化了缓冲区的大小计算机制，移除了tcp_fixup_rcvbuf流程，使得整个机制更加简单跟直观，TCP连接仅根据系统默认的tcp_rmem的参数上限或用户态socket参数设置进行重新调整。
#### 解决方法
需要正确设置用户态socket参数，保障tcp_rmem的值符合预期。
