Cache-concious设计的Master-Worker流程

时间:2012-10-01 15:24:00

标签: linux performance cpu-cache worker-process

我最近开始研究使用熟悉的 Master-Worker 模式设计的服务器应用程序,其中一个特权线程管理多个工作线程。我现在已经意识到线程是多么麻烦。

我现在正在考虑转移到流程而不是线程的可能性,因为它们解决了很多我正在经历的问题。

然而,性能是一个主要问题,我担心随着内存使用量的增加,由于重复数据(查找表,上下文数据等)争夺L2 / L3缓存中的空间,性能会下降。这些数据需要偶尔修改,并且可能会变得非常大。

hash_table files; 

function serve_file(connection, path)
    file = hash_table[path]
    sendfile(connection.fd, file.fd, 0, file.size);

function on_file_added_to_server_root(which)
    files.add(which, ...)

鉴于N工作进程,如果此表有N个副本,那将是一种耻辱。但是,有些表格可以完美地复制到任何地方。但是,还有许多malloc(3) - 分配的内存可能会被共享,但可能会分散,导致随机页面由于写时复制而被复制。

在多进程设计中是否存在任何阻止内存使用的技巧或一般策略?

谢谢!

0 个答案:

没有答案