作者:黛萊美文婷 | 来源:互联网 | 2024-11-24 12:27
在使用VPP进行性能测试的过程中,遇到了由配置不当引起的SIGBUS错误。经过分析发现,问题根源在于配置文件中的corelist-workers与workers参数设置不匹配。本文将详细解释这一问题及其解决方案。
在使用VPP(Vector Packet Processing)进行网络性能测试时,我遇到了一个SIGBUS错误。通过深入研究,我发现这个错误是由配置文件中corelist-workers与workers参数不一致导致的。下面将详细介绍这一问题。
1. 在源代码src/vlib/threads.c的第1004行,程序会根据*(tr->coremask)的值来启动相应数量的线程,线程的数量与*(tr->coremask)变量中被置位的位数相等;
2. *(tr->coremask)的值由配置文件指定,例如:corelist-workers 20-23,表示指定了4个CPU核心;
3. 在src/vlib/threads.c的第803行,程序会根据workers的值初始化相应数量的工作线程执行环境;
4. workers的值同样在配置文件中指定,例如:workers n,表示指定了n个工作线程。
异常情况:
当配置的workers数量少于corelist-workers中指定的核心数量时,会导致部分线程在启动时缺少对应的执行环境,从而引发错误。
解决方法:
1. 不在配置文件中指定corelist-workers参数,让系统自动分配;
2. 如果需要指定corelist-workers,则确保其指定的核心数量与workers参数的值相匹配,以避免上述错误的发生。