What is Lag

[link]http://www.mindcontrol.org/~hplus/lag.html


What is Lag?
One thing I've learned in this business is that different people have different things they call "lag".

Some people call it "lag" when objects take a while to appear after you come near them. This is usually a bandwidth/throttling issue with sending new entities to the client. This kind of lag indirectly goes up when there's lots of people around, because the available bandwidth for your connection has to be metered between sending "people moved" updates and sending "there's more things here" updates.

Some people call it "lag" when other players will jump around or "warp" on the screen. This can be caused by lossy networks (perhaps on the other people's side), Internet weather, overloaded servers, or just plain too much data (again, bandwidth/throttling). This kind of lag usually doens't go up in crowded areas, except if it's crowded enough that there's not enough bandwidth on your allocated connection to send updates for everyone all the time, or if the servers reach 100% load and start falling behind.

Some people call it "lag" when the frame rate is low, so that movements of the mouse on the local machine is slow to affect the camera, and rendering/display has a "stuttering" quality. This is usually caused by the CPU and memory speed on the client machine; sometimes it's caused by the speed of the graphics card. This kind of lag greatly increases when there are more people around, because characters need to be animated, skinned and drawn, which usually takes a lot of CPU and often a lot of graphics power.

Most people can't tell one from the other, and just lump all three in the bin of "lag," which makes trying to diagnose actual problems quite a challenge. I guess the best thing you can do when reporting "lag" is to be very specific:

low frame rate?
people warping?
objects appearing slowly?
something else?
Combination of the above?


[Summary] 共有三种类型的lag:
 1. objects appearing slowly[周围的物体延迟显示]:  This is usually a bandwidth/throttling issue with sending new entities to the client.
 
 2. people jump around & warping[角色的位置跳跃性变化] caused by lossy networks, overloaded servers, or just send too much data。
 
 3. low frame rate[本地图形渲染的FPS低] This is usually caused by the CPU and memory speed on the client machine; sometimes it's caused by the speed of the graphics card.  

在车辆工程中,悬架系统的性能评估和优化一直是研究的热点。悬架不仅关乎车辆的乘坐舒适性,还直接影响到车辆的操控性和稳定性。为了深入理解悬架的动态行为,研究人员经常使用“二自由度悬架模型”来简化分析,并运用“传递函数”这一数学工具来描述悬架系统的动态特性。 二自由度悬架模型将复杂的车辆系统简化为两个独立的部分:车轮和车身。这种简化模型能够较准确地模拟出车辆在垂直方向上的运动行为,同时忽略了侧向和纵向的动态影响,这使得工程师能够更加专注于分析与优化与垂直动态相关的性能指标。 传递函数作为控制系统理论中的一种工具,能够描述系统输入和输出之间的关系。在悬架系统中,传递函数特别重要,因为它能够反映出路面不平度如何被悬架系统转化为车内乘员感受到的振动。通过传递函数,我们可以得到一个频率域上的表达式,从中分析出悬架系统的关键动态特性,如系统的振幅衰减特性和共振频率等。 在实际应用中,工程师通过使用MATLAB这类数学软件,建立双质量悬架的数学模型。模型中的参数包括车轮质量、车身质量、弹簧刚度以及阻尼系数等。通过编程求解,工程师可以得到悬架系统的传递函数,并据此绘制出传递函数曲线。这为评估悬架性能提供了一个直观的工具,使工程师能够了解悬架在不同频率激励下的响应情况。
以下两个函数完成什么功能,以及,若我仅需要修改端口状态为enable或disable,参照这两个函数,代码该怎么写(所调用的函数必须是这两个代码里包含的): STATUS pppoeCirEtherSet(char *portListStr, int state, int type, char *udfVal) { int ret = ERR_NO_ERROR; BOOL res = FALSE; int upIdx = 0; user_port up = {}; CP_PARSE_OPTION opt = {}; char keyStr[TPCONFIG_CLI_BUFFER_LEN] = {}; user_port_list uplist = {}; TPCONFIG_SET_INPUT stInput = {}; PPPOE_CIRCUIT_PORT_CFG_T portCfg = {}; char defaultUdfVal[MAX_PPPOE_ID_LENGTH + 1] = {}; char *processedUdfVal = ((udfVal != NULL) && (udfVal[0] != ‘\0’)) ? udfVal : defaultUdfVal; APPL_IF_ERR_RET(pppoeSysCheck(state, type, processedUdfVal)); PFM_IF_FAIL_DONE_RET(ret, tpConfig_setResourceInit(&stInput, TPCONFIG_INIT_SETORPUB), ERR_NO_MEMORY); PFM_IF_FAIL_DONE_RET(ret, uplist_init(&uplist), ERR_NO_MEMORY); usStr2UpList(UP_MODE_INTF_INVALID, (const char *)portListStr, &uplist, &opt); UP_ITER_LIST(&uplist, upIdx, up) { if (!UP_IS_AVAILABLE(up) || !UP_IS_SWP_PORT(up)) { ret = ERR_BAD_PARAM; goto done; } APPL_IF_ERR_RET(uilibPppoePortIsLagMember(up, &res)); if (!UP_IS_LAG(up) && TRUE == res) { ret = ERR_PPPOE_NOT_SUPPORT_LAG; goto done; } APPL_IF_ERR_DONE_RET(ret, pppoeGetEthernetConfig(upIdx, &portCfg), ERR_BAD_PARAM); if ((state == (portCfg.state & 0x1)) && (type == portCfg.type) && (0 == strcmp(processedUdfVal, portCfg.udfValue))) { continue; } snprintf(keyStr, sizeof(keyStr), CFG_PPPOE_ETH_CIR_IDX, upIdx); PFM_IF_FAIL_DONE_RET(ret, tpConfig_objAddKeyForSet(&stInput, TPCONFIG_INIT_SETORPUB, keyStr), ERR_BAD_PARAM); PFM_IF_FAIL_DONE_RET(ret, tpConfig_objAddFieldNumI32ForSet(&stInput, TPCONFIG_INIT_SETORPUB, CFG_PPPOE_F_EN, state), ERR_BAD_PARAM); PFM_IF_FAIL_DONE_RET(ret, tpConfig_objAddFieldNumI32ForSet(&stInput, TPCONFIG_INIT_SETORPUB, CFG_PPPOE_TYPE, type), ERR_BAD_PARAM); PFM_IF_FAIL_DONE_RET(ret, tpConfig_objAddFieldStrForSet(&stInput, TPCONFIG_INIT_SETORPUB, CFG_PPPOE_VALUE, processedUdfVal), ERR_BAD_PARAM); } tpConfig_addOperAndSubForSet(&stInput, TPCONFIG_OPER_ADD | TPCONFIG_OPER_PUB, CFG_PPPOE_M_NAME); tpConfig_set(&stInput); done: tpConfig_setResourceFree(&stInput); if (!uplist_is_null(&uplist)) { uplist_free(&uplist); } return ret; } STATUS pppoeRemEtherSet(char *portListStr, int state, char *udfVal) { int ret = ERR_NO_ERROR; BOOL res = FALSE; int upIdx = 0; user_port up = {}; CP_PARSE_OPTION opt = {}; char keyStr[TPCONFIG_CLI_BUFFER_LEN] = {}; user_port_list uplist = {}; TPCONFIG_SET_INPUT stInput = {}; PPPOE_CIRCUIT_PORT_CFG_T portCfg = {}; char defaultUdfVal[MAX_PPPOE_ID_LENGTH + 1] = {}; char *processedUdfVal = ((udfVal != NULL) && (udfVal[0] != ‘\0’)) ? udfVal : defaultUdfVal; APPL_IF_ERR_RET(pppoeSysCheck(state, PPPOE_CIRCUIT_UDF_E, processedUdfVal)); PFM_IF_FAIL_DONE_RET(ret, tpConfig_setResourceInit(&stInput, TPCONFIG_INIT_SETORPUB), ERR_NO_MEMORY); PFM_IF_FAIL_DONE_RET(ret, uplist_init(&uplist), ERR_NO_MEMORY); usStr2UpList(UP_MODE_INTF_INVALID, (const char *)portListStr, &uplist, &opt); UP_ITER_LIST(&uplist, upIdx, up) { if (!UP_IS_AVAILABLE(up) || !UP_IS_SWP_PORT(up)) { ret = ERR_BAD_PARAM; goto done; } APPL_IF_ERR_RET(uilibPppoePortIsLagMember(up, &res)); if (!UP_IS_LAG(up) && TRUE == res) { ret = ERR_PPPOE_NOT_SUPPORT_LAG; goto done; } APPL_IF_ERR_DONE_RET(ret, pppoeGetEthernetConfig(upIdx, &portCfg), ERR_BAD_PARAM); // 与原来相等 if ((state == (portCfg.state >> 1)) && (0 == strcmp(processedUdfVal, portCfg.remoteId))) { continue; } snprintf(keyStr, sizeof(keyStr), CFG_PPPOE_ETH_REM_IDX, upIdx); PFM_IF_FAIL_DONE_RET(ret, tpConfig_objAddKeyForSet(&stInput, TPCONFIG_INIT_SETORPUB, keyStr), ERR_BAD_PARAM); PFM_IF_FAIL_DONE_RET(ret, tpConfig_objAddFieldNumI32ForSet(&stInput, TPCONFIG_INIT_SETORPUB, CFG_PPPOE_F_EN, state), ERR_BAD_PARAM); PFM_IF_FAIL_DONE_RET(ret, tpConfig_objAddFieldStrForSet(&stInput, TPCONFIG_INIT_SETORPUB, CFG_PPPOE_VALUE, processedUdfVal), ERR_BAD_PARAM); } tpConfig_addOperAndSubForSet(&stInput, TPCONFIG_OPER_ADD | TPCONFIG_OPER_PUB, CFG_PPPOE_M_NAME); tpConfig_set(&stInput); done: tpConfig_setResourceFree(&stInput); if (!uplist_is_null(&uplist)) { uplist_free(&uplist); } return ret; }
09-06
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值