感叹光阴似箭
天气晴 发现了一个比每天撕一页老黄历更恐怖的事情就是一把撕六页,揉成一大团扔进垃圾桶里。 近日又迈出了和其他人办业务的重要一步,看起来只要我敢主动打电话都还蛮简单的。 又可以因为摘樱桃的原因去研究gcc的编译流程了,离开了riscv-gnu-toolchain还一次都没有成功过,遗憾。
天气晴 发现了一个比每天撕一页老黄历更恐怖的事情就是一把撕六页,揉成一大团扔进垃圾桶里。 近日又迈出了和其他人办业务的重要一步,看起来只要我敢主动打电话都还蛮简单的。 又可以因为摘樱桃的原因去研究gcc的编译流程了,离开了riscv-gnu-toolchain还一次都没有成功过,遗憾。
天气晴 在给自己想一个理由断更,但是没想出来。 樱桃摘到了一周前,编译爆炸了,开始debug。 找到了 blog sort by time 的方法但是不知道往哪放。 https://gohugo.io/methods/pages/bydate/ 更新:因为用 github CI拉去上游主题仓库,所以我自己修改主题代码没有用。因为不想自己维护一个主题仓库,所以不按照时间排序了。
天气晴 在给自己想一个理由断更,但是没想出来。 最近在给 gcc 摘 RISC-V 的樱桃,纯纯体力活,不过稍微还是瞟了几眼。 观测到性价比高的办公室了,也算有着落。 更新:性价比高的办公室凉了。
天气雨 今日观测不同架构 linux kernel 中的源代码关于 signal 的写法,因为不会用,所以也没有看懂。明日继续研究。 但也算是找到了 uc_mcontext 的出处?不过并没有理解 gprofng 此处用法是什么,也许我在舍本逐末。 又回想起了一些小时候的事情。时间过得可真快。
天气阴 找到了 GET_SP 的文件。 https://github.com/bminor/binutils-gdb/blob/master/gprofng/libcollector/unwind.c 观察 Aarch64 代码编造了一些 REG_S0 REG_SP REG_PC,但是非常不 work 。 明日继续研究。 发现不是很懂 stack unwind,搜到了一些文章,大致了解了一下,近日没有耐心阅读学习,一心想回家过年大呼特呼,而且也不懂该如何在 RISC-V 上使用。 像 Aarch64 一样简单添加并不能解决问题,SPARC 和 x86 都有大量相关代码。预计我也需要写大量 RISC-V 相关代码。 今日观测民生银行大厦其他楼层办公室,物不甚美,胜在价廉。 龙龙 和 Pigy 来办公室玩耍,刷 leetcode 题目,好强。
天气晴 搭建好的qemu system使用watch ncpus可以快速发现被优化,但这完全是我编译的时候忘记了修改 Makefile 里面的 -O0. 修改完成之后 watchpoint 正在消耗大量时间。 结束 watch 之后,传入 -O0 又有了新的报错。 [root@172 build]# ./gprofng/src/gp-collect-app echo 1 Creating experiment directory test.6.er (Process ID: 354740) ... echo: symbol lookup error: /usr/local/lib/gprofng/libgp-collector.so: undefined symbol: GET_SP 找到了 GET_SP 的文件。 https://github.com/bminor/binutils-gdb/blob/master/gprofng/libcollector/unwind.c 明日继续研究。 #define _GNU_SOURCE #include <stdio.h> #include <sched.h> #include <sys/syscall.h> #include <unistd.h> #include <asm/hwprobe.h> void main() { int ncpus; int npages; int page_size; struct riscv_hwprobe res; res.key = RISCV_HWPROBE_KEY_MVENDORID; cpu_set_t cpu_set; int __riscv_hwprobe (struct riscv_hwprobe *pairs, long pair_count, long cpu_count, unsigned long *cpus, unsigned long flags) { return syscall(__NR_riscv_hwprobe, pairs, pair_count, cpu_count, cpus, flags); } CPU_ZERO(&cpu_set); CPU_SET(0, &cpu_set); long ret = __riscv_hwprobe(&res, 1, 1, &cpu_set, 0); ncpus = sysconf (_SC_NPROCESSORS_CONF); npages = sysconf (_SC_PHYS_PAGES); page_size = sysconf (_SC_PAGE_SIZE); printf("ncpus: %d,\nnpages: %d,\npage_size: %d\n", ncpus, npages, page_size); printf("riscv_hwprobe:%x\n", ret); printf("riscv_mvendorid:%x\n", res.value); } 测试出了新内核可以读取 vendorid 和使用最新最热系统调用。 重要的是通过例子看懂了 kernel 文档里面的用法。 ...
天气晴 近日听说新的sbi和kernel支持 profile sampling 打算搭建 qemu system 进行实验。 搭建过程遇到 nfs 的网桥难关。 今日跨越网桥配置难关。 https://wiki.archlinux.org/title/Systemd-networkd#Bridge_interface 在cyy的指导下根据上述链接将网桥绑在网络接口并配置了静态 ip 。 由于我电脑的home目录是加密的,所以无法 mount nfs。于是将 archriscv 的系统镜像移到了 /var。 搭建好的qemu system使用watch ncpus可以快速发现被优化,但这完全是我编译的时候忘记了修改 Makefile 里面的 -O0. 修改完成之后 watchpoint 正在消耗大量时间。
天气晴 近日听说新的sbi和kernel支持 profile sampling 打算搭建 qemu system 进行实验。 搭建过程遇到 nfs 的网桥难关。今日不打算跨越,明日再跨。 手头上的 unmatched 的 sbi 和 kernel 版本都是旧的。无法使用 perf xyenchi@ubuntu:~$ sudo perf record -a -g Error: cycles: PMU Hardware doesn't support sampling/overflow-interrupts. Try 'perf stat' 本可以记录 cross compile linux kernel, 但是更想下班。
天气阴。 今日尝试直接修改 Makefile 在 unmatched 编译,发现 ncpus 不显示 optimized out 了。 说明 Makefile 的生成脚本确实写糊了,和 x86 一样可以得出值是 0。 运行的时候: (gdb) r ./gprofng/src/gp-collect-app echo 1 Starting program: /home/xyenchi/binutils-gdb/debug-build/gprofng/src/gp-collect-app ./gprofng/src/gp-collect-app echo 1 [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib/riscv64-linux-gnu/libthread_db.so.1". Creating experiment directory test.1.er (Process ID: 1319751) ... process 1319751 is executing new program: /home/xyenchi/binutils-gdb/debug-build/gprofng/src/gp-collect-app [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib/riscv64-linux-gnu/libthread_db.so.1". Creating experiment directory test.2.er (Process ID: 1319751) ... Warning: libgp-collector.so is already defined in one or more LD_PRELOAD environment variables process 1319751 is executing new program: /usr/bin/echo Error in re-setting breakpoint 1: Function "write_header" not defined. [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib/riscv64-linux-gnu/libthread_db.so.1". 1 [Inferior 1 (process 1319751) exited normally] (gdb) p ncpus No symbol "ncpus" in current context. 但是大佬说使用ptrace的程序可能不能用gdb。 ...
天气晴。 今日尝试重新在 unmatched 上传入CFLAG=-O0 CXXFLAG=-O0不优化编译 gprofng, 发现无法传入。 # ------------------------------------------------- # Miscellaneous non-standard autoconf-set variables # ------------------------------------------------- # The gcc driver likes to know the arguments it was configured with. TOPLEVEL_CONFIGURE_ARGUMENTS=../configure --enable-gprofng CFLAG=-O0 CXXFLAG=-O0 CFLAGS = -g -O2 LDFLAGS = LIBCFLAGS = $(CFLAGS) CXXFLAGS = -g -O2