Aricent FSM培训记录
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4、介绍了系统初始化流程以及CU_UP的初始化流 程,首先介绍了GTPUPR模块的初始化处理, 11
DAY1
2、介绍了DU内DUMGR模块和DU_UP模块间的接 口,即composer和parser模块,这两个模块代码可 以自动生成,可提供专门的工具,后续会具体展示 使用方法。
3、多次询问了DPDK的具体使用情况,具体答复了 DPDK仅用于直接和网卡打交道的处理,设备内模 块间数据传递不使用DPDK机制;DPDK只在 simulator中运用过,不成熟,未在具体设备中使用 过。
4、介绍了系统初始化流程以及CU_UP的初始化流 程,首先介绍了GTPUPR模块的初始化处理, 15
DAY1
2、介绍了DU内DUMGR模块和DU_UP模块间的接 口,即composer和parser模块,这两个模块代码可 以自动生成,可提供专门的工具,后续会具体展示 使用方法。
3、多次询问了DPDK的具体使用情况,具体答复了 DPDK仅用于直接和网卡打交道的处理,设备内模 块间数据传递不使用DPDK机制;DPDK只在 simulator中运用过,不成熟,未在具体设备中使用 过。
21
通用FSM的设计
class Fsm { public:
Fsm(TransGraph* p_tg); virtual ~Fsm(); void Reset(); void Advance(char c); int EndState(); int DoomState(); private: State* p_current; State* p_state; }; 。
struct TransGraph // use triple to describe map
{
int current_state;
char input_char;
int next_state; };
如此,使用了转换表代替了ቤተ መጻሕፍቲ ባይዱ函数,简化了程序的设计。
17
通用FSM的设计
如果类Fsm可以表示任意类型的FSM,那么就更符合程序设计 的要求了。 在构造函数中执行的具体配置应该被泛化为一种机制,我们通过 这种机制来建立任意的FSM。 在Fsm的构造函数中,应该将转换表作为一个参数传入,而非 包含具体的转换表,如此,则不需要将转换表的大小硬编码到 Fsm中了。 因此,在构造函数中必须动态地创建这个存放转换表的内存空间, 在析构函数中记着销毁这块内存。
int pthread_key_create(pthread_key_t *key, void (*destructor)(void*));
线程私有数据采用了一键多值的技术,即一个键对应多 个值。访问数据时都是通过键值来访问,好像是对一个 变量进行访问,其实是在访问不同的数据。
第一个参数为指向一个键值的指针,第二个参数指明了 一个destructor函数,如果这个参数不为空,那么当每 个线程结束时,系统将调用这个函数来释放绑定在这个 键上的内存块。
4、介绍了系统初始化流程以及CU_UP的初始化流 程,首先介绍了GTPUPR模块的初始化处理, 14
DAY1
2、介绍了DU内DUMGR模块和DU_UP模块间的接 口,即composer和parser模块,这两个模块代码可 以自动生成,可提供专门的工具,后续会具体展示 使用方法。
3、多次询问了DPDK的具体使用情况,具体答复了 DPDK仅用于直接和网卡打交道的处理,设备内模 块间数据传递不使用DPDK机制;DPDK只在 simulator中运用过,不成熟,未在具体设备中使用 过。
4、介绍了系统初始化流程以及CU_UP的初始化流 程,首先介绍了GTPUPR模块的初始化处理, 6
DAY1
2、介绍了DU内DUMGR模块和DU_UP模块间的接 口,即composer和parser模块,这两个模块代码可 以自动生成,可提供专门的工具,后续会具体展示 使用方法。
3、多次询问了DPDK的具体使用情况,具体答复了 DPDK仅用于直接和网卡打交道的处理,设备内模 块间数据传递不使用DPDK机制;DPDK只在 simulator中运用过,不成熟,未在具体设备中使用 过。
出错信息,这个问题可以通过创建线程的私有数据(
TSD thread specific data)来解决。在线程内部,私
有数据可以被各个函数访问。但他对其他线程是屏蔽
的
19
nt pthread_key_create(pthread_key_t
*key, void (*destructor)(void*));
20
一键多值
key一旦被创建,所有线程都可以访问它,但各线程可 根据自己的需要往key中填入不同的值,这就相当于提 供了一个同名而不同值的全局变量,一键多值。
一键多值靠的是一个关键数据结构数组即TSD池,创建 一个TSD就相当于将结构数组中的某一项设置为 “in_use”,并将其索引返回给*key,然后设置清理函 数。
22
通用FSM的设计
Fsm::Fsm(TransGraph* p_tg)
{
int max_state = 0; // size for dynamically allocated graph
for (TransGraph* p_temp = p_tg;
p_temp->current_state != 0; ++p_temp)
4、介绍了系统初始化流程以及CU_UP的初始化流 程,首先介绍了GTPUPR模块的初始化处理, 16
通过Passive Data实现映射
类Fsm中的成员state包含6个状态,为了对应方便,我们 将结束状态放在state[0]中
每个状态都使用一个三元组
{ 当前状态,输入字符,下一个状态 } 来表示: 。
3
DAY1
2、介绍了DU内DUMGR模块和DU_UP模块间的接 口,即composer和parser模块,这两个模块代码可 以自动生成,可提供专门的工具,后续会具体展示 使用方法。
3、多次询问了DPDK的具体使用情况,具体答复了 DPDK仅用于直接和网卡打交道的处理,设备内模 块间数据传递不使用DPDK机制;DPDK只在 simulator中运用过,不成熟,未在具体设备中使用 过。
4、介绍了系统初始化流程以及CU_UP的初始化流 程,首先介绍了GTPUPR模块的初始化处理, 4
DAY1
2、介绍了DU内DUMGR模块和DU_UP模块间的接 口,即composer和parser模块,这两个模块代码可 以自动生成,可提供专门的工具,后续会具体展示 使用方法。
3、多次询问了DPDK的具体使用情况,具体答复了 DPDK仅用于直接和网卡打交道的处理,设备内模 块间数据传递不使用DPDK机制;DPDK只在 simulator中运用过,不成熟,未在具体设备中使用 过。
Aricent 培训
培训记录
1
目录
初始化 举例:从有限状态机、图灵机到现代计算机 概念举例: 地图和本地搜索的最基本技术——有限
状态机和动态规划
2
day1
1、介绍了特有的内存管理机制,即qv模块,初始化 时申请一大块内存,每包临接收时不需要申请内存, 进程内各模块处理数据过程中没有拷贝处理,没有系 统调用。qv头(节点管理信息)占用16字节。
4、介绍了系统初始化流程以及CU_UP的初始化流 程,首先介绍了GTPUPR模块的初始化处理, 9
DAY1
2、介绍了DU内DUMGR模块和DU_UP模块间的接 口,即composer和parser模块,这两个模块代码可 以自动生成,可提供专门的工具,后续会具体展示 使用方法。
3、多次询问了DPDK的具体使用情况,具体答复了 DPDK仅用于直接和网卡打交道的处理,设备内模 块间数据传递不使用DPDK机制;DPDK只在 simulator中运用过,不成熟,未在具体设备中使用 过。
4、介绍了系统初始化流程以及CU_UP的初始化流 程,首先介绍了GTPUPR模块的初始化处理, 13
DAY1
2、介绍了DU内DUMGR模块和DU_UP模块间的接 口,即composer和parser模块,这两个模块代码可 以自动生成,可提供专门的工具,后续会具体展示 使用方法。
3、多次询问了DPDK的具体使用情况,具体答复了 DPDK仅用于直接和网卡打交道的处理,设备内模 块间数据传递不使用DPDK机制;DPDK只在 simulator中运用过,不成熟,未在具体设备中使用 过。
4、介绍了系统初始化流程以及CU_UP的初始化流 程,首先介绍了GTPUPR模块的初始化处理, 10
DAY1
2、介绍了DU内DUMGR模块和DU_UP模块间的接 口,即composer和parser模块,这两个模块代码可 以自动生成,可提供专门的工具,后续会具体展示 使用方法。
3、多次询问了DPDK的具体使用情况,具体答复了 DPDK仅用于直接和网卡打交道的处理,设备内模 块间数据传递不使用DPDK机制;DPDK只在 simulator中运用过,不成熟,未在具体设备中使用 过。
18
多线程私有数据pthread_key_create
在多线程的环境下,进程内的所有线程共享进程的数 据空间。因此全局变量为所有线程共享。在程序设计 中有时需要保存线程自己的全局变量,这种特殊的变 量仅在线程内部有效。
如常见的errno,它返回标准的错误码。errno不应该是 一个局部变量。几乎每个函数都应该可以访问他,但 他又不能作为是一个全局变量。否则在一个线程里输 出的很可能是另一个线程的
4、介绍了系统初始化流程以及CU_UP的初始化流 程,首先介绍了GTPUPR模块的初始化处理, 5
DAY1
2、介绍了DU内DUMGR模块和DU_UP模块间的接 口,即composer和parser模块,这两个模块代码可 以自动生成,可提供专门的工具,后续会具体展示 使用方法。
3、多次询问了DPDK的具体使用情况,具体答复了 DPDK仅用于直接和网卡打交道的处理,设备内模 块间数据传递不使用DPDK机制;DPDK只在 simulator中运用过,不成熟,未在具体设备中使用 过。
4、介绍了系统初始化流程以及CU_UP的初始化流 程,首先介绍了GTPUPR模块的初始化处理, 8
DAY1
2、介绍了DU内DUMGR模块和DU_UP模块间的接 口,即composer和parser模块,这两个模块代码可 以自动生成,可提供专门的工具,后续会具体展示 使用方法。
3、多次询问了DPDK的具体使用情况,具体答复了 DPDK仅用于直接和网卡打交道的处理,设备内模 块间数据传递不使用DPDK机制;DPDK只在 simulator中运用过,不成熟,未在具体设备中使用 过。
4、介绍了系统初始化流程以及CU_UP的初始化流 程,首先介绍了GTPUPR模块的初始化处理, 12
DAY1
2、介绍了DU内DUMGR模块和DU_UP模块间的接 口,即composer和parser模块,这两个模块代码可 以自动生成,可提供专门的工具,后续会具体展示 使用方法。
3、多次询问了DPDK的具体使用情况,具体答复了 DPDK仅用于直接和网卡打交道的处理,设备内模 块间数据传递不使用DPDK机制;DPDK只在 simulator中运用过,不成熟,未在具体设备中使用 过。
4、介绍了系统初始化流程以及CU_UP的初始化流 程,首先介绍了GTPUPR模块的初始化处理, 7
DAY1
2、介绍了DU内DUMGR模块和DU_UP模块间的接 口,即composer和parser模块,这两个模块代码可 以自动生成,可提供专门的工具,后续会具体展示 使用方法。
3、多次询问了DPDK的具体使用情况,具体答复了 DPDK仅用于直接和网卡打交道的处理,设备内模 块间数据传递不使用DPDK机制;DPDK只在 simulator中运用过,不成熟,未在具体设备中使用 过。
{
if (p_temp->current_state > max_state)
max_state = p_temp->current_state;
if (p_temp->next_state > max_state)
max_state = p_temp->next_state;
DAY1
2、介绍了DU内DUMGR模块和DU_UP模块间的接 口,即composer和parser模块,这两个模块代码可 以自动生成,可提供专门的工具,后续会具体展示 使用方法。
3、多次询问了DPDK的具体使用情况,具体答复了 DPDK仅用于直接和网卡打交道的处理,设备内模 块间数据传递不使用DPDK机制;DPDK只在 simulator中运用过,不成熟,未在具体设备中使用 过。
4、介绍了系统初始化流程以及CU_UP的初始化流 程,首先介绍了GTPUPR模块的初始化处理, 15
DAY1
2、介绍了DU内DUMGR模块和DU_UP模块间的接 口,即composer和parser模块,这两个模块代码可 以自动生成,可提供专门的工具,后续会具体展示 使用方法。
3、多次询问了DPDK的具体使用情况,具体答复了 DPDK仅用于直接和网卡打交道的处理,设备内模 块间数据传递不使用DPDK机制;DPDK只在 simulator中运用过,不成熟,未在具体设备中使用 过。
21
通用FSM的设计
class Fsm { public:
Fsm(TransGraph* p_tg); virtual ~Fsm(); void Reset(); void Advance(char c); int EndState(); int DoomState(); private: State* p_current; State* p_state; }; 。
struct TransGraph // use triple to describe map
{
int current_state;
char input_char;
int next_state; };
如此,使用了转换表代替了ቤተ መጻሕፍቲ ባይዱ函数,简化了程序的设计。
17
通用FSM的设计
如果类Fsm可以表示任意类型的FSM,那么就更符合程序设计 的要求了。 在构造函数中执行的具体配置应该被泛化为一种机制,我们通过 这种机制来建立任意的FSM。 在Fsm的构造函数中,应该将转换表作为一个参数传入,而非 包含具体的转换表,如此,则不需要将转换表的大小硬编码到 Fsm中了。 因此,在构造函数中必须动态地创建这个存放转换表的内存空间, 在析构函数中记着销毁这块内存。
int pthread_key_create(pthread_key_t *key, void (*destructor)(void*));
线程私有数据采用了一键多值的技术,即一个键对应多 个值。访问数据时都是通过键值来访问,好像是对一个 变量进行访问,其实是在访问不同的数据。
第一个参数为指向一个键值的指针,第二个参数指明了 一个destructor函数,如果这个参数不为空,那么当每 个线程结束时,系统将调用这个函数来释放绑定在这个 键上的内存块。
4、介绍了系统初始化流程以及CU_UP的初始化流 程,首先介绍了GTPUPR模块的初始化处理, 14
DAY1
2、介绍了DU内DUMGR模块和DU_UP模块间的接 口,即composer和parser模块,这两个模块代码可 以自动生成,可提供专门的工具,后续会具体展示 使用方法。
3、多次询问了DPDK的具体使用情况,具体答复了 DPDK仅用于直接和网卡打交道的处理,设备内模 块间数据传递不使用DPDK机制;DPDK只在 simulator中运用过,不成熟,未在具体设备中使用 过。
4、介绍了系统初始化流程以及CU_UP的初始化流 程,首先介绍了GTPUPR模块的初始化处理, 6
DAY1
2、介绍了DU内DUMGR模块和DU_UP模块间的接 口,即composer和parser模块,这两个模块代码可 以自动生成,可提供专门的工具,后续会具体展示 使用方法。
3、多次询问了DPDK的具体使用情况,具体答复了 DPDK仅用于直接和网卡打交道的处理,设备内模 块间数据传递不使用DPDK机制;DPDK只在 simulator中运用过,不成熟,未在具体设备中使用 过。
出错信息,这个问题可以通过创建线程的私有数据(
TSD thread specific data)来解决。在线程内部,私
有数据可以被各个函数访问。但他对其他线程是屏蔽
的
19
nt pthread_key_create(pthread_key_t
*key, void (*destructor)(void*));
20
一键多值
key一旦被创建,所有线程都可以访问它,但各线程可 根据自己的需要往key中填入不同的值,这就相当于提 供了一个同名而不同值的全局变量,一键多值。
一键多值靠的是一个关键数据结构数组即TSD池,创建 一个TSD就相当于将结构数组中的某一项设置为 “in_use”,并将其索引返回给*key,然后设置清理函 数。
22
通用FSM的设计
Fsm::Fsm(TransGraph* p_tg)
{
int max_state = 0; // size for dynamically allocated graph
for (TransGraph* p_temp = p_tg;
p_temp->current_state != 0; ++p_temp)
4、介绍了系统初始化流程以及CU_UP的初始化流 程,首先介绍了GTPUPR模块的初始化处理, 16
通过Passive Data实现映射
类Fsm中的成员state包含6个状态,为了对应方便,我们 将结束状态放在state[0]中
每个状态都使用一个三元组
{ 当前状态,输入字符,下一个状态 } 来表示: 。
3
DAY1
2、介绍了DU内DUMGR模块和DU_UP模块间的接 口,即composer和parser模块,这两个模块代码可 以自动生成,可提供专门的工具,后续会具体展示 使用方法。
3、多次询问了DPDK的具体使用情况,具体答复了 DPDK仅用于直接和网卡打交道的处理,设备内模 块间数据传递不使用DPDK机制;DPDK只在 simulator中运用过,不成熟,未在具体设备中使用 过。
4、介绍了系统初始化流程以及CU_UP的初始化流 程,首先介绍了GTPUPR模块的初始化处理, 4
DAY1
2、介绍了DU内DUMGR模块和DU_UP模块间的接 口,即composer和parser模块,这两个模块代码可 以自动生成,可提供专门的工具,后续会具体展示 使用方法。
3、多次询问了DPDK的具体使用情况,具体答复了 DPDK仅用于直接和网卡打交道的处理,设备内模 块间数据传递不使用DPDK机制;DPDK只在 simulator中运用过,不成熟,未在具体设备中使用 过。
Aricent 培训
培训记录
1
目录
初始化 举例:从有限状态机、图灵机到现代计算机 概念举例: 地图和本地搜索的最基本技术——有限
状态机和动态规划
2
day1
1、介绍了特有的内存管理机制,即qv模块,初始化 时申请一大块内存,每包临接收时不需要申请内存, 进程内各模块处理数据过程中没有拷贝处理,没有系 统调用。qv头(节点管理信息)占用16字节。
4、介绍了系统初始化流程以及CU_UP的初始化流 程,首先介绍了GTPUPR模块的初始化处理, 9
DAY1
2、介绍了DU内DUMGR模块和DU_UP模块间的接 口,即composer和parser模块,这两个模块代码可 以自动生成,可提供专门的工具,后续会具体展示 使用方法。
3、多次询问了DPDK的具体使用情况,具体答复了 DPDK仅用于直接和网卡打交道的处理,设备内模 块间数据传递不使用DPDK机制;DPDK只在 simulator中运用过,不成熟,未在具体设备中使用 过。
4、介绍了系统初始化流程以及CU_UP的初始化流 程,首先介绍了GTPUPR模块的初始化处理, 13
DAY1
2、介绍了DU内DUMGR模块和DU_UP模块间的接 口,即composer和parser模块,这两个模块代码可 以自动生成,可提供专门的工具,后续会具体展示 使用方法。
3、多次询问了DPDK的具体使用情况,具体答复了 DPDK仅用于直接和网卡打交道的处理,设备内模 块间数据传递不使用DPDK机制;DPDK只在 simulator中运用过,不成熟,未在具体设备中使用 过。
4、介绍了系统初始化流程以及CU_UP的初始化流 程,首先介绍了GTPUPR模块的初始化处理, 10
DAY1
2、介绍了DU内DUMGR模块和DU_UP模块间的接 口,即composer和parser模块,这两个模块代码可 以自动生成,可提供专门的工具,后续会具体展示 使用方法。
3、多次询问了DPDK的具体使用情况,具体答复了 DPDK仅用于直接和网卡打交道的处理,设备内模 块间数据传递不使用DPDK机制;DPDK只在 simulator中运用过,不成熟,未在具体设备中使用 过。
18
多线程私有数据pthread_key_create
在多线程的环境下,进程内的所有线程共享进程的数 据空间。因此全局变量为所有线程共享。在程序设计 中有时需要保存线程自己的全局变量,这种特殊的变 量仅在线程内部有效。
如常见的errno,它返回标准的错误码。errno不应该是 一个局部变量。几乎每个函数都应该可以访问他,但 他又不能作为是一个全局变量。否则在一个线程里输 出的很可能是另一个线程的
4、介绍了系统初始化流程以及CU_UP的初始化流 程,首先介绍了GTPUPR模块的初始化处理, 5
DAY1
2、介绍了DU内DUMGR模块和DU_UP模块间的接 口,即composer和parser模块,这两个模块代码可 以自动生成,可提供专门的工具,后续会具体展示 使用方法。
3、多次询问了DPDK的具体使用情况,具体答复了 DPDK仅用于直接和网卡打交道的处理,设备内模 块间数据传递不使用DPDK机制;DPDK只在 simulator中运用过,不成熟,未在具体设备中使用 过。
4、介绍了系统初始化流程以及CU_UP的初始化流 程,首先介绍了GTPUPR模块的初始化处理, 8
DAY1
2、介绍了DU内DUMGR模块和DU_UP模块间的接 口,即composer和parser模块,这两个模块代码可 以自动生成,可提供专门的工具,后续会具体展示 使用方法。
3、多次询问了DPDK的具体使用情况,具体答复了 DPDK仅用于直接和网卡打交道的处理,设备内模 块间数据传递不使用DPDK机制;DPDK只在 simulator中运用过,不成熟,未在具体设备中使用 过。
4、介绍了系统初始化流程以及CU_UP的初始化流 程,首先介绍了GTPUPR模块的初始化处理, 12
DAY1
2、介绍了DU内DUMGR模块和DU_UP模块间的接 口,即composer和parser模块,这两个模块代码可 以自动生成,可提供专门的工具,后续会具体展示 使用方法。
3、多次询问了DPDK的具体使用情况,具体答复了 DPDK仅用于直接和网卡打交道的处理,设备内模 块间数据传递不使用DPDK机制;DPDK只在 simulator中运用过,不成熟,未在具体设备中使用 过。
4、介绍了系统初始化流程以及CU_UP的初始化流 程,首先介绍了GTPUPR模块的初始化处理, 7
DAY1
2、介绍了DU内DUMGR模块和DU_UP模块间的接 口,即composer和parser模块,这两个模块代码可 以自动生成,可提供专门的工具,后续会具体展示 使用方法。
3、多次询问了DPDK的具体使用情况,具体答复了 DPDK仅用于直接和网卡打交道的处理,设备内模 块间数据传递不使用DPDK机制;DPDK只在 simulator中运用过,不成熟,未在具体设备中使用 过。
{
if (p_temp->current_state > max_state)
max_state = p_temp->current_state;
if (p_temp->next_state > max_state)
max_state = p_temp->next_state;