如何在服务器中支持1TB的内存?

时间:2016-02-13 03:17:42

标签: c memory server

My C语言(linux)应用程序最少需要1 TB的内存。 8太字节是最好的。 如何在服务器中支持此类内存容量? 一种方法是建立我自己的PCI卡并放置128 GB DDR4模块,这是目前市场上最大的可用模块。但我将不得不重写所有malloc()调用和数组变量的所有寻址。这是否可以透明地在C中完成?我能想到的唯一方法是仅为数组使用PCI-express分配的内存并访问它们,我将不得不以这种方式重写所有函数:

put(huge_array,index,&data); 
get(huge_array,index,&data);

就像在C ++中使用get()和put()方法一样。但我的应用程序不是C ++,而是C。

我还有什么其他选择,这不会花费我很多钱+我的衬衫?

2 个答案:

答案 0 :(得分:1)

  

这是否可以透明地在C中进行?

是的,确实如此。 Linux中有一个很好的技巧,从Solaris继承,我相信,你可以编写自己的分配器,把它放到单独的共享库中去做

> LD_PRELOAD=mylib.so ./myapp

另一个可能的解决方案是使用malloc hooks,[check here](http://www.gnu.org/savannah-checkouts/gnu/libc/manual/html_node/Hooks-for-Malloc.html),但此解决方案特定于Linux / GLIBC

更新

查看Overriding 'malloc' using the LD_PRELOAD mechanism

答案 1 :(得分:1)

如果您可以并行化您的工作,AWS的r3.8xlarge实例每个244 GiB,每小时2.66美元(在美国东部地区,其他地区的价格可能会有所不同)*。

相反,如果您不赶时间,可以使用内存较少但交换时间为1 + TiB的服务器,而无需更改malloc。