b r u h s e t t e.20.04.16

我今天下午傻逼了,改频道备份脚本的时候把调试用的message id硬编码到了脚本里面而忘了打注释,导致后面拖的ucc绝大多数频道都没有拖完,更™哭笑不得的是我到拖那个没多少消息的science频道发现第一次返回的就是个空数组才发现这个问题,然后我发现我™把那串玩意还写到github里去了,吓得我赶紧先改了git,然后再接着搞

所谓改git就是先git clone到本地,然后git reset --hard [确认没有出错的commit],然后git push -f,输入github账号和密码,搞定,github那边再也看不到出错的代码了

本来今天晚上我就可以列举出实验数据的,但目前这样我只能先列举出(但愿)没出错部分的数据了

I what data

当然是ucc的数据了(手动滑稽

我用一台vultr最烂的机子(512MB内存,10GB固态,NY/NJ)搞这次实验,而且我利用起来了上次创建到一半就被橄榄的账号,所以只有⑨个webhook线程+1个nitro线程

下面是实验结果:

我们先写一个循环:

for bruh in `ls -tr | grep -Eo "ucc.[a-z\-]*" | uniq`
do
N=(cat "bruh.20.04.16.json" | wc -l)
[ (wc -c < "bruh.20.04.16.sedresults") -eq 0 ] && M=0 || M=(((cat "bruh.20.04.16.sedresults" | wc -l )/2))
echo "bruh(N=N,M=M)"
echo "\`\`\`"
cat "$bruh.20.04.16.timestat"
echo "\`\`\`"
echo
done

然后我们就可以列举结果了(其中N为消息条数,M为附件的数量):

ucc.rules(N=3,M=0)

>>>> time for stage 1:
real    0m0.598s
user    0m0.212s
sys 0m0.163s
>>>> time for stage 2 reupload phase:
real    0m0.069s
user    0m0.030s
sys 0m0.038s
>>>> time for stage 2 sedreplace phase:
real    0m0.008s
user    0m0.001s
sys 0m0.007s
>>>> time for stage 2:
real    0m0.259s
user    0m0.126s
sys 0m0.132s

ucc.general(N=178154,M=8917)

>>>> time for stage 1:
real    40m0.036s
user    15m3.618s
sys 15m59.694s
>>>> time for stage 2 analysis phase:
real    54m40.750s
user    15m8.014s
sys 38m53.228s
>>>> time for stage 2 reupload phase:
real    78m32.942s
user    35m29.197s
sys 24m38.265s
>>>> time for stage 2 sedreplace phase:
real    34m10.949s
user    16m32.306s
sys 16m57.830s
>>>> time for stage 2:
real    167m26.441s
user    67m10.152s
sys 80m30.151s

ucc.parodies(N=3836,M=83)

>>>> time for stage 1:
real    0m58.126s
user    0m24.488s
sys 0m20.151s
>>>> time for stage 2 analysis phase:
real    0m47.037s
user    0m17.923s
sys 0m28.172s
>>>> time for stage 2 reupload phase:
real    0m47.024s
user    0m20.175s
sys 0m11.811s
>>>> time for stage 2 sedreplace phase:
real    0m2.095s
user    0m0.862s
sys 0m1.194s
>>>> time for stage 2:
real    1m36.432s
user    0m39.057s
sys 0m41.348s

ucc.pictures(N=21194,M=3570)

>>>> time for stage 1:
real    4m53.799s
user    1m52.285s
sys 1m55.062s
>>>> time for stage 2 analysis phase:
real    6m52.144s
user    2m17.382s
sys 4m27.690s
>>>> time for stage 2 reupload phase:
real    34m38.977s
user    15m16.545s
sys 10m23.845s
>>>> time for stage 2 sedreplace phase:
real    2m44.607s
user    1m14.663s
sys 1m27.114s
>>>> time for stage 2:
real    44m16.138s
user    18m48.753s
sys 16m18.879s

ucc.games(N=4168,M=474)

>>>> time for stage 1:
real    1m3.273s
user    0m25.020s
sys 0m26.014s
>>>> time for stage 2 analysis phase:
real    1m3.392s
user    0m23.598s
sys 0m38.562s
>>>> time for stage 2 reupload phase:
real    5m11.379s
user    2m7.728s
sys 1m25.108s
>>>> time for stage 2 sedreplace phase:
real    0m11.912s
user    0m4.785s
sys 0m6.849s
>>>> time for stage 2:
real    6m26.957s
user    2m36.216s
sys 2m10.685s

ucc.music(N=3296,M=168)

>>>> time for stage 1:
real    0m57.296s
user    0m25.796s
sys 0m21.075s
>>>> time for stage 2 analysis phase:
real    0m43.922s
user    0m16.960s
sys 0m26.012s
>>>> time for stage 2 reupload phase:
real    10m18.591s
user    1m28.233s
sys 0m59.993s
>>>> time for stage 2 sedreplace phase:
real    0m8.526s
user    0m3.965s
sys 0m4.357s
>>>> time for stage 2:
real    11m11.394s
user    1m49.281s
sys 1m30.579s

ucc.youtube(N=3269,M=63)

>>>> time for stage 1:
real    0m54.414s
user    0m23.364s
sys 0m20.059s
>>>> time for stage 2 analysis phase:
real    0m40.292s
user    0m15.551s
sys 0m23.910s
>>>> time for stage 2 reupload phase:
real    0m46.225s
user    0m15.342s
sys 0m10.395s
>>>> time for stage 2 sedreplace phase:
real    0m1.605s
user    0m0.648s
sys 0m0.894s
>>>> time for stage 2:
real    1m28.441s
user    0m31.681s
sys 0m35.376s

ucc.bots(N=178784,M=15950)

>>>> time for stage 1:
real    43m44.499s
user    18m2.452s
sys 17m22.506s
>>>> time for stage 2 analysis phase:
real    73m5.382s
user    19m30.763s
sys 52m51.512s
>>>> time for stage 2 reupload phase:
real    155m11.269s
user    67m43.191s
sys 46m36.591s
>>>> time for stage 2 sedreplace phase:
real    65m31.364s
user    32m56.373s
sys 31m18.920s
>>>> time for stage 2:
real    293m50.687s
user    120m11.196s
sys 130m48.238s

ucc.spam(N=22191,M=1554)

>>>> time for stage 1:
real    5m8.796s
user    2m9.658s
sys 1m55.477s
>>>> time for stage 2 analysis phase:
real    4m42.811s
user    1m50.327s
sys 2m49.128s
>>>> time for stage 2 reupload phase:
real    35m51.530s
user    9m23.487s
sys 5m36.858s
>>>> time for stage 2 sedreplace phase:
real    2m54.117s
user    1m27.707s
sys 1m23.897s
>>>> time for stage 2:
real    43m29.036s
user    12m41.749s
sys 9m50.207s

ucc.announcements(N=1128,M=56)

>>>> time for stage 1:
real    0m21.185s
user    0m6.881s
sys 0m6.430s
>>>> time for stage 2 analysis phase:
real    0m11.996s
user    0m5.183s
sys 0m6.553s
>>>> time for stage 2 reupload phase:
real    0m46.831s
user    0m14.504s
sys 0m7.984s
>>>> time for stage 2 sedreplace phase:
real    0m1.020s
user    0m0.407s
sys 0m0.594s
>>>> time for stage 2:
real    1m0.074s
user    0m20.181s
sys 0m15.265s

ucc.roleplaying(N=13394,M=202)

>>>> time for stage 1:
real    3m8.108s
user    1m15.497s
sys 1m9.103s
>>>> time for stage 2 analysis phase:
real    2m30.225s
user    0m57.706s
sys 1m29.795s
>>>> time for stage 2 reupload phase:
real    2m19.907s
user    0m54.710s
sys 0m29.106s
>>>> time for stage 2 sedreplace phase:
real    0m6.245s
user    0m2.795s
sys 0m3.315s
>>>> time for stage 2:
real    4m56.968s
user    1m55.423s
sys 2m2.564s

ucc.nsfw(N=67477,M=6063)

>>>> time for stage 1:
real    15m55.261s
user    6m25.597s
sys 6m19.178s
>>>> time for stage 2 analysis phase:
real    17m38.283s
user    5m46.530s
sys 11m41.315s
>>>> time for stage 2 reupload phase:
real    53m7.474s
user    25m51.804s
sys 15m48.258s
>>>> time for stage 2 sedreplace phase:
real    11m18.488s
user    5m36.071s
sys 5m32.812s
>>>> time for stage 2:
real    82m5.272s
user    37m14.776s
sys 33m2.907s

ucc.parody-of-the-month(N=230,M=1)

>>>> time for stage 1:
real    0m4.866s
user    0m1.773s
sys 0m1.734s
>>>> time for stage 2 analysis phase:
real    0m2.490s
user    0m1.095s
sys 0m1.379s
>>>> time for stage 2 reupload phase:
real    0m2.902s
user    0m0.272s
sys 0m0.212s
>>>> time for stage 2 sedreplace phase:
real    0m0.113s
user    0m0.032s
sys 0m0.080s
>>>> time for stage 2:
real    0m5.878s
user    0m1.532s
sys 0m1.907s

ucc.unterganger-of-the-month(N=356,M=4)

>>>> time for stage 1:
real    0m5.512s
user    0m2.075s
sys 0m1.818s
>>>> time for stage 2 analysis phase:
real    0m3.346s
user    0m1.517s
sys 0m1.805s
>>>> time for stage 2 reupload phase:
real    0m3.691s
user    0m0.976s
sys 0m0.576s
>>>> time for stage 2 sedreplace phase:
real    0m0.263s
user    0m0.081s
sys 0m0.180s
>>>> time for stage 2:
real    0m7.569s
user    0m2.674s
sys 0m2.730s

ucc.politics-issues-news(N=39138,M=902)

>>>> time for stage 1:
real    9m52.465s
user    4m1.586s
sys 3m49.775s
>>>> time for stage 2 analysis phase:
real    11m59.082s
user    2m56.054s
sys 5m24.818s
>>>> time for stage 2 reupload phase:
real    7m53.525s
user    3m55.623s
sys 2m11.564s
>>>> time for stage 2 sedreplace phase:
real    1m11.090s
user    0m32.826s
sys 0m37.067s
>>>> time for stage 2:
real    21m4.250s
user    7m24.727s
sys 8m13.773s

ucc.personal-venting(N=63703,M=1814)

>>>> time for stage 1:
real    15m24.444s
user    5m45.986s
sys 6m9.725s
>>>> time for stage 2 analysis phase:
real    17m28.200s
user    5m28.831s
sys 11m35.278s
>>>> time for stage 2 reupload phase:
real    19m5.728s
user    7m44.789s
sys 4m42.570s
>>>> time for stage 2 sedreplace phase:
real    2m53.872s
user    1m22.623s
sys 1m28.695s
>>>> time for stage 2:
real    39m28.740s
user    14m36.596s
sys 17m47.007s

ucc.welcome-goodbye(N=12510,M=154)

>>>> time for stage 1:
real    2m57.746s
user    1m8.830s
sys 1m7.993s
>>>> time for stage 2 analysis phase:
real    2m48.142s
user    1m1.245s
sys 1m42.571s
>>>> time for stage 2 reupload phase:
real    1m30.062s
user    0m38.672s
sys 0m22.933s
>>>> time for stage 2 sedreplace phase:
real    0m5.497s
user    0m2.299s
sys 0m3.066s
>>>> time for stage 2:
real    4m24.047s
user    1m42.358s
sys 2m8.766s

ucc.feedback-support(N=4354,M=74)

>>>> time for stage 1:
real    1m3.929s
user    0m24.427s
sys 0m24.672s
>>>> time for stage 2 analysis phase:
real    0m54.821s
user    0m21.481s
sys 0m31.699s
>>>> time for stage 2 reupload phase:
real    1m0.924s
user    0m19.385s
sys 0m12.476s
>>>> time for stage 2 sedreplace phase:
real    0m1.948s
user    0m0.762s
sys 0m1.088s
>>>> time for stage 2:
real    1m57.993s
user    0m41.722s
sys 0m45.465s

ucc.pokemon-bots(N=69043,M=83)

>>>> time for stage 1:
real    17m31.568s
user    6m41.507s
sys 6m54.745s
>>>> time for stage 2 analysis phase:
real    18m10.107s
user    5m35.012s
sys 12m10.210s
>>>> time for stage 2 reupload phase:
real    1m28.991s
user    0m22.092s
sys 0m13.200s
>>>> time for stage 2 sedreplace phase:
real    0m10.733s
user    0m5.372s
sys 0m5.145s
>>>> time for stage 2:
real    19m50.917s
user    6m2.850s
sys 12m29.112s

ucc.rules-dca(N=1,M=0)

>>>> time for stage 1:
real    0m0.557s
user    0m0.190s
sys 0m0.133s
>>>> time for stage 2 reupload phase:
real    0m0.084s
user    0m0.026s
sys 0m0.058s
>>>> time for stage 2 sedreplace phase:
real    0m0.011s
user    0m0.002s
sys 0m0.006s
>>>> time for stage 2:
real    0m0.337s
user    0m0.123s
sys 0m0.208s

ucc.best-audio-based(N=163,M=1)

>>>> time for stage 1:
real    0m3.159s
user    0m1.041s
sys 0m1.114s
>>>> time for stage 2 analysis phase:
real    0m1.884s
user    0m0.770s
sys 0m1.057s
>>>> time for stage 2 reupload phase:
real    0m2.829s
user    0m0.264s
sys 0m0.222s
>>>> time for stage 2 sedreplace phase:
real    0m0.103s
user    0m0.040s
sys 0m0.061s
>>>> time for stage 2:
real    0m5.074s
user    0m1.158s
sys 0m1.512s

ucc.best-current-events(N=363,M=3)

>>>> time for stage 1:
real    0m6.164s
user    0m2.346s
sys 0m2.096s
>>>> time for stage 2 analysis phase:
real    0m4.232s
user    0m1.737s
sys 0m2.326s
>>>> time for stage 2 reupload phase:
real    0m6.055s
user    0m0.773s
sys 0m0.582s
>>>> time for stage 2 sedreplace phase:
real    0m0.261s
user    0m0.083s
sys 0m0.174s
>>>> time for stage 2:
real    0m10.846s
user    0m2.692s
sys 0m3.281s

ucc.best-dpmv(N=309,M=4)

>>>> time for stage 1:
real    0m5.095s
user    0m1.803s
sys 0m1.815s
>>>> time for stage 2 analysis phase:
real    0m3.480s
user    0m1.484s
sys 0m1.923s
>>>> time for stage 2 reupload phase:
real    0m3.917s
user    0m1.032s
sys 0m0.654s
>>>> time for stage 2 sedreplace phase:
real    0m0.155s
user    0m0.070s
sys 0m0.083s
>>>> time for stage 2:
real    0m7.845s
user    0m2.697s
sys 0m2.840s

ucc.best-fx(N=188,M=1)

>>>> time for stage 1:
real    0m3.332s
user    0m1.147s
sys 0m1.165s
>>>> time for stage 2 analysis phase:
real    0m2.353s
user    0m0.907s
sys 0m1.393s
>>>> time for stage 2 reupload phase:
real    0m2.776s
user    0m0.270s
sys 0m0.224s
>>>> time for stage 2 sedreplace phase:
real    0m0.122s
user    0m0.047s
sys 0m0.064s
>>>> time for stage 2:
real    0m5.521s
user    0m1.310s
sys 0m1.864s

ucc.best-parody-by-a-newcomer(N=216,M=3)

>>>> time for stage 1:
real    0m3.999s
user    0m1.389s
sys 0m1.331s
>>>> time for stage 2 analysis phase:
real    0m2.521s
user    0m1.012s
sys 0m1.441s
>>>> time for stage 2 reupload phase:
real    0m3.483s
user    0m0.758s
sys 0m0.503s
>>>> time for stage 2 sedreplace phase:
real    0m0.140s
user    0m0.057s
sys 0m0.081s
>>>> time for stage 2:
real    0m6.394s
user    0m1.929s
sys 0m2.172s

ucc.best-series(N=128,M=2)

>>>> time for stage 1:
real    0m2.613s
user    0m0.861s
sys 0m0.850s
>>>> time for stage 2 analysis phase:
real    0m1.715s
user    0m0.664s
sys 0m0.970s
>>>> time for stage 2 reupload phase:
real    0m3.172s
user    0m0.541s
sys 0m0.386s
>>>> time for stage 2 sedreplace phase:
real    0m0.134s
user    0m0.052s
sys 0m0.076s
>>>> time for stage 2:
real    0m5.286s
user    0m1.355s
sys 0m1.598s

ucc.best-story-based(N=172,M=1)

>>>> time for stage 1:
real    0m3.167s
user    0m1.073s
sys 0m1.060s
>>>> time for stage 2 analysis phase:
real    0m2.035s
user    0m0.823s
sys 0m1.147s
>>>> time for stage 2 reupload phase:
real    0m2.768s
user    0m0.270s
sys 0m0.222s
>>>> time for stage 2 sedreplace phase:
real    0m0.101s
user    0m0.037s
sys 0m0.063s
>>>> time for stage 2:
real    0m5.181s
user    0m1.240s
sys 0m1.593s

ucc.best-video-game-based(N=235,M=1)

>>>> time for stage 1:
real    0m4.384s
user    0m1.519s
sys 0m1.389s
>>>> time for stage 2 analysis phase:
real    0m2.803s
user    0m1.136s
sys 0m1.567s
>>>> time for stage 2 reupload phase:
real    0m2.997s
user    0m0.278s
sys 0m0.221s
>>>> time for stage 2 sedreplace phase:
real    0m0.101s
user    0m0.036s
sys 0m0.061s
>>>> time for stage 2:
real    0m6.175s
user    0m1.567s
sys 0m2.003s

ucc.most-humorous(N=367,M=3)

>>>> time for stage 1:
real    0m6.181s
user    0m2.235s
sys 0m2.249s
>>>> time for stage 2 analysis phase:
real    0m4.521s
user    0m1.864s
sys 0m2.551s
>>>> time for stage 2 reupload phase:
real    0m5.886s
user    0m0.728s
sys 0m0.563s
>>>> time for stage 2 sedreplace phase:
real    0m0.147s
user    0m0.042s
sys 0m0.103s
>>>> time for stage 2:
real    0m10.803s
user    0m2.733s
sys 0m3.365s

ucc.most-innovative(N=226,M=2)

>>>> time for stage 1:
real    0m3.829s
user    0m1.382s
sys 0m1.431s
>>>> time for stage 2 analysis phase:
real    0m2.671s
user    0m1.087s
sys 0m1.521s
>>>> time for stage 2 reupload phase:
real    0m3.847s
user    0m0.485s
sys 0m0.372s
>>>> time for stage 2 sedreplace phase:
real    0m0.116s
user    0m0.047s
sys 0m0.068s
>>>> time for stage 2:
real    0m6.876s
user    0m1.696s
sys 0m2.123s

ucc.transportation(N=8875,M=907)

>>>> time for stage 1:
real    2m17.521s
user    0m52.525s
sys 0m52.450s
>>>> time for stage 2 analysis phase:
real    2m27.892s
user    0m54.824s
sys 1m29.327s
>>>> time for stage 2 reupload phase:
real    13m57.523s
user    4m3.844s
sys 2m44.045s
>>>> time for stage 2 sedreplace phase:
real    0m28.523s
user    0m12.060s
sys 0m15.827s
>>>> time for stage 2:
real    16m54.303s
user    5m10.847s
sys 4m29.437s

ucc.pokemon(N=1571,M=207)

>>>> time for stage 1:
real    0m25.140s
user    0m9.312s
sys 0m9.405s
>>>> time for stage 2 analysis phase:
real    0m24.955s
user    0m9.937s
sys 0m14.716s
>>>> time for stage 2 reupload phase:
real    2m21.297s
user    0m56.130s
sys 0m36.807s
>>>> time for stage 2 sedreplace phase:
real    0m4.689s
user    0m1.801s
sys 0m2.762s
>>>> time for stage 2:
real    2m51.213s
user    1m7.955s
sys 0m54.467s

ucc.technology(N=1473,M=72)

>>>> time for stage 1:
real    0m22.791s
user    0m8.519s
sys 0m8.911s
>>>> time for stage 2 analysis phase:
real    0m19.449s
user    0m8.012s
sys 0m11.196s
>>>> time for stage 2 reupload phase:
real    0m55.958s
user    0m18.453s
sys 0m12.080s
>>>> time for stage 2 sedreplace phase:
real    0m1.580s
user    0m0.642s
sys 0m0.901s
>>>> time for stage 2:
real    1m17.286s
user    0m27.224s
sys 0m24.354s

ucc.film-tv(N=2543,M=105)

>>>> time for stage 1:
real    0m37.866s
user    0m14.915s
sys 0m14.765s
>>>> time for stage 2 analysis phase:
real    0m32.578s
user    0m13.279s
sys 0m18.702s
>>>> time for stage 2 reupload phase:
real    0m57.283s
user    0m26.494s
sys 0m17.257s
>>>> time for stage 2 sedreplace phase:
real    0m2.512s
user    0m1.010s
sys 0m1.461s
>>>> time for stage 2:
real    1m32.695s
user    0m40.901s
sys 0m37.623s

ucc.sports(N=1192,M=81)

>>>> time for stage 1:
real    0m18.639s
user    0m7.179s
sys 0m7.196s
>>>> time for stage 2 analysis phase:
real    0m15.726s
user    0m6.550s
sys 0m9.009s
>>>> time for stage 2 reupload phase:
real    1m10.613s
user    0m20.647s
sys 0m14.061s
>>>> time for stage 2 sedreplace phase:
real    0m1.777s
user    0m0.727s
sys 0m1.034s
>>>> time for stage 2:
real    1m28.410s
user    0m28.021s
sys 0m24.299s

ucc.ums-general(N=3190,M=95)

>>>> time for stage 1:
real    0m46.793s
user    0m18.700s
sys 0m18.251s
>>>> time for stage 2 analysis phase:
real    0m40.276s
user    0m16.657s
sys 0m22.902s
>>>> time for stage 2 reupload phase:
real    1m8.613s
user    0m24.517s
sys 0m16.028s
>>>> time for stage 2 sedreplace phase:
real    0m2.369s
user    0m0.947s
sys 0m1.326s
>>>> time for stage 2:
real    1m51.528s
user    0m42.216s
sys 0m40.431s

ucc.ums-pictures(N=1066,M=266)

>>>> time for stage 1:
real    0m15.732s
user    0m6.127s
sys 0m6.069s
>>>> time for stage 2 analysis phase:
real    0m21.324s
user    0m8.216s
sys 0m12.682s
>>>> time for stage 2 reupload phase:
real    2m38.321s
user    1m7.286s
sys 0m45.061s
>>>> time for stage 2 sedreplace phase:
real    0m5.464s
user    0m2.027s
sys 0m3.331s
>>>> time for stage 2:
real    3m5.341s
user    1m17.608s
sys 1m1.226s

ucc.untercast(N=6845,M=530)

>>>> time for stage 1:
real    1m48.483s
user    0m40.838s
sys 0m40.556s
>>>> time for stage 2 analysis phase:
real    1m48.122s
user    0m41.829s
sys 1m4.776s
>>>> time for stage 2 reupload phase:
real    7m49.343s
user    2m16.626s
sys 1m35.477s
>>>> time for stage 2 sedreplace phase:
real    0m15.732s
user    0m6.441s
sys 0m8.818s
>>>> time for stage 2:
real    9m53.504s
user    3m5.025s
sys 2m49.246s

ucc.server-invite-link(N=2,M=0)

>>>> time for stage 1:
real    0m0.641s
user    0m0.182s
sys 0m0.208s
>>>> time for stage 2 reupload phase:
real    0m0.106s
user    0m0.028s
sys 0m0.056s
>>>> time for stage 2 sedreplace phase:
real    0m0.012s
user    0m0.004s
sys 0m0.006s
>>>> time for stage 2:
real    0m0.324s
user    0m0.106s
sys 0m0.192s

ucc.anime-manga(N=15302,M=2867)

>>>> time for stage 1:
real    3m53.946s
user    1m30.287s
sys 1m31.074s
>>>> time for stage 2 analysis phase:
real    5m38.263s
user    1m56.936s
sys 3m35.981s
>>>> time for stage 2 reupload phase:
real    24m42.708s
user    12m0.428s
sys 7m48.289s
>>>> time for stage 2 sedreplace phase:
real    2m0.582s
user    0m52.916s
sys 1m6.151s
>>>> time for stage 2:
real    32m22.060s
user    14m50.442s
sys 12m30.715s

ucc.memes(N=5054,M=1186)

>>>> time for stage 1:
real    1m16.949s
user    0m29.395s
sys 0m31.031s
>>>> time for stage 2 analysis phase:
real    1m44.958s
user    0m39.258s
sys 1m4.518s
>>>> time for stage 2 reupload phase:
real    50m14.584s
user    4m41.889s
sys 3m12.321s
>>>> time for stage 2 sedreplace phase:
real    0m30.521s
user    0m12.461s
sys 0m17.750s
>>>> time for stage 2:
real    52m30.390s
user    5m33.754s
sys 4m34.770s

ucc.food(N=4161,M=433)

>>>> time for stage 1:
real    1m6.912s
user    0m25.735s
sys 0m25.955s
>>>> time for stage 2 analysis phase:
real    1m7.046s
user    0m25.823s
sys 0m40.645s
>>>> time for stage 2 reupload phase:
real    3m58.520s
user    1m54.117s
sys 1m18.193s
>>>> time for stage 2 sedreplace phase:
real    0m11.407s
user    0m4.454s
sys 0m6.843s
>>>> time for stage 2:
real    5m17.242s
user    2m24.494s
sys 2m5.848s

ucc.duckhunt(N=118065,M=70)

>>>> time for stage 1:
real    30m25.377s
user    12m42.342s
sys 12m4.405s
>>>> time for stage 2 analysis phase:
real    33m8.739s
user    10m41.799s
sys 22m4.306s
>>>> time for stage 2 reupload phase:
real    1m14.276s
user    0m20.465s
sys 0m11.595s
>>>> time for stage 2 sedreplace phase:
real    0m11.667s
user    0m5.498s
sys 0m5.977s
>>>> time for stage 2:
real    34m35.979s
user    11m8.231s
sys 22m22.559s

ucc.lego(N=334,M=48)

>>>> time for stage 1:
real    0m5.580s
user    0m2.334s
sys 0m1.999s
>>>> time for stage 2 analysis phase:
real    0m5.424s
user    0m2.339s
sys 0m3.005s
>>>> time for stage 2 reupload phase:
real    0m32.945s
user    0m12.547s
sys 0m7.392s
>>>> time for stage 2 sedreplace phase:
real    0m0.933s
user    0m0.386s
sys 0m0.538s
>>>> time for stage 2:
real    0m39.560s
user    0m15.371s
sys 0m11.090s

ucc.my-little-pony(N=1524,M=379)

>>>> time for stage 1:
real    0m22.741s
user    0m9.399s
sys 0m8.386s
>>>> time for stage 2 analysis phase:
real    0m29.876s
user    0m12.084s
sys 0m17.392s
>>>> time for stage 2 reupload phase:
real    4m12.570s
user    1m36.639s
sys 0m59.956s
>>>> time for stage 2 sedreplace phase:
real    0m7.781s
user    0m3.143s
sys 0m4.565s
>>>> time for stage 2:
real    4m50.525s
user    1m51.987s
sys 1m22.078s

ucc.boxbot(N=3755,M=291)

>>>> time for stage 1:
real    0m59.068s
user    0m24.940s
sys 0m22.502s
>>>> time for stage 2 analysis phase:
real    0m55.921s
user    0m23.047s
sys 0m32.131s
>>>> time for stage 2 reupload phase:
real    3m29.539s
user    1m13.747s
sys 0m47.713s
>>>> time for stage 2 sedreplace phase:
real    0m7.230s
user    0m2.781s
sys 0m4.310s
>>>> time for stage 2:
real    4m33.102s
user    1m39.705s
sys 1m24.432s

ucc.ucc-news(N=907,M=40)

>>>> time for stage 1:
real    0m14.899s
user    0m5.605s
sys 0m5.452s
>>>> time for stage 2 analysis phase:
real    0m11.960s
user    0m5.109s
sys 0m6.550s
>>>> time for stage 2 reupload phase:
real    0m28.593s
user    0m10.179s
sys 0m6.545s
>>>> time for stage 2 sedreplace phase:
real    0m1.175s
user    0m0.410s
sys 0m0.728s
>>>> time for stage 2:
real    0m42.098s
user    0m15.825s
sys 0m14.060s

ucc.science(N=249,M=2)

>>>> time for stage 1:
real    0m4.172s
user    0m1.664s
sys 0m1.641s
>>>> time for stage 2 analysis phase:
real    0m3.094s
user    0m1.279s
sys 0m1.789s
>>>> time for stage 2 reupload phase:
real    0m3.610s
user    0m0.527s
sys 0m0.422s
>>>> time for stage 2 sedreplace phase:
real    0m0.140s
user    0m0.042s
sys 0m0.097s
>>>> time for stage 2:
real    0m7.111s
user    0m1.939s
sys 0m2.483s

ucc.newcomer-of-the-year(N=24,M=0)

>>>> time for stage 1:
real    0m0.900s
user    0m0.355s
sys 0m0.298s
>>>> time for stage 2 reupload phase:
real    0m0.079s
user    0m0.022s
sys 0m0.055s
>>>> time for stage 2 sedreplace phase:
real    0m0.011s
user    0m0.003s
sys 0m0.006s
>>>> time for stage 2:
real    0m0.305s
user    0m0.104s
sys 0m0.196s

可以去迫真拟合一下sedreplace的时间复杂度是不是O(NM),至于其他阶段,第一阶段只有O(N),第二阶段分析时也只有O(N),上传时只有O(M),由于线程数是常量无论除以线程数还是除以线程数的平方还是除以别的什么都无关紧要

II what next

等我在ucc上测试成功后,我打算拿它去测试church of pancakechi,然后看下有没有心情开示它的整个消息记录;好了,我现在可以去写hakushinsona或者打完borderlands3了

bruhbitte.20.04.16

草,我这几天突然写不动fanfic了🤔所以我在搞些别的玩意,比如完成了从discord的guild元数据中找到能拖的频道(检查一下是不是missing access即可)并生成备份频道脚本可以接受的参数sh文件的脚本(这名字真™长🤔

然后在频道备份脚本里加了个迫真profiler,可以迫真统计每个阶段所花的时间🤔这样我就可以去尝试一次性备份整个ucc了,尽管看起来并没有什么卵用🤔由于肯定需要向discord发送十万甚至九万个请求,我搞了台vultr的🐣跑🤔

话说回来我觉得kamoganger chat central已经是个巨型乐子了,但接下来我肯定要拿这个脚本dump下church of akechi,搞不好还可以找个地方开示dump,那才是最大的乐子🤔

next beeg project.20.04.04

最近discord又推出了一个新功能,拥有全局管理员权限的用户可以将其guild导出成server templates,这样别人拿到这个templates链接(顺便一提的是,discord官方居然做了些这种templates)就能一键生成和那个guild几乎完全一样的guild了,准确点来说频道、roles和权限设置(包括每个频道的特殊权限设置)都能继承,emoji好像不能

当然这个功能得全局管理员那么大的权限才能使用,不过。。。

I discord guild datastructure

我前段时间在写频道备份脚本,我在想discord肯定有api可以获取一个guild里所有channels的数据,然后就可以一个for循环搞定

然后我就看了下注诸如https://discordapp.com/api/v6/guilds/[guild id]https://discordapp.com/api/v6/guilds/[guild id]/channels返回的结果,然后我发现了一件非常生草的事情:

无论用户有什么roles,哪怕没有roles,都能获得里面所有频道的信息、所有roles的信息,甚至所有和权限有关的信息

从某种程度上来说,获取的信息和templates功能返回的信息几乎一样多,甚至更多,毕竟还有emoji的信息,还有每个玩意的id(在templates返回的信息里面id只是个位数,而不是和时间相关的参数,不过这个不太重要)

所以我在想,有没有办法利用抓取的这部分metadata手动构造一个和原版一毛一样的guild?

II bruh

我仍然懒得看discord官方文档,所以我打算抓包解决

尽管我肯定希望discord有那么一个api,能让我把抓包得到的metadata全部扔进去它就能让一个guild变成一个和那些metadata一毛一样的guild,然而很不幸的是它并没有这种api;所以我们只能手动来了:

  1. 建立一个guild,并按照metadata修改其基本属性
  2. 按照metadata的内容建立一系列channels,别忘了channel有三种,文字channel,语音channel,还有category也是channel的一种,三种都需要抓包
  3. 对每一个channel以其metadata进行修改属性操作
  4. 按照metadata的内容建立一系列roles,并设置其permissions(但愿其设置permissions的api也是直接一个数字过去)
  5. 对每个channel设置permission override
  6. 如果可能的话,emoji也重新上传一遍,这个好办,上传动画emoji好像不需要nitro我也不清楚
  7. 调用discord的template功能:wiebitte:

现在已知的api操作:

  • 貌似频道的position这个参数只在其parent id里面,而category它也有自己的position
  • 一次请求就可以搞定所有频道的排序,所以理论上来说可以在一次请求中加入所有原来的parent id和position,理论上来说就能搞定排序问题
  • roles也能一次性搞定排序;另外和channels一样,排序的api和每个元素属性的api是两个不同的api
  • 奇怪的是channel的permission override用了put请求,而且貌似每个channel的每个role都需要请求一遍;只不过好像没有新建override和更改的区别
  • 其实permission override可以建立频道channel的时候就加进去,不然的话它就和category同步;我觉得category会有permission override这么一个选项可能就和这个有关吧

UPDATE:终于写完了,建立频道的时候我建立了两遍,第一遍先建立categories,然后对它们排序,然后在metadata里面替换一遍id,就像建立roles时做的那样(其实roles应该先建立,然后在metadata里替换掉id,这样才能正确地设置permission override);第二遍再建立其他channels;我发现在建立channel时就可以设置好除了position之外的所有参数,甚至包括parent id(但就是position需要从所有参数里移除,之后再设置,不然会导致部分channels创建失败)

接下来当然就可以用discord的那个templates功能创建个template了,然后就可以用来troll人了;比如:

The HRP Community(迫真

Unterganger Chat Central(迫真

某个shuann(p5的joker和ann chan)聊天室

Persona & SMT(迫真

是时候迫害一波perusonafags了(手动滑稽

multithreading discordbackups.20.03.30

没想到在缝合了包括discord drive脚本等一大堆脚本之后,我真的把多线程重新上传附件给做出来了,而且效果相对原版可以说是立竿见影,只需10个线程,拖ucc的冻鳗频道只花了28分钟42秒,拖ucc的mlp频道只花了两分钟48秒,现在还在测试nsfw频道,估计不会超过两小时🤔

总体来说对discord附件的处理,有两种方式,一种是在遇见附件的时候处理它并即时替换消息然后再写入dump文件;另外一种方式是先dump一遍消息,在此过程将需要重新上传的文件全部列出来(当然生成aria2链接的时候理论上来说就包含了所有信息,但那不够,我需要再生成一个metadata文件),然后在另外一个函数中将这些文件全部处理一遍,获取原链接和重新上传后新链接的对应关系,然后用sed命令实现替换,由于discord链接只有一个斜杠(可能还有双引号)是sed的元字符,把它转义掉即可

当然如果是py等高级脚本语言的话,理论上可以在dump消息的时候就将附件推到每个重新上传线程的待处理队列里面,这两步都可以并行,但bash并不是这种高级脚本语言,所以只能分两步走了

和discord drive相比,我还需要实现将大于8MB的文件交给nitro线程上传这个功能,考虑到实际情况,我强制规定数组0为nitro线程(即只有一个nitro线程),别的线程从1开始;接下来分配线程的时候只需要一个for循环就可以像以前一样干了

由于metadata文件里包括了附件的文件大小,遇到大于8MB的文件直接推给nitro线程,剩下的写个求余按顺序推给剩下的线程

另外我发现将for列举线程内文件的循环写在线程函数之外和之内都能正常工作,所以我还是写在线程函数之内比较好看;看来唯一需要注意的点几乎只剩下了将里面所有变量前面都加上local🤔

这么搞的话尽管从discord上下东西的速度是快了不少,但之后sed时就蛋疼了,毕竟现在它需要在一大坨消息dump里找到并替换附件url,时间复杂度瞬间从O(n+2m)变成了至少O(2nm),其中n是消息条数,m是附件数量,乘2是因为需要替换的地方有两处

比如搞ucc的nsfw频道时前两个步骤只花了可能一个小时,但sed替换时一秒钟才能替换1到1.5次,而需要替换的消息有一万多条🤔

这还真TM操蛋,不过除了移到本地linux外还有什么加速的方法?🤔可能需要重写一遍scheduler算法,直接将dump文件拆成线程个数份,然后除了需要扔给nitro线程的文件外,其他线程生成的新链接只需要替换它对应的dump片段,最后再将替换完成后的片段合并,这样时间复杂度就变成了O(t(n/t)(2m/t)),取决于sed可不可以多线程,前面的那个t也许可以去掉🤔

UPDATE:草,终于写完了多线程,无论(重新)分析、上传和sed替换都做了多线程,发现尽管sed时间缩短了十万甚至九万倍,但别的开销大了起来:

  • 由于不知道消息的具体数量,没法在一开始dump的时候分析,只能等dump完后分析,由于要保证前向兼容(获取原始aria2列表),需要重新分析(但这个也可以写成在分析阶段做,倒是没什么)

  • 最主要的是附件的分布并非均匀,所以有的dump片段就会比别的片段多些附件,甚至多出几十到几百件,这样别的线程需要等待这个线程

实测优化后的方法拖ucc的mlp频道居然比优化前多整整一分钟,就是在等那个多出来的线程;冻鳗频道花了26分钟32秒,快了两分钟多一点;我估计nsfw频道会是这种优化方法的最大受益者,毕竟之前光sed替换就花了67分钟49秒,而在优化后相同的过程(我光注释了上传的代码,然后生成了假的sed替换文件,如果不考虑附件不均匀导致的开销,可以认为是优化后的表现)只花了15分钟46秒🤔

由于我不小心ctrl+c掉了nsfw频道的dump过程,它sed到一半好像花了86分钟,我估计和discord交互的时间是52分钟左右🤔

对了,在比如死🐴管理一个小时后就要删聊天室的极端情形下,优化后的方法由于有重新分析和线程间不均匀等额外开销,搞不好会导致来不及备份完很多附件就消失了的额外风险,而之前的方法没有这个风险,而且由于给线程分配任务是按照余数的方式分配,它会尽可能均匀,最多只多出一个任务🤔

我的测试表明基本上在一万条消息以上,优化后的方法在时间上才有优势,而且会因为时间复杂度的二次方性优势更大

比如拖十万条消息和附件时,原来的方法可能要花以天计的时间来完成sed,当然此时已经和discord上面被删了的频道没有半毛钱关系了🤔

future

接下来我打算实现个迫真profiler,来标记出每个阶段需要花的时间,反正time命令的结果貌似只能输出到stdout或者stderr,如果设置重定向的话恐怕所有东西都从屏幕上消失了;我要么查下吧

然后就是想办法实现备份整个guild的脚本了,只需要列出所有channels,然后设置好每个channel对应的参数,然后就可以调用这个脚本了;主要是需要备份整个guild的时候情形都非常极端(比如旧/r/megatan即将被删前几个小时),时间真的很珍贵,估计所有频道都得设置成仅文字或者旧多线程方法

另外我需要想办法测试下一个频道被删之后里面的附件能保存多少时间,我看哪天想办法设计个实验,但现在还是算了吧

附录

用优化前方法拖mlp频道时间:

real 2m48.221s
user 1m38.277s
sys 1m26.461s

用优化后方法拖mlp频道时间:

real 3m19.677s
user 1m35.828s
sys 1m31.185s

用优化前方法拖冻鳗频道时间:

real 28m41.908s
user 16m8.481s
sys 14m10.055s

用优化后方法拖冻鳗频道时间:

real 26m32.508s
user 13m26.061s
sys 13m55.378s

优化前nsfw频道执行sed替换所用时间:

real 67m49.196s
user 33m38.716s
sys 31m18.762s

优化后nsfw频道重新分析、执行sed替换等所用时间:

real 15m45.703s
user 10m1.709s
sys 17m54.682s

优化后拖nsfw频道所用时间:

real 67m12.181s
user 35m12.408s
sys 40m22.244s

至于优化前的时间,反正我懒得测,当然也不一定(bruh

UPDATE.20.04.12:在vultr 512MB内存vps上拖ucc的迫真赛博监狱频道所用时间(由于司马cord不支持ipv6,我只能多花点钱上个ipv4实例):

real    12m16.441s
user    3m50.691s
sys     3m23.343s

futabruh.20.03.20

这几天在玩四海兄弟3,这破游戏经常闪退,有时甚至还会蓝屏或者直接重启,我以为是某个元件过热所致,但我检查过所有传感器,温度都是正常范围;但今天它闪退的次数实在是过多,我玩个偷车的支线甚至车快到据点了,电脑直接重启,感觉那些关卡我好像试了不下十次甚至九次🤔

我感觉是内存问题,插上另外四条内存,这下好了,它直接开不了机了;如同我折腾R4E那样,我随便换了下内存,最终无论怎么折腾它都只能识别出三条,而且闪退问题仍然没有解决;甚至某些时候登录到系统之后就开始蓝屏🙃

我猜测上次主板直接翻转180度摔到地上也许对其部分内部电路造成了难以估计的损害,此时恐怕只能插ecc内存了🤔

还好我之前搞x86玩具的那四条工业垃圾一般的4GB内存(加起来也只有100块钱)被我带上了(而我却忘了带主机上的16GB内存,但我怎么想到在家里还能玩寨板?),赶紧插上看能不能用;那四条内存好像没法随便插,那个带马甲的海力士内存必须插4号槽(还是1号槽来着,这主板连个sepc都没有),不然开不了机;但如果能开机的话,那它是相当稳定的,比如我玩了可能是两个小时的游戏,一次闪退都没有发生,我感觉好像又回到了使用hp工作站主板的时候

但这16GB内存也太たま少了吧,一个四海兄弟3就能占掉4GB,再开几个firefox开个虚拟机,我估计内存就要爆炸了;现在32GB的ecc好像降到了356还是365来着,赶紧买上四条再说,最多我问下卖家4Rx4的14900L能不能用在山寨x99上

ps. 将低频率的ecc内存插入设置为高内存频率的系统后,会发生的事情之一便是直接卡得没法用;哪怕可以用,aida64的内存速度测试也没法完成,会无限卡🙃

UPDATE:悲报,那个32GB的4R*4 14900L内存条果然没法用,怎么改设置都不行,放弃折腾了,退货,然后买四条16GB的2R*4 14900R🙃

当然如果我哪天钱多得没处花了,我可以考虑买8条2666的DDR4,这样我也就可以使用个正经主板了,比如hp的z440主板就挺不错,还比华南的寨板便宜(?

然后插上8条DDR4的32GB内存,直接256GB内存,爽死了,整个系统都可以RamDisk化🤔而且关机前都可以保存回固态,其实完全可以像VMware处理虚拟机的内存那样,随时都保存快照,这样就可以在关机前尽可能快地保存东西,尽可能同时享受RamDisk的速度和固态的非易失性🤔我记得很多RamDisk软件有这种设置,但整个系统都RamDisk化我还没有尝试过🙃

b r u h c o r d.20.03.13

现在discord搞几个小号可真たま难,有时候刚注册完就强制电话验证了,有时候注册几个小时后才需要强制电话验证,反正以这个概率我们可以认为discord完全就是需要电话才能用了(老账号除外

然后discord还要摆出一副像17年那样的欢迎各路人士随便注册(甚至现在都可以直接在邀请链接里面填用户名然后直接创建账号)的迫真白左模样,实在是让人哭笑不得

所以我来做几个实验透透discord的🍺

实验一

我先使用我上次买的一个qq号的邮箱注册个小号

然后搞到auth或者token,对于什么都没有的新账号来说直接在firefox开发者选项的存储、本地存储里面就能找到token,不用抓包

然后上bash大法:

function altantics() { # 1 = auth,2 = alt number
    curl 'https://discordapp.com/api/v6/users/@me/settings' -X PATCH -H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.0' -H 'Accept: */*' -H 'Accept-Language: en-US' --compressed -H 'Content-Type: application/json' -H "Authorization: 1" -H 'Origin: https://discordapp.com' -H 'Connection: keep-alive' -H 'Cookie: __cfduid=d34b57750a8621dabd797ce74bfc579ef1584047884; locale=en-US; __cfruid=2b1a676e24e573415b1d55769aa6d0f4b68cea0a-1584047889' -H 'TE: Trailers' --data '{"locale":"en-US"}'
    ./discordfilehosting.v7.sh --antics "1" futabruh futabruh futabruh alt2.conf 32
    curl 'https://discordapp.com/api/v6/users/@me' -X PATCH -H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.0' -H 'Accept: */*' -H 'Accept-Language: en-US' --compressed -H 'Content-Type: application/json' -H "Authorization:1" -H 'Origin: https://discordapp.com' -H 'Connection: keep-alive' -H 'Cookie: __cfduid=d23c3aae32eb5dbb13cbfdf9dadc976661584047531; locale=en-US; __cfruid=955decf5551e3d1a15f9b51d952ac1a623c88963-1584047534' -H 'TE: Trailers' --data '{"username":"leachan'"2"'","email":"leachan'"2"'@saggyboobs.com","password":"[insert password here]","avatar":null,"discriminator":null,"new_password":null}'  
}

这样,我们就可以批量搞小号并改名成完全不存在的邮箱了,而生草的是那个qq邮箱居然能重复用(因为在验证邮箱之前可以随便改邮箱),实测我注册到第⑨个小号的时候才出现了我的脚本跑到一半就被风控的结果

实验二

在此过程中它生成了32的不知道多少倍个webhooks,我们来测试下当创建guild和webhooks的小号被风控(注意,不是橄榄)之后,这些webhooks能不能用

从只有一半的第⑨个webhook conf里面提取最后一条链接:

https://discordapp.com/api/webhooks/687774052252909569/on5bdVDOJJCOIbyV2_U8lLIaeIe2daM0wwwqVH3xeCq6KBDkWorQSrP6ybCUp1UhzkUo

然后随便找个discord image hostin'客户端上传个东西:

[上传过程略]

实测它完全能上传并返回预期的discord外链

结论(迫真

discord网盘的稳定性,至少基于webhooks的版本,得到了进一步的验证,只要确保guild owner的小号不被橄榄(一般来说discord账号很难被橄榄,尤其是这个小号加入了ao多聊天室而一句批话都没说过时),哪怕它被司马cord给风控了,它创建的所有webhooks都能正常使用,而我的discord网盘脚本是以discord webhook上传后的返回值来获取文件链接的,字面意义上的和discord账号没有一毛钱关系,完全不影响discord网盘所有功能的运作

phones

现在还有没有接码平台啊,我还是需要搞一堆discord小号的,用来toiletgang或者迫害perusonafags或者别的事情

wowwtf.20.03.11

卧槽,我发现x99系统居然支持睡眠啊,不像渣渣x79

但这个主板还是有点毛病的,比如睡眠之后居然没法像笔记本那样就用键盘或者鼠标唤醒,而是需要按下电源键;但更蛋疼的问题是唤醒之后风扇会狂转,直到下次重启之后才能恢复设定的低转速,这就非常蛋疼了,搞不好我只能尝试去买个物理调风扇转速的玩意,有吗?

data recovery.20.03.02

我去,那个司马易驱线在搞乱了我固态的分区表后,居然连那个5mm硬盘都不放过,但这次我发现用dg居然能恢复出来,它的智能读取分区功能不仅可以读出来原样数据,连目录结构都能保留,实在是太强了

然而我的那个版本dg没有破解完全,所以没法恢复,所以我只好再找个dg版本

其实dg是有加密狗的,难怪破解版dg都有这样那样的问题,比如数据检测出来了恢复的选项却点不了,估计是下了若干个反破解断点

但在我寻找dg破解版的过程中,我发现了dg居然还有海外版,而且海外版居然没使用加密狗,这样这玩意就没啥难度了,由于dg没有在线激活,只要带了注册信息就是完全的专业版,比adobe全家桶还要巴适

这样,我就用着英文版的dg将那块硬盘里的所有数据导出来了,文件的时间戳至少是完整的,但文件夹就不是了,本来能保住文件夹时间戳的软件也只有winrar和部分全盘备份软件了,而dg不是其中之一

好了,这次事件的教训无非就是哪怕这种盘也得接阵列卡上,至于那块接阵列卡上的固态,里面只有点音乐了,可以转移到5mm硬盘上;其实我买这破玩意就是为了放些固态放不下的东西,而那些服务器机械硬盘由于没有散热系统,我必须用的时候才会插上

x99.20.02.26

我了个über草,现在某fish上居然大量出现了v3的车,e5 2678 v3,尽管它也就比e5 2670多出一半的核心,但它居然支持DDR3/DDR4,这样最好的情况下我只需要买个U买个主板我就能无痛升级到v3了

而且这可不仅仅是核心多了一半,v3还支持avx2和tsx哦,玩rpcs3的效率会比v1高不少的,搞不好perusona5能流畅运行了

问题是支持v3上DDR3的主板可没几款,华南金牌有廉价款的x99-ad3还有迫真旗舰款甚至据说可以DDR3/DDR4双修(其实由于DDR3和DDR4的构造不一样,它只能插四条DDR3或者四条DDR4,但考虑到它们的recc版本都有单条32GB,好像不是什么带问题,而且最主要的是现在32GB的ddr3 recc比16GB版本算下来便宜不少,我记得1866的16GB要200来着,32GB只要350,很多游戏工作室会选择单条32GB搭配2678 v3,只不过x79或者x99不组个四通道,比新平台能好到哪儿去?新平台还能超频,tm超到3200双通道甚至4000双通道已经赶上辣鸡佬平台了,频率还要高🤔)的x99-tf,价格不算贵,U现在只要700(反正比那个12核心的v2便宜多了),主板只要600到700,加起来还没有我在成都一个月的生活费的一半或者三分之一(取决于统计口径)多🤔就是我不太敢用到主系统上

我估摸着四月份才能回成都,我tm都想买一套玩玩了🤔

它的layout还是比较科学(迫真)的,三个全速pcie可能有两个x16一个x8,然后它有两个x4的nvme m2槽(然而没有一个可以放22110)和一个x1的nvme网卡槽,第一个x16可能可以放得下三槽显卡,第二个可以放个22110的nvme固态(这种固态当然是接直连pcie最好了),第三个可以插阵列卡或者USB3.1卡,声卡也许可以插显卡上面的那个x1🤔看起来挺浪费的,但搞不好和别的寨版一样,它也支持pcie拆分,这样就好玩了

但最有意思的是这些寨版还tm是全新生产的可还行,连r5e都有些年头了但它们貌似还能用很多年,而且我和很多游戏工作室用的是同款硬件了,它能经历他们的workload那我的更轻的workload也是没啥问题的,剩下的事情就是买个tf,然后我就至少可以插上我的全部8根内存条了(也许我开始后悔这次走之前没把那8根服务器内存条也拔下来?当然我后悔的事情可能多了去了,不差这一件🤡

UPDATE:草,我看了下官方迫真specs,pcie1和2是x16,3是个x16形状的x4,有可能那两个x4的m2是直连的而那个x4是芯片组的(比如可以接个USB3.1的卡或者辣鸡佬不可缺的sas阵列卡),而那两个m2也是逼死辣鸡佬系列,居然不支持22110,一个压根就插不了22110,一个也许可以插但没处固定(也许你的显卡可以挡一下?),看来完美的辣鸡佬主板还是不存在的啊🤔

另外一个问题,某宝上的全新套件需要1400,某fish二手只要1300还包调试到降压3.3,但问题是我可能想搞个全新主板,但我也不清楚,恐怕需要更多信息了

草,最后上某宝买了1400的,因为那个1300的某fish卖家一直不搭理我,那就没办法了,我只能去自己刷bios或者不刷bios了;对于2678 v3当然提升没多大,但对于另外一款没什么大船的DDR3/DDR4双修U,2697 v3来说,可就非常有用了,能直接将主频从不到3提到3.8,这简直就是i3到i7(迫真)的改变,而且它还有丧心病狂的18个核心,比我现在买的12核心还要多一半,相比起2670恐怕已经有三倍提升了吧,然后我估计TDP也要上天,华南寨版的6还是7相供电估计会爆掉,然后好点的主板又只支持DDR4,搞不好连recc都不支持可还行🙄

UPDATE2:在不知三天还是四天的等待之后终于等来了板+U的组合,折腾了一中午,反正蛋疼的地方很多,比如板载LAN需要装华南官网的驱动才能正常用,不然它就一直在识别;默认风扇狂转,好在智能风扇控制是可以调的,调到40就可以了;内存频率的更改选项藏得很深,而且改完后尽管测速的确是四通道的速度,但任务管理器和cpu-z都没法成功识别出来,可能是因为这DDR3/DDR4的组合太诡异了吧🙄

更诡异的是这颗U,它一直在2.8和2.9直接徘徊,打完所谓的鸡血bios后更加诡异,甚至降到了2.7,怎么改bios设置都没用,我去,说好的3.3呢🙄aida64压根就直接识别成了2680 v3,估计这就是一颗OEM定制U吧

还有尽管bios里写的是pcie-a被拆分成了x4x4,而且我的固态真的占了x4,但我在aida64里看到的却是我的固态被接到了芯片组的pcie2上,这就真™诡异了,这个板子的pcie到底是怎么布局的,直通的x8到底是被分配到了两个m2上还是分配到了第一个m2和第三个pcie插槽上

它和旧平台相比可能也就是usb3比较好使吧,我要么测试下pcie转usb3.1的转接器能不能用

UPDATE3:不清楚为啥和那个hp的工作站主板一样,我这个破系统也不能使用nvme转usb系列,所以usb3.1的扩展卡我可以不用考虑插了;与此同时我发现现在声卡也开始变得诡异了,动不动左边声道变得弱了,然后我不经意发现声卡外面的金属外壳烫的1b,这™是声卡不是显卡啊(wtf

所以很明显它挨着显卡背面放不是什么好主意,所以我只能将剩下两个金属外壳的pcie槽用来插阵列卡和声卡了,尽管这看起来简直就是浪费;同时我借此机会将sm963从第二个m2槽移到了第一个m2槽,然后发现它上面的散热马甲就足以将它压在主板上了,根本不用上什么螺丝,这样第一个槽以损失了一个pciex1的代价也能上22110固态了🤔

重启后看了眼aida64,芯片组上面的pcie只接了一个板载网卡,这样结论就很明显了,华南x99tf的第一个m2和第三个金属pcie槽是以x4x4拆分方式(见bios默认设置)直连的,剩下的两个pciex16自然也是直连的(这样它刚好用完了40条通道),再剩下的pcie全是芯片组扩展的,一个x4的m2,两个pcie x1,一个网卡用m2(肯定是x1)还有板载网卡,刚好是x8🤔

只是as测试的结果更诡异了,直连时的延迟居然是连芯片组上的2倍可真的还行🙄

另外华南x99的x99芯片组可能有缺陷,所以不建议fileops使用它们接外设,全接到金属pcie上吧,至于那几块机械硬盘我本来就接阵列卡上,所以可以无视它x99芯片上面sata接口的缺陷(如果有的话🤔

wow.20.02.15

我发现星星星居然出了一个高端ssd系列,叫做983 zet,号称使用了更高端的Z-nand flash(不会是传说中的新工艺SLC项目?),我看了,尽管4k仍然赶不上intel的optane dc p4800x,但至少顺序读写比它快很多,价格也便宜很多(也没便宜到哪儿去,480GB要1800,960GB要3500,相比之下p4800x是375GB的7000,750GB的14000,wiebitte?

Product briefs for the 983 ZET (Z-NAND Enterprise Technology) SSD show less than 0.03ms latency. That’s < 30 µs, compared to less than 10 µs latency for the Optane DC P4800X. They show it as faster than Optane at all IOs except random writes but suffering on the endurance front.

The ‘up to’ performance numbers (with Optane DC P4800X numbers in brackets) are;
- Random read/write IOPS – 750,000/75,000 (550,000/500,000)
- Sequential read/write – 3.4/3.0 GB/sec (2.4/2.0 GB/sec)

from https://blocksandfiles.com/2019/04/01/samsungs-z-nand-is-okay-optane-competitor/

等等,它的写io丢人到sata固态水平了是几个意思?我顺便查了几款其他我在用的nvme固态的写io信息,发现它们也是这个情况,读是写的十几倍,可还行

但最神奇的是某fish,无论这款还是p4800x都有m2的form factor,哇,这样我是不是就可以把它塞进我的nvme转usb3.1移动硬盘座上了?(尽管不知道意义何在,那个破硬盘座的4k连使用了sata转usb3.1芯片的固态U盘都不如,同样500块钱我tm还不如买个512GB的啥都装好了的固态U盘,至少它“form factor”稍微赏心悦目一点,用起来稍微舒服一点

983 zet的oem版本叫做sz983或者进阶版的sz985,号称能达到30DPWD,240GB大约四五百,好像可以迫真接受(尽管同时pm953只要500,而sm963只要300

但那个价格看上去好像又不太靠谱,所以我觉得稍微靠谱的价格240GB大约是1100左右,这个价格就非常不好玩了,加点钱都可以上1.92TB的pm963了,而且4k更强寿命更高(?)的optane 900p此时也是这个价位,这就非常尴尬了

其实我当年花1600买的256GB的840 pro,放到13年完全没啥不可接受的,但我早已经被什么220的256GB固态、300的sm963乃至没买到的450的pm963给惯坏了

optane的m2版本叫做p4801x,100GB版本一千出头,貌似只能装个系统(inb4系统装16GB optane上

还有一个丧心病狂的车,750GB的某u2 oem版本只要5600,简直不敢相信是真的,然而就算是真的我还是不会考虑,毕竟我目前还是mlc sata ssd为主,也没有什么除玩游戏外更高的4k需求,可能pm953或者pm963才是最适合我的