配置文件
配置文件路径:/opt/hlc/conf/hlc_config.json。
所属模块 |
配置项内容 |
配置项名称 |
默认值 |
取值范围 |
类型 |
是否影响性能 |
|---|---|---|---|---|---|---|
infra |
节点在集群中的位置 |
node_location |
1 |
0-7(不同client需配置不同位置) |
uint |
否 |
集群中节点数量 |
node_num |
2 |
1-8 |
uint |
否 |
|
每条任务统计的时延最大数 |
latency_stat_num |
1024 |
1-1,048,576 |
uint |
不影响主要任务性能 |
|
日志等级 |
hlc_log_level |
0 |
[0|1|2|3] (debug| info | warn | error) |
uint |
否 |
|
统计信息打印开关 |
stat_printf_switch |
0 |
[0 | 1](关/开) |
uint |
不影响主要任务性能 |
|
统计信息打印周期 |
stat_printf_cycle |
5 |
1-300s |
uint |
不影响主要任务性能 |
|
Timer模块绑核核心 |
timer_cpu_core |
[1,2,3] |
不和主进程绑相同核心 |
list |
否 |
|
共享内存亲和numa |
bind_numa |
-1 |
-1 - 3 |
int |
影响send,recv性能 |
|
mpa |
hlc加速协议 |
hlc_protocol |
3 |
0-3(0:none 1:tcp 2:udp 3:tcp&udp) |
uint |
否 |
HLC支持的最小端口 |
hlc_min_port |
50000 |
1025 - 65535 (需保证此项配置在每端都一致) |
uint |
否 |
|
HLC支持的最大端口 |
hlc_max_port |
51023 |
hlc_min_port-65535 (需保证此项配置在每端都一致) |
uint |
否 |
|
tcp支持的最小端口 |
hlc_tcp_min_port |
50000 |
1025 - 65535 (需保证此项配置在每端都一致) |
uint |
否 |
|
tcp支持的最大端口 |
hlc_tcp_max_port |
51023 |
hlc_tcp_min_port - 65535 (需保证此项配置在每端都一致) |
uint |
否 |
|
udp复用端口 |
reuse_ports |
[] |
hlc_min_port - hlc_max_port |
list |
否 |
|
端口最大复用次数 |
max_reuse_times |
1 |
0-2 |
uint |
是 |
|
HLC最小随机端口 |
min_random_port |
50000 |
hlc_min_port-hlc_max_port |
uint |
否 |
|
HLC最大随机端口 |
max_random_port |
51023 |
hlc_min_port-hlc_max_port |
uint |
否 |
|
ip白名单 |
white_list |
[] |
合法IP地址 |
list |
否 |
|
白名单开关 |
white_list_switch |
0 |
[0 | 1](关/开) |
uint |
否 |
|
ip黑名单 |
black_list |
[] |
合法IP地址 |
list |
否 |
|
黑名单开关 |
black_list_switch |
0 |
[0 | 1](关/开) |
uint |
否 |
|
端口黑名单 |
black_list_ports |
[] |
hlc_min_port-hlc_max_port |
list |
否 |
|
本端网口IP(虚拟IP) |
ip |
127.0.0.1 |
合法IP地址,建议配置为本机网口ip |
string |
否 |
|
HLC支持的远端最小ip |
min_remote_ip |
127.0.0.1 |
需包含本端ip地址 (需保证此项配置在每端都一致,且max,min尽量在同一网段,即配置的范围不超过255) |
string |
影响udp sendto性能 |
|
HLC支持的远端最大ip |
max_remote_ip |
127.0.0.100 |
需包含本端ip地址 (需保证此项配置在每端都一致,且max,min尽量在同一网段,即配置的范围不超过255) |
string |
影响udp sendto性能 |
|
udp组播支持的远端最小ip |
min_remote_multicast_ip |
225.0.0.1 |
合法IP地址 (需保证此项配置在每端都一致,且max,min在同一子网) |
string |
影响udp sendto性能 |
|
udp组播支持的远端最大ip |
max_remote_multicast_ip |
225.0.0.100 |
合法IP地址 (需保证此项配置在每端都一致,且max,min在同一子网) |
string |
影响udp sendto性能 |
|
I/O多路复用在阻塞模式下的自旋轮询时间 |
muxer_spin_usec |
32 |
1-2147483647 |
uint |
否 |
|
io多路复用在阻塞模式下的最大sleep阻塞时间 |
muxer_max_usleep |
0 |
0-2147483647 |
uint |
否 |
|
非阻塞链接线程使用的CPU核 |
nonblock_connect_cpu_cores |
[1,2,3] |
不和主进程绑相同核心 |
list |
否 |
|
ubr模块 |
dataQ大小 |
data_queue_size |
4 |
4-128 (MB) |
uint |
影响send,recv性能 |
dataQ长度与触发更新tail时读取的数据量之间比例 |
tail_update_after_read |
8 |
1-1024 |
uint |
影响send,recv性能(性能调优) |
|
ST/LD指令的flying_io时间 |
flying_io_timeout |
1 |
1-30(s) |
uint |
不影响断链性能 |
|
断链时查询eventQ状态定时器时间 |
event_queue_timer_interval |
10 |
1-1000(ms)(取值范围需小于disconnect_timeout) |
uint |
影响断链性能 |
|
建链超时时间 |
connect_timeout |
10 |
10-30(s) |
uint |
不影响正常建链性能 |
|
断链超时时间 |
disconnect_timeout |
1 |
1-30(s) |
uint |
不影响正常断链性能 |
|
UBR_Mgr管理的UB_TRX最大数量 |
ubr_max_managed_num |
1024 |
1-1024 |
uint |
否 |
|
UBR_Mgr管理的UBR_Listener最大数量 |
ubr_max_listener_num |
16 |
1-1024 |
uint |
否 |
|
链路心跳检测后台任务的执行时间间隔 |
heartbeat_timer_interval_sec |
1 |
1-100 |
uint |
否 |
|
链路心跳故障重试次数 |
heartbeat_timer_retry |
3 |
3-10 |
uint |
否 |
|
通过“数控分离”模式发送的最小数据包大小 |
multiblock_send_package_size |
2048 |
0-2147483647 |
uint |
影响send,recv性能(性能调优) |
|
shm(临时配置) |
shm类型 |
shm_type |
2 |
[0|1|2] (0:UB 1:IPC 2:UBS) |
uint |
否 |
shm接力flag开关 |
shm_wr_delay_comp_switch |
0 |
[0|1] (0:接力模式;1:非接力模式) |
uint |
否 |
一、latency_stat_num对打印的影响说明
统计时延开关打开时,当latency_stat_num>10000,仅打印全量时延数据。当latency_stat_num<=10000,会打印avg、p50等统计时延数据以及全量时延数据。
二、timer_cpu_core对性能的影响说明
在低IOPS场景建议进程业务核和timer核配置到同一CPU cluster内。
默认配置中,业务核和后台timer核位于不同的NUMA Node、cluster。后台timer核每隔固定一段时间唤醒,访问部分和业务线程共享的数据,导致业务核的cache失效。由于后台timer是固定时间唤醒,在低IOPS下对RTT时延更明显。通过将业务核和后台timer核绑定到同一cluster上,可避免cache失效的问题。
三、data_queue_size大小对时延影响
data_queue_size表示申请链路共享内存的大小,ubse配置文件/etc/ubse/ubse.conf中obmm.memory.block.size配置代表能够申请的最小共享内存粒度。
- obmm.memory.block.size > data_queue_size,申请的共享内存大小为ubse.conf配置的obmm.memory.block.size大小(例如obmm.memory.block.size=128,data_queue_size=4,申请最小共享内存大小为128MB)。
- obmm.memory.block.size <= data_queue_size,申请的共享内存大小为hlc_config.json配置的data_queue_size。
- 综合来看,HLC的data_queue_size大小对业务场景的时延及吞吐有较大影响。在包大小为256Byte场景下,随着data_queue_size增加,时延会增大10%-20%(当前增大范围仅供参考,具体数据需要根据使用场景的包大小、包率等综合评估调整)。默认最小值4MB适用于证券小包场景(如报文在几百字节内),其他场景需要针对性评估影响。
HLC将UB-Mem以RingBuffer方式循环使用,并支持使用data_queue_size配置项修改其大小。单段RingBuffer内存大小会影响其使用过程中的cache hit rate和dTLB hit rate。以dTLB hit rate为例,当内存较大时,需要的TLB表项会更多,TLB空间有限,会导致严重的dTLB cache miss,使时延增加;反之,减少TLB miss有助于降低时延,提高稳定性。对于RingBuffer随着大小增加,其容量也会增加,HLC受RingBuffer空间不足导致的停顿时间与次数会相应改善(还受更新tail指针的阈值影响),这在一定程度上能提高单生产单消费业务模型的吞吐。
avg(ns) |
p50(ns) |
p99(ns) |
|
|---|---|---|---|
4M |
541 |
535 |
695 |
8M |
547 |
540 |
685 |
16M |
546 |
535 |
690 |
32M |
629 |
625 |
760 |
64M |
626 |
625 |
745 |
128M |
631 |
635 |
750 |