小编Ale*_*oba的帖子

Netfilter挂钩多核系统

我们编写了LKM,它使用netfilter挂钩来拦截IP数据包.问题是,在1Gb/s有效载荷上,我们看到钩子只通过软irq加载一个CPU核心.其他15个核心闲置.所以我得出的结论是钩子不是多线程的.

所以我的问题是:有什么方法可以解决多核上的钩子处理问题?

linux hook multicore netfilter

7
推荐指数
2
解决办法
4843
查看次数

GCC访问堆栈顶部的内存

我有C函数做一些SSE计算.当我用GCC编译它时,我得到下一个代码

/* Start of function */
mov    (%rdi),%rax
movslq %ecx,%rcx
...
mov    0x8(%rdi),%rax
pxor   %xmm12,%xmm3
movaps %xmm0,-0x28(%rsp)
movaps %xmm6,%xmm1
...
movaps 0x50(%rax,%rcx,1),%xmm2
movaps 0x60(%rax,%rcx,1),%xmm15
pxor   %xmm2,%xmm0
pxor   %xmm2,%xmm6
movaps -0x28(%rsp),%xmm2
pxor   %xmm15,%xmm5
pxor   %xmm15,%xmm2
movaps 0x70(%rax,%rcx,1),%xmm15
movaps (%rax,%rcx,1),%xmm11
mov    0x10(%rdi),%rax
movaps %xmm15,-0x18(%rsp)
pxor   %xmm11,%xmm4
pxor   %xmm12,%xmm11
pxor   %xmm15,%xmm12
Run Code Online (Sandbox Code Playgroud)

查看movaps说明 - 它是堆栈顶部的访问内存:

movaps %xmm15,-0x18(%rsp)
Run Code Online (Sandbox Code Playgroud)

它不是访问未定义的内存吗?为什么GCC生成了这样不正确的代码?

assembly gcc sse x86-64 sse2

4
推荐指数
1
解决办法
436
查看次数

标签 统计

assembly ×1

gcc ×1

hook ×1

linux ×1

multicore ×1

netfilter ×1

sse ×1

sse2 ×1

x86-64 ×1