Skip to content

Instantly share code, notes, and snippets.

@azat
azat / test-syscalls-musl-static.sh
Last active July 12, 2024 12:37
How many syscalls on Linux can you have?
$ lscpu -J | jq '.lscpu.[] | select(.field == "Model name:").data' -r
AMD Ryzen Threadripper PRO 5975WX 32-Cores
$ musl-clang -static -O3 -o test-syscalls test-syscalls.cpp
$ ldd test-syscalls
not a dynamic executable
$ ./test-syscalls
gettid: 48735.848us, 20518777.061 cps, 48.736 ns per call
clock_gettime (VDSO): 20660.516us, 48401501.686 cps, 20.661 ns per call
nothing_indirect_call: 0.020us, 50000000000000.000 cps, 0.000 ns per call
nothing: 0.020us, 50000000000000.000 cps, 0.000 ns per call
@azat
azat / test-clocks.cpp
Created January 26, 2024 08:26
Test clocks (clock_gettime and RDTSC)
#include <cstdint>
#include <ctime>
#include <cerrno>
#include <iostream>
#include <utility>
uint64_t now_ns(clockid_t clock)
{
struct timespec ts;
clock_gettime(clock, &ts);
@azat
azat / test-threads-v2.cpp
Last active January 25, 2024 21:35
test pthread_create
#include <cstdint>
#include <ctime>
#include <iostream>
#include <sys/types.h>
#include <thread>
#include <list>
uint64_t now_ns()
{
struct timespec ts;
@azat
azat / lockstat.py
Created January 17, 2024 16:14
pthread lock statistics with eBPF
#!/usr/bin/env python
# Based on https://github.com/goldshtn/linux-tracing-workshop
# Based on https://gist.github.com/SaveTheRbtz/807be09f73d13b80e429d45bd1707e00
"""
The MIT License (MIT)
Copyright (c) 2017 Sasha Goldshtein
Copyright (c) 2018 Alexey Ivanov
#include <bits/time.h>
#include <stdint.h>
#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>
#include <time.h>
// https://igoro.com/archive/gallery-of-processor-cache-effects/
u_int64_t now_ns()
@azat
azat / bench-jemalloc-cache-oblivious.c
Last active December 20, 2023 19:33
Answers the question "Does cache oblivious in jemalloc still make sense?" - Yes
#include <bits/time.h>
#include <stdint.h>
#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>
#include <time.h>
// Answers the question "Does cache oblivious in jemalloc still make sense?"
// The short answer is "Yes"!
//
@azat
azat / bench-madvise.py
Last active December 16, 2023 17:33
MADV_FREE vs MADV_DONTNEED benchmark
#!/usr/bin/env python3
import mmap
import time
NUMBER_VMAS = 10000
VMA_SIZE = 1<<20
buffer = b'0' * VMA_SIZE
def make_vma():
@azat
azat / madvise.py
Last active December 16, 2023 17:34
MADV_FREE vs MADV_DONTNEED: how the memory is accounted
#!/usr/bin/env python3
# systemd-run --user --unit test-madvise ./test.py
# journalctl -u -r
import mmap
import resource
import os
def get_cgroup_id():
#include <limits.h>
#include <stddef.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
const char * arg = argv[1];
uint64_t in_host = strtoll(arg, NULL, 16);
void boost::context::detail::fiber_entry<boost::context::detail::fiber_record<boost::context::fiber, FiberStack&, Fiber::RoutineImpl<DB::AsyncTaskExecutor::Routine>>>(boost::context::detail::transfer_t);DB::AsyncTaskExecutor::Routine::operator()(std::__1::function<void ()>);DB::RemoteQueryExecutorReadContext::Task::run(std::__1::function<void (int, Poco::Timespan, DB::AsyncEventTimeoutType, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, unsigned int)>, std::__1::function<void ()>);DB::MultiplexedConnections::receivePacketUnlocked(std::__1::function<void (int, Poco::Timespan, DB::AsyncEventTimeoutType, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, unsigned int)>);DB::Connection::receivePacket();DB::Connection::receiveDataImpl(DB::NativeReader&);DB::NativeReader::read();DB::IDataType::createColumn(DB::ISerialization const&) const;DB::DataTypeNumberBase<unsigned long>::createColumn() const;operator new(unsigned long);mal