How to make a good perfing of pcie latency

The module is uploaded to the .ko

The script is

rmmod pcie-lat
ruby measure.rb -p 02:00.0 -l 10000 -b 0 -o 0x0
ruby measure.rb -p 02:00.0 -l 100000 -b 0 -o 0x0
ruby measure.rb -p 02:00.0 -l 1000000 -b 0 -o 0x0
insmod ./pcie-lat.ko ids=8086:1533
rmmod pcie-lat
echo 0000:02:00.0 > /sys/bus/pci/devices/0000:02:00.0/driver/unbind
ruby -v
ruby
lspci -nn -s 2:00.0
insmod ./pcie-lat.ko ids=8086
lspci|grep Eth
./measure.rb
make
ls
cd pcie-lat/
git clone https://github.com/andre-richter/pcie-lat

The result is

writing 3σ values (in ns) to file...
[email protected] ~/pcie-lat (master)# ruby measure.rb -p 02:00.0 -l 10000 -b 0 -o 0x0�����������������������������������������������������������������������������������������������������(base) TSC freq:     2294609000.0 Hz
TSC overhead: 28 cycles
Device:       02:00.0
BAR:          0
Offset:       0x0
Loops:        10000

       | Results (10000 samples)
------------------------------------------------------
Mean   |   3764.24 cycles |   1640.47 ns
Stdd   |    314.56 cycles |    137.08 ns


       | 3σ Results (9995 samples, 0.001% discarded)
------------------------------------------------------
Mean   |   3759.46 cycles |   1638.39 ns
Stdd   |     64.10 cycles |     27.93 ns

如何在Python logging.Formatter 格式化

我目前正在尝试居中与👉Python记录器中的日志记录级别字段,输出如下:

[    test_log    ][    DEBUG]  test (color_logger.py:66)
[    test_log    ][     INFO]  test (color_logger.py:67)
[    test_log    ][  WARNING]  test (color_logger.py:68)
[    test_log    ][    ERROR]  test (color_logger.py:69)
[    test_log    ][ CRITICAL]  test (color_logger.py:70)

但看起来像:

[__main__][DEBUG]  test (color_logger.py:67)
[__main__][INFO]  test (color_logger.py:68)
[__main__][WARNING]  test (color_logger.py:69)
[__main__][ERROR]  test (color_logger.py:70)
[__main__][CRITICAL]  test (color_logger.py:71)

有两个问题,

  • funcName 而不是 name

  • 得考虑右对齐和居中

解决方法

import logging

BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE = range(8)

#The background is set with 40 plus the number of the color, and the foreground with 30
#These are the sequences need to get colored ouput
RESET_SEQ = "\033[0m"
COLOR_SEQ = "\033[1;%dm"
BOLD_SEQ = "\033[1m"

def formatter_message(message, use_color = True):
    if use_color:
        message = message.replace("$RESET", RESET_SEQ).replace("$BOLD", BOLD_SEQ)
    else:
        message = message.replace("$RESET", "").replace("$BOLD", "")
    return message

COLORS = {
    'WARNING': YELLOW,
    'INFO': WHITE,
    'DEBUG': BLUE,
    'CRITICAL': YELLOW,
    'ERROR': RED
}

class ColoredFormatter(logging.Formatter):
    def __init__(self, msg, use_color = True):
        logging.Formatter.__init__(self, msg)
        self.use_color = use_color

    def format(self, record):
        levelname = record.levelname
        if self.use_color and levelname in COLORS:
            levelname_color = COLOR_SEQ % (30 + COLORS[levelname]) + levelname + RESET_SEQ
            record.levelname = levelname_color
        return logging.Formatter.format(self, record)



# Custom logger class with multiple destinations
class ColoredLogger(logging.Logger):
    FORMAT = "[$BOLD" + "%(funcName)s".center(20," ")+"$RESET]["+ "%(levelname)20s" +"]  %(message)s ($BOLD%(filename)s$RESET:%(lineno)d)"
    COLOR_FORMAT = formatter_message(FORMAT, True)
    def __init__(self, name):
        logging.Logger.__init__(self, name, logging.DEBUG)                

        color_formatter = ColoredFormatter(self.COLOR_FORMAT)

        console = logging.StreamHandler()
        console.setFormatter(color_formatter)

        self.addHandler(console)
        return

关于这个世界上的 idea 是否都被 Berkeley 垄断了

听同事在讨论这个牛逼的数据库哪家强的问题。我稍稍搜了下放在内存上的实现。不过感觉受限于内存在46bit的机器VM上最多1T的内存。群里有人说PM是内核4以后的最多内存计算方式。甚至intel发了ddr4接口的 nvdimm 。我上次知道这个东西还是在王春东的课上。所以王老师是个好老师。

