第(2/3)页 他已经写了四天了,框架搭好了,核心逻辑跑通了,但有一个问题,轮密钥的生成速度,SM4用的是32轮非线性迭代,每轮都要查S盒,查S盒的开销在单条数据上可以忽略不计,但放到实时推送的场景里,每秒上千条数据包同时解密,延迟就堆起来了。 他试了三种优化方案,第一种是预计算S盒展开表,把查表操作变成直接索引,快了,但内存占用翻了一倍,第二种是把轮密钥生成提前到数据包到达之前,做预热,延迟降了,但遇到密钥轮换的时候会有一个200毫秒的断档。 第三种他还没试完。 老周进来了,搪瓷缸,铁观音换成了新的一泡,颜色比昨天深。 他在方远旁边坐下,没看屏幕,看方远。 "延迟多少?" "单条0.8毫秒,并发一千条的时候峰值到47毫秒。" "要求呢?" "实时推送延迟不超过20毫秒。" 老周喝了一口茶。 "差一倍多。" "嗯。" "第三种方案是什么?" 方远把屏幕切到另一个窗口,一个架构草图,他自己画的,线条很乱,但逻辑清楚。 "异步流水线,把解密和上报拆成两级,解密在前端做,上报在后端排队,两级之间用环形缓冲区,这样解密不需要等上报完成,上报也不需要等解密。" 老周看了那个草图。 "环形缓冲区溢出呢?" "设了阈值,到80%触发降速。" 老周没说好也没说不好,他端起搪瓷缸,又喝了一口,铁观音的味道在调试间里飘着,比昨天的浓。 第(2/3)页