Google Summer of Code 2024 Reports: ALTQ refactoring and NPF integration
This report was written by Emmanuel Nyarko as part of Google Summer of Code 2024.
Alternate Queuing has been of great need in the high Performance Computing space since the continuous records of unfair disruption in network quality due to the buffer bloat problem. The buffer bloat problem still persists and not completely gone but modern active queue managements have been introduced to improve the performance of networks.
ALTQ was refactored to basically improve maintainability. Duplicates were handled, some compile time errors were fixed and also performance has been improved too.
This improves the quality of developer experience on maintaining the ALTQ codebase.
The Controlled Delay (CoDel) active queue management has also been integrated into the netbsd codebase. This introduces improvements made in the area of quality of service in the netbsd operating system. CoDel was a research led collaborative work by Van Jacobness and Kathleen Nichols which was developed to manage queues under control of the minimum delay experienced by packets in the running buffer window.
As it stands now, ALTQ in NetBSD is integrated in PF packet filter. I am currently working to integrate it in the NPF packet filter. The code in NetBSD is on the constant pursuit to produce clean and maintainable code.
I'll also be working to improve quality of service in NetBSD through quality and collaborative research driven by randomness in results. As a research computer scientist, I will be working to propose new active queue managements for the NetBSD operating system to completely defeat the long lasting buffer bloat problem.
More details of the work can be found in my Google Summer of Code 2024 work submission.
[0 comments]
Project Report: Add support for chdir(2) support in posix_spawn(3)
Piyush Sachdeva finished the "add chdir support to posix_spawn(3)" project and reports about his work and experience. His code is already in -current and will be part of NetBSD 10.
Originally submitted as a proposal for GSoC, but unfortunately (due to low slot allocations) this project was not part of GSoC.
The NetBSD Foundation decided to nevertheless run the project and funded it.
[Read More] [0 comments]
wifi project status update
About a year ago the wifi renewal project got restarted. A lot things happened, but the high hopes of a quick breakthrough and fast merge to mainline did not come true.
Here is where we are today, what needs to be done and how things are planned to move on...
[Read More] [1 comment]
Support for chdir(2) in posix_spawn(3)
Piyush Sachdeva is working on an extension to NetBSD's posix_spawn system call implementation and library support.
He applied as a GSoC student, but unfortunately we only got a single slot from Google this year, so The NetBSD Foundation offered Piyush to work on it by TNF funding outside of the official GSoC.
In this post Piyush introduces himself and the project. He already started with the work...
[Read More] [1 comment]
aiomixer, X/Open Curses and ncurses, and other news
aiomixer, X/Open Curses and ncurses, and other news
[Read More] [3 comments]
The GNU GDB Debugger and NetBSD (Part 2)
The NetBSD team of developers maintains two copies of GDB:
- One in the base-system with a stack of local patches.
- One in pkgsrc with mostly build fix patches.
The base-system version of GDB (GPLv3) still relies on a set of local patches. I set a goal to reduce the local patches to bare minimum, ideally reaching no local modifications at all.
Over the past month I've reimplemented debugging support for multi-threaded programs and upstreamed the support. It's interesting to note that the old support relied on GDB tracking only a single inferior process. This caused the need to reimplement the support and be agnostic to the number of traced processes. Meanwhile the upstream developers introduced new features for multi-target tracing and a lot of preexisting code broke and needed resurrection. This affected also the code kept in the GDB basesystem version. Additionally over the past 30 days, I've also developed new CPU-independent GDB features that were for a long time on a TODO list for NetBSD.
After the past month NetBSD has now a decent and functional GDB support in the mainline. It's still not as featured as it could and CPU-specific handling will need a dedicated treatment.[Read More] [0 comments]
Improving libossaudio, and the future of OSS in NetBSD
Nia discusses recent fixes she's made to the Open Sound System compatibility layer, and explains some of the history behind OSS, and its future in NetBSD.
[Read More] [1 comment]
Wifi renewal restarted
I have started work on the phil-wifi branch, trying to modernize our net80211 and sync it with FreeBSD.
[Read More] [1 comment]
LLDB work concluded
Upstream describes LLDB as a next generation, high-performance debugger. It is built on top of LLVM/Clang toolchain, and features great integration with it. At the moment, it primarily supports debugging C, C++ and ObjC code, and there is interest in extending it to more languages.
In February 2019, I have started working on LLDB, as contracted by the NetBSD Foundation. So far I've been working on reenabling continuous integration, squashing bugs, improving NetBSD core file support, extending NetBSD's ptrace interface to cover more register types and fix compat32 issues, fixing watchpoint and threading support, porting to i386.
March 2020 was the last month of my contract. During it my primary focus was to prepare integration of LLDB into NetBSD's src tree.
[Read More] [0 comments]
LLDB now works on i386
Upstream describes LLDB as a next generation, high-performance debugger. It is built on top of LLVM/Clang toolchain, and features great integration with it. At the moment, it primarily supports debugging C, C++ and ObjC code, and there is interest in extending it to more languages.
In February 2019, I have started working on LLDB, as contracted by the NetBSD Foundation. So far I've been working on reenabling continuous integration, squashing bugs, improving NetBSD core file support, extending NetBSD's ptrace interface to cover more register types and fix compat32 issues, fixing watchpoint and threading support.
The original NetBSD port of LLDB was focused on amd64 only. In January, I have extended it to support i386 executables. This includes both 32-bit builds of LLDB (running natively on i386 kernel or via compat32) and debugging 32-bit programs from 64-bit LLDB.
[Read More] [1 comment]
GSoC 2019 Final Report: Incorporating the memory-hard Argon2 hashing scheme into NetBSD
Introduction
We successfully incorporated the Argon2 reference implementation into NetBSD/amd64 for our 2019 Google Summer of Coding project. We introduced our project here and provided some hints on how to select parameters here. For our final report, we will provide an overview of what changes were made to complete the project.
Incorporating the Argon2 Reference Implementation
The Argon2 reference implementation, available here, is available under both the Creative Commons CC0 1.0 and the Apache Public License 2.0. To import the reference implementation into src/external, we chose to use the Apache 2.0 license for this project.During our initial phase 1, we focused on building the libargon2 library and integrating the functionality into the existing password management framework via libcrypt. Toward this end, we imported the reference implementation and created the "glue" to incorporate the changes into /usr/src/external/apache. The reference implementation is found in
m2$ ls /usr/src/external/apache2/argon2 Makefile dist lib usr.bin
_MKVARS.yes= \ ... MKARGON2 \ ...
.if (defined(MKARGON2) && ${MKARGON2} != "no") SUBDIR+= argon2 .endif
/usr/bin/argon2 /usr/lib/libargon2.a /usr/lib/libargon2.so /usr/lib/libargon2.so.1 /usr/lib/libargon2.so.1.0
.if (defined(MKARGON2) && ${MKARGON2} != "no") HAVE_ARGON2=1 .endif
.if defined(HAVE_ARGON2) SRCS+= crypt-argon2.c CFLAGS+= -DHAVE_ARGON2 -I../../external/apache2/argon2/dist/phc-winner -argon2/include/ LDADD+= -largon2 .endif
Having completed the backend support, we pull Argon2 into userland tools, such as pwhash(1), in the same way as above
.if ( defined(MKARGON2) && ${MKARGON2} != "no" ) CPPFLAGS+= -DHAVE_ARGON2 .endif
m2# pwhash -A argon2id password $argon2id$v=19$m=4096,t=3,p=1$.SJJCiU575MDnA8s$+pjT4JsF2eLNQuLPEyhRA5LCFG QWAKsksIPl5ewTWNY
m1# grep -A1 testuser /etc/passwd.conf testuser: localcipher = argon2i,t=6,m=4096,p=1
m1# passwd testuser Changing password for testuser. New Password: Retype New Password: m1# grep testuser /etc/master.passwd testuser:$argon2i$v=19$m=4096,t=6,p=1$PDd65qr6JU0Pfnpr$8YOMYcwINuKHoxIV8Q0FJHG+ RP82xtmAuGep26brilU:1001:100::0:0::/home/testuser:/sbin/nologin
Testing
The argon2(1) binary allows us to easily validate parameters and encoding. This is most useful during performance testing, see here. With argon2(1), we can specify our parameterized values and evaluate both the resulting encoding and timing.m2# echo -n password|argon2 somesalt -id -p 3 -m 8 Type: Argon2id Iterations: 3 Memory: 256 KiB Parallelism: 3 Hash: 97f773f68715d27272490d3d2e74a2a9b06a5bca759b71eab7c02be8a453bfb9 Encoded: $argon2id$v=19$m=256,t=3,p=3$c29tZXNhbHQ$l/dz9ocV0nJySQ09LnSiqb BqW8p1m3Hqt8Ar6KRTv7k 0.000 seconds Verification ok
/usr/src/tests/usr.bin/argon2 tp: t_argon2_v10_hash tp: t_argon2_v10_verify tp: t_argon2_v13_hash tp: t_argon2_v13_verify cd /usr/src/tests/usr.bin/argon2 atf-run info: atf.version, Automated Testing Framework 0.20 (atf-0.20) info: tests.root, /usr/src/tests/usr.bin/argon2 .. tc-so:Executing command [ /bin/sh -c echo -n password | \ argon2 somesalt -v 13 -t 2 -m 8 -p 1 -r ] tc-end: 1567497383.571791, argon2_v13_t2_m8_p1, passed ...