这是一个用 nvram 做储存设备的数据库,0202年 Amp lab 年度项目 Redis over nvram. 还有pmdk 这种开箱即用的 API。总之 intel 是下了大功夫的。

相当于重写一遍pmem的底层库,让上层建筑能很好的看不到底下的婆罗门。 pmemkv 有直接 key value 操作的 remove()/get()/remove()

话说我是怎么知道这些东西的。因为王老师讲过,殷老师在做。大概在CA问问题的时候问到了,然后我的boss也同时对这个有需求,我就拿过来用了。

libpmem2写的是真的好, memmove 重写了,甚至用到了avx512的寄存器(其实挺多的,有xmm ymm zmm 16*512*3)。加之现在tiiger lake据说在这个带宽下并不降频,这可以说很优秀了。

顺便之前在睡觉前当助眠曲的东西,一个b站牛逼的c++ up🐖, 我加了他的群以后,很快就有会cpp的人回答我相关问题,比stackoverflow好很多。

感觉中文搜很多东西,会有一个人讲的很优秀。相比来说,英文内容更实际一点,但测试案例这种东西还是比较需要思考的,至少需要看会源码,会动静结合调试代码。如果能从github上搜到就不要自己调,如果搜不到就赶紧自己写一个然后开源。(虽然如果work 佛for companies 还是不要,但还是能以博客的形式发出来,或者以论坛的模式。)

若未来去美国读 nvram 相关的 PhD 也未尝不可。

德扑总结

赌博的艺术

作为一个还没学会概率论的妓院学生,我可能是找死军团。孙老板和Toby 都是Jane Street 大师培训过的任务,就有点瑟瑟发抖的感觉。

还好之前看过GTO的实现,并抄写了一遍强化学习德州Agent,DeepStack: Expert-level artificial intelligence in heads-up no-limitpoker, by Moravcik et al, Science, 2017 。 主体都是先博弈论盲猜一波,再MCTS。

再稍稍学了下后就开始跟各位大脑决战了。 下午5点开始,大概过了半点之后就大概知道各位是什么套路了。卢老板很会bluff,但总会盲猜胜利。雷(然苒)挺女生学霸范的,确实牛逼.

我在明知道赔率大很多的情况下还是输给了邓hz 100 一盘。

什么是无所匹敌的牛逼

终于在朋友圈里能找到几个数学竞赛的一等奖了。一个是2016 福建省集训队的,还有一个是高考上的北大数院。可是quick math 不是很好,现在屈居做了一个optiver 的quant intern。 我感觉在这里的所有知识都是为了更好的赚钱而不是为了世界产生更好的影响做的。但如果无路可走,一定要在这个领域深耕也不是不行。只是感觉未来某一天就就被科技超越。不过如果市场还在,这种职业就不会

之前的比赛让我对高频交易有了比较naive的了解,无论是看book pressure 还是market making。 可以说是有一套没有成为显学的技术在。孙老板就是那种学这个学了数年的经验老狗,可是如果有实践经验的话,也确实感觉孙老板挺有前途的。孙老板是个挺会做人的人,确实是我人生失败的部分。

交友篇

女生的评价体系

对于我最近碰到的四个女生,可以很清晰的看出哪些是乖乖女与世无争感觉的,哪些是有强烈个人意志的。或许是英美基因当中那种冲劲和国内的风气不太一样吧。这和当年的“上海学生圈“很不一样。她们都是有权有势的人,而她们确实是靠自己的聪明才智。至少都能混上北大,牛津,复旦。芒果虽然号称富婆,可是生活脾性感觉不像大富大贵,可至少看上去大家闺秀,还是杭州的,确实不错。如果找不到好男人,没有想法在quant 继续,我觉得很难在上海买房。事实就是这么残酷。

女生在申请上有很大的优势,尤其是那种娇小的女生,可能迎合美国身份政治的想法,我觉得无可厚非,谁不想组里面有个漂亮的,每天认真打扮的,可是要看做什么了,我感觉她们事业线拉不长。

就申请来说,复旦的管院女生就是比清华数学系申请的MFE好很多,一个是UCB的Hauss,还有是哥大的,高下立判,可是卢老板确实看上去很强。就我在B站关注的扁脸猫与午后红茶withLaura. 大概就是两校所在地区的区别。

男士能有多强

虽然quant 给的多,但我觉得给的还不算多,而且确实竞争挺大的,一个数学竞赛金牌进jump这种公司多学个几年,做个好QR不是问题。但他们的薪水能否支持他们在上海买房,大概需要十到二十年吧。人也不傻,为什么不出国混呢。

在一个人所擅长的地方和一个人喜欢的地方努力是有意义的,可是也容易被蒙蔽,为何我爸当时的大学同学打工的现在基本比不过他的原因也在此。

