测试mpc4j--pir(三)

记录踩坑的一期

(最近陪家猫看猫和老鼠有点上瘾)
经过上轮的改造,查询数据可以一个rpc过去,然后就进行大数据实验。

实验瓶颈


服务端数据可以推进到2^25

客户端还是1000查

服务端数据2^26的时候就会在布谷hash的插入这里报Java堆溢出。
edu.alibaba.mpc4j.common.tool.hashbin.object.RandomPadHashBin.insertItems(RandomPadHashBin.java:156)


根据提示就优化一下呗
之前还改了两个地方
老铁们还记得上文说init初始化分几步嘛,三步,1 oprf 2 布谷Hash 3 多项式大循环
然后多项式大循环中有多层for嵌套,异常复杂,涉及逻辑没敢动,就把几个循环parallel了一下,速度蹭就上来了,然后布谷hash中的insertItems进行了一个分块尝试

这里踩坑了
修改完就package,扔服务器一顿测试,然后啥也没变,注意这个方法在

mpc4j-common-tool包里,跨模块了,所有要先到mpc4j-common-tool模块mvn clean package,mvn clean install,然后再到mpc4j-s2pc-pir中mvn clean package

这里提示每次报错如果一样的话,注意看下是不是同一行,如果是同一行很可能是修改没生效

mpc4j匹配的实验参数

 实际上这样改不是最优解,因为服务端的传输数据会突然变的小很多,实际上应该对不同数据量匹配不同的参数,mpc4j中只举例了三组数据,在APSI的Parameters文件中有大数据量更为精准的匹配,比如16M/256M的,
 

对于2^25(3KW)的server端数据,用16M-4096做实验查询,堆溢出
Heap
 PSYoungGen      total 9219584K, used 3905855K [0x0000000580100000, 0x0000000800000000, 0x0000000800000000)
  eden space 7988224K, 48% used [0x0000000580100000,0x000000066eaa76f0,0x0000000767a00000)
  from space 1231360K, 0% used [0x00000007b4d80000,0x00000007b4d80000,0x0000000800000000)
  to   space 1248256K, 0% used [0x0000000767a00000,0x0000000767a00000,0x00000007b3d00000)
 ParOldGen       total 20970496K, used 20970411K [0x0000000080200000, 0x0000000580100000, 0x0000000580100000)
  object space 20970496K, 99% used [0x0000000080200000,0x00000005800eac78,0x0000000580100000)
 Metaspace       used 16157K, capacity 16718K, committed 17152K, reserved 1064960K
  class space    used 1832K, capacity 1977K, committed 2048K, reserved 1048576K
可能原因
JNI global references: 456
JNI全局引用过多:另一个问题可能是JNI全局引用过多,这可能会导致内存泄漏。确保JNI全局引用在不再需要时被适当地释放。
 

把初始堆和最大堆的数据由150G调整到200G就得到了查询结果
 

查2^26的数据量

256M-4096
94.08467 分钟预处理 85.95726667 分钟
Party ID    Server Set Size    Query Number    Is Parallel    Thread Num    Init Time(ms)    Init DataPacket Num    Init Payload Bytes(B)    Init Send Bytes(B)    Pto  Time(ms)    Pto  DataPacket Num    Pto  Payload Bytes(B)    Pto  Send Bytes(B)
0    67108864    1000    true    47    4597997    1    48    68    35711    3    8099708    8102010


Party ID    Server Set Size    Query Number    Is Parallel    Thread Num    Init Time(ms)    Init DataPacket Num    Init Payload Bytes(B)    Init Send Bytes(B)    Pto  Time(ms)    Pto  DataPacket Num    Pto  Payload Bytes(B)    Pto  Send Bytes(B)    Memory
1    67108864    1000    true    47    560439    1    1639434    1639460    35933    2    8689154    8691327    8726352


256M-1024

80.72723 分钟 初始化79.85176667 分钟
Party ID    Server Set Size    Query Number    Is Parallel    Thread Num    Init Time(ms)    Init DataPacket Num    Init Payload Bytes(B)    Init Send Bytes(B)    Pto  Time(ms)    Pto  DataPacket Num    Pto  Payload Bytes(B)    Pto  Send Bytes(B)
0    67108864    1000    true    47    4227098    1    48    68    25727    3    6919156    6921426

Party ID    Server Set Size    Query Number    Is Parallel    Thread Num    Init Time(ms)    Init DataPacket Num    Init Payload Bytes(B)    Init Send Bytes(B)    Pto  Time(ms)    Pto  DataPacket Num    Pto  Payload Bytes(B)    Pto  Send Bytes(B)    Memory
1    67108864    1000    true    47    563908    1    1639434    1639460    25901    2    2917718    2919803    8726352
对比看到明显计算量变小时间也缩短

交互过程

server

初始化

  1. 获取client端公钥,计算server端数据PRFs
  2. 计算server端数据布谷hash bin,发送布谷hash key
  3. 计算server端数据多项式

pir交互

  1. 接收查询盲化数据,计算OPRF--这个是计算client端查询数据的,发送
  2. 接收查询数据,计算求交,产生查询返回

client

初始化

  1. 产生公私密钥对,发送公钥对
  2. 接收布谷hash key

pir交互

  1. 产生查询盲化数据,发送盲化数据
  2. 接收盲化prf数据
  3. 产生查询数据的布谷Hash bin,发送
  4. 接收查询结果 key和value 应该就是查询数据和labeled
  • 13
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值