HN user

maknee

129 karma

https://github.com/Maknee

Posts6
Comments21
View on HN
  Location: New York City, NY, USA (NYC)
  Remote: Yes
  Willing to relocate: No
  Résumé: https://www.linkedin.com/in/henry-zhu-347233121/
  Email: find email on my blog OR reach out on linkedin
  LinkedIn: https://www.linkedin.com/in/henry-zhu-347233121/
  Github: https://github.com/maknee
Things I've done (I've put all these projects on my blog: https://maknee.github.io/blog/):

- Analyzed DeepSeek's distributed filesystem from the ground up in a multipart series

- Built a 100k+ (1TB+) RL dataset for a popular online MOBA game by reverse engineering data format (~50k -> ~100k downloads monthly on huggingface)

- Optimizing finetuning/RL on multi-node GPUs

- Built a framework that intercepts OpenGL pipelines and re‑renders them with NVIDIA ray tracing

I'm looking to work on optimizations and performance analysis of systems. This includes: building profiling tools, building and running large scale distributed systems (training, inference, vectordb, db, compilers, etc...), discussing napkin-math & identifying bottlenecks and writing about the work.

Great to see another distributed file system open sourced! It has some interesting design decisions.

Have a couple of questions:

- How do you go about benchmarking throughput / latency of such a system? Curious if it's different compared to how other distributed filesystems benchmark their systems.

- Is network or storage the bottleneck for nodes (at least for throughput)?

  - From my observations from RDMA-based distributed filesystems, network seems to be the case.
- How does the system respond to rand / seq + reads / writes? A lot of systems struggle to scale writes. Does this matter for what workload TernFS is designed for?

- Very very interesting to go down the path of writing a kernel module instead of using FUSE or writing a native client in userspace (referring to 3FS [1])

  - Any crashes in production? And how do you go about tracking it down?

  - What's the difference in performance between using the kernel module versus using FUSE?
[1] https://github.com/deepseek-ai/3FS/blob/main/docs/design_not...

Great work! It's nice seeing another observability tool. Demo is neat and easy to navigate.

Couple of questions:

What's the overhead of tracing + logging observed by users? I see many tools being built on top of the OpenTelemetry eBPF tracer, which is nice to see.

The OpenTelemetry eBPF tracer uses sampling to capture traces. Do other types of logging in the tool use sampling as well (HTTP traces)?

When finding SLO violations, can this tool find the bug if the latency spikes do not happen frequently (ie, latency spikes happens every 5minutes - 1hour)? I'm curious if the team have had experienced such events and even if those pmax latencies matter to customers since it may not happen frequently.

I see that the flamegraph is a CPU flamegraph - does off-cpu sampling matter (Disk/Network, etc...)? Or does the CPU flamegraph provide enough for developers to solve the issue?

Thanks! Those blogs are incredibly useful. Nice work on the profiler. :)

I have multiple questions if you don’t mind answering them:

Is there significant overhead to native unwinding and python in ebpf? EBPF needs to constantly read & copy from user space to read data structures.

I ask this because unwinding with frame pointers can be done by reading without copying in userland.

Python can be ran with different engines (cpython, pypy, etc) and versions (3.7, 3.8,…) and compilers can reorganize offsets. Reading from offsets in seems me to be handwavy. Does this work well in practice/when did it fail?

"All of this is made possible with the inclusion of frame pointers in all of Meta’s user space binaries, otherwise we couldn’t walk the stack to get all these addresses (or we’d have to do some other complicated/expensive thing which wouldn’t be as efficient)"

This makes things so, so, so much easier. Otherwise, a lot of effort has to built into creating an unwinder in ebpf code, essentially porting .eh_frame cfa/ra/bp calculations.

They claim to have event profilers for non-native languages (e.g. python). Does this mean that they use something similar to https://github.com/benfred/py-spy ? Otherwise, it's not obvious to me how they can read python state.

Lastly, the github repo https://github.com/facebookincubator/strobelight is pretty barebones. Wonder when they'll update it

There's hundreds/thousands of generated one way decryption schemas for fields. However, it's not impossible to generate the decryption in another language with some effort.

Example:

A packet could be decrypted like this (the actual decryption takes more steps than this)

field1 = LOOKUPTABLE(XOR(ADD_CONST(... field2 = ADD_CONST(XOR(LOOKUPTABLE(... field3 = ADD_CONST(XOR(SUB_CONST(LOOKUPTABLE(... ...

We observe that each each operation is composed of ADD_CONST, XOR, SUB_CONST, LOOKUPTABLE and the lookup tables in the client which is ~256 bytes long.

We could extract these operations and generate a really long script in python.

Why didn't I approach it this way?

1) It's really fragile. League is an actively updated game and the decryption mechanism may change in the future. If the decryption adds another operation like MUL_CONST or DIV_CONST, I would need to account for that on my end. This is unlike the reverse engineering efforts for dead games/servers where the packets do not change.

2) I don't need to know how the decryption mechanism works. Building a game server would require decryption of packet necessary. I only need to observe game state.

As for understanding how it works, I have not put enough time/effort to give an answer. :)