对我的兴趣

我挺菜的,在别人的饭局上都属于最菜的,鄙视链的最底端,被大多数人当成无关紧要的人,我现在在做的事大概就是为这个学校争点名气,可是被又龙哥当成”对自己无用的事“了。大家都不想浪费青春好好学习的时间。确实,我有的时候挺自卑的,也很久没有和女生说话超过十句话,但这种也不算是宅。就是一种对自己菜的表现,我需要认证对我的技术护城河拥有数10w小时的刻意训练。

可是感觉现在的女生眼界都有点高,也许是我表现的不太明显,确实脑残。不过我带的女生第二天就被偷师被三个男的约去cj了,牛逼。有的时候我确实不太近人情吧,不过我已经确定要一生努力奋斗了,不然也不会像小扎一样更新博客了。

work work study study life balance

作为一个超级对学习有持续激情的人,想搞点事情,不满于现状,你也可以说是革命。至少若无return,还是在HPC和sybolic execution 上深耕下去。

不知道在国外的人在show什么

看到之前国外的人show 自己的见闻还是有点小羡慕的,毕竟我已经20年在这个破城市了。我内心还是有想在新地方多走走的想法,可是能力不足以我这么干。

可是疫情开始后的show 就有点作秀了,口罩不带,还在封城的阶段,知道你又要送钱,又要付出生命代价了。

不知道我的知识有多封闭

我之前对欧美文学的观察太少了,连漫威这种描绘美国历史的剧本都没好好看,认真看解读,我觉得是我太闭塞了,还有孟德斯鸠,哈耶克,犹太共产党人的一系列东西,我觉着是自己太傻逼。有点自以为是了。

Approaching GRE

我好像一点都不紧张。

for 芒果

如果还有缘分,我会追上的,可是我还没有钱和资本,也不知道他看不看得上我。也许是我想要有艺术气息,顾家,且被富养的人吧,真没觉得他对我这种中产有什么压力,可是我确实感受到了向上的动力,让身边的人变得更精致,这大概就是我家国情怀的体现。

在我心里有一个更大的picture,只是现在尚不明朗,”待到山花烂漫时,她在丛中笑。“

for 学神

她和我专业有点相近,她有点母胎单身,但却想奋斗的感觉,有点过于激进的表达自己的想法,却总是有点不成熟,这种小局carry不来,可能是年纪比较小吧。

我倒觉得家常便饭,只是有个人在说话的时候我只会在一旁,觉得dhz说的很多时候有点太没有大脑思考了,感觉有点思考的东西,其实是看别人的想法,其实孙老板也是。可能人缘好的人都有这种想法。

所有的关系不过就是利益交换

我还是少参加点这种sb聚会了,浅尝辄止。现在还不是显形的时候,还没有任意增长完我呢。

如果人生也是德扑,需要基本面判断,需要博弈论,需要赌博。我还没有到翻盘的瞬间。如果脑袋好使,比较鸡贼,运气比较好,拿到的再差的牌也能多拿很多钱。

工作以后的作为

打了一个量化交易的比赛,说实话感受到了自己的无能,虽然写代码的能力不错,可是数学比别人上学太多了。果然一个不是拿IMO的物竞大佬不是一个好程序员,可能是最近厉害的人见的太多了。

量化交易比赛

是个对Future Bund 的仿真程序,有点我自己想写的高频模拟市场的味道,可是就是没时间。一开始我们着重于做alpha,主要就是对有的几个feature做Linear regression。也许是那个写的人非常刚愎自用,其实我没有写很多代码,我就帮忙弄弄环境,跑跑back testing, 优化优化速度,还有重构代码。那几天和龙哥闹矛盾,导致我没睡好,所以写出来的代码挺多bug。

两天后交了Alpha,被牛津大佬 Michael Ng 草虐,我们的研判是速度太慢,于是就只搞Market Making。后来又被Quickie的IOC 搞了。咳咳,我们又拿了他们的代码修理了一番,最后拿了个第三。

据许return 说,Alpha is the most important。是我们太菜了。

CPU Affinity

无事发生,就是做做kernel conf 的自动化,写个算法就行。

和其他学校同学的比较。

《夜航船记》说的好,在赴京赶考的路上,总是一个慢慢发现自己牛逼的过程。我觉得我们学校以及我过去十余年最好的培养就是实践。也是jump招我的原因吧。可是我从别人身上学到了很多,至少说的话都很精确,不会产生明显的谬误,且挺实干的,可是有努力的也有天赋型的,有狂野的denghz和东方也有稳重的Polytechinique 的yiran。

我有优点也有缺点吧。只是有的时候有点锉。

有关未来的出路

如果return 我绝壁三年提前毕业。如果没的话,好好考博士。

其yu就靠共勉。