After about 8 years of progress on my little hobby project[1], the Korean translation of Paul E. McKenney ‘s book, I’m marking it as completed a humble milestone[2]. It was a very fun and informative journey.
[1] https://git.kernel.org/pub/scm/linux/kernel/git/paulmck/perfbook.git/commit/?id=edbfcdee0460 [2] https://lore.kernel.org/perfbook/20240211175355.4986-1-sj38.park@gmail.com/
I stopped translation of perfbook since 2019-09-27. Because the 2nd edition of perfbook is released[0], I’m starting the translation again[1], from the scratch. The old versions are still available, of course[2].
[0] https://mirrors.edge.kernel.org/.../perfbook/perfbook.html
[1] https://github.com/sjp38/perfbook-ko_KR/commit/1c44ef30179b
[2] https://github.com/sjp38/perfbook-ko_KR-pdf
Read-copy update (RCU) can provide ideal scalability for read-mostly workloads, but some believe that it provides only poor performance for updates. This belief is due to the lack of RCU-centric update synchronization mechanisms. RCU instead works with a range of update-side mechanisms, such as locking. In fact, many developers embrace simplicity by using global locking. Logging, hardware transactional memory, or fine-grained locking can provide better scalability, but each of these approaches has limitations, such as imposing overhead on readers or poor scalability on non-uniform memory access (NUMA) systems, mainly due to their lack of NUMA-aware design principles.
I created a Youtube channel[1]. I will upload videos for the git history between each release of the Linux kernel, just for jun. I use gource[2] for the visualization for now. The scripts I use for these videos are available[3] under GPL v3. If you want, you may use the scripts for your own video generation.
[1] https://www.youtube.com/channel/UCI7qoGt1hOfCsI8hFqriYCg
[2] https://gource.io/
[3] https://github.com/sjp38/linux_development_visualization
Memory pressure is inevitable as the size of working sets is rapidly growing while the capacity of dynamic random access memory (DRAM) is not. Meanwhile, storage devices have evolved so that their speed is comparable to the speed of DRAM while their capacity scales are comparable to that of hard disk drives (HDD). Thus, hierarchial memory systems configuring DRAM as the main memory and high-end storages as swap devices will be common.
idle_page_tracking[1] is a simple, stupid toolbox for idle pages tracking. It can be used to get real working set size of a process.
Tools This section describes two tools in the box though more tools exists. You can get more description about each tool from the README in the repository[1].
userprog userprog is a sample synthetic workload for test of other tools. It interactively allocates and access specified pages in the allocated pages.
I wrote a simple, stupid program[1] that showing LKML[2] mails in terminal briefly like twitter livestream in Go language. It is just an early version and so many things to be complemented exists, though. Nevertheless, now it just works as I wanted at first.
References [1] https://github.com/sjp38/lkml
[2] https://en.wikipedia.org/wiki/Linux_kernel_mailing_list
The importance of physically contiguous memory has increased in modern computing environments, including both low- and high-end systems. Existing physically contiguous memory allocators generally have critical limitations. For example, the most commonly adopted solution, the memory reservation technique, wastes a significant amount of memory space. Scatter/Gather direct memory access (DMA) and input-output memory management units (IOMMUs) avoid this problem by utilizing additional hardware for address space virtualization. However, additional hardware means an increase in costs and power consumption, which is especially disadvantageous for small systems and they do not provide real contiguous memory.
“Is Parallel Programming is Hard, And, If So, What Can You Do About It?"[1] 은 parallel programming 분야에서 대가라 불릴만한 분으로, 이쪽 분야에서 매우 중요한 동기화 메커니즘인 RCU[2] 를 개발했으며 리눅스 커널의 RCU 메인테이너로 활동하고 있는 Paul E. McKenney[3] 가 오픈소스 방식으로 저술하고 있는, parallel programming 에 대한 책입니다.
개인적으로 이 책의 한국어 번역을 오픈소스[4]로 진행하고 있습니다. 이 프로젝트는 원저작자인 Paul 에게 공식 한국어 번역으로 인증받았습니다[5].
컨트리뷰션에 대해서도 열려 있으니, 이에 관심 있는 분은 repository 내의 README 문서의 Contribution 섹션[6] 을 참고 바랍니다.