Hírolvasó
Testing parallel forwarding
Hrvoje Popovski writes in with some result from his performance tests, like he did a few years ago:
I've tested Alexander Bluhm's (bluhm@) parallel ip forwarding diff and i've got some nice results. Readers should be aware that bluhm@'s diff sets NET_TASKQ=4 which means that forwarding will use 4 CPU threads and that this diff will affect only network cards that have multiqueue support (at the time of writing those cards are ix(4), ixl(4), and mcx(4). In my tests I was sending 14Mpps UDP packet over ix(4) interfaces which have 16 queues:
ix0 at pci10 dev 0 function 0 "Intel 82599" rev 0x01, msix, 16 queues ix1 at pci10 dev 0 function 1 "Intel 82599" rev 0x01, msix, 16 queuesOpenBSD box is Supermicro AS-1114S-WTRT with 24 x AMD EPYC 7413 24-Core Processor, 2650.37 MHz CPUs so this box is nice to test those 16 queues.
Brendan Gregg: Why Don't You Use ...
Kuhn: Copyleft Won't Solve All Problems, Just Some of Them
Donenfeld: Random number generator enhancements for Linux 5.17 and 5.18
[$] Driver regression testing with roadtest
Security updates for Friday
LibreSSL 3.5.1 development branch as well as 3.4.3 (stable) and 3.3.6 released
For undeadly readers, our Errata column on the right side of the web site automatically updates and as of March 15th, 2022 some of you may have already noticed that there is a new security fix related to LibreSSL. Salient excerpt from the release notes as follows:
"* A malicious certificate can cause an infinite loop. Reported by and fix from Tavis Ormandy and David Benjamin, Google."Subsequently, LibreSSL 3.5.1 (the development branch for those tracking -current/7.1-beta), 3.4.3 (the stable branch for those tracking 7.0-release) and 3.3.6 (the last supported branch for those stragglers still on OpenBSD 6.9) have been released!
Please see https://www.libressl.org/releases.html for more details and release notes specific to each version. It appears that the same bug was present in OpenSSL and has been fixed there too.
OSI: Court affirms it's false advertising to claim software is Open Source when it’s not
The court only confirmed what we already know – that “open source” is a term of art for software that has been licensed under a specific type of license, and whether a license is an OSI-approved license is a critically important factor in user adoption of the software. Had the defendants’ desire to license its software as AGPLv3-only been permissible, its claims of “100% open source” wouldn’t have been false and there would have been no false advertising. But adding the non-free Commons Clause created a different license such that the software could not be characterized as “open source” and doing so in these circumstances was unlawful false advertising.
[$] Improved response times with latency nice
Security updates for Thursday
[$] LWN.net Weekly Edition for March 17, 2022
[$] Python finally offloads some batteries
Candidates for the 2022 Debian project leader election
The next set of stable-kernel updates
Security updates for Wednesday
[$] Removing SHA-1 for signatures in Fedora
A remotely exploitable OpenSSL/LibreSSL vulnerability
Lucas De Marchi: Tracepoints and kernel modules
While debugging, it’s invaluable to be able to trace functions in the Linux kernel. There are several tools for that task: perf, ftrace (with helper tool like trace-cmd), bpftrace, etc.
For my own debug of kernel internals and in the last few years to debug the i915 module for Intel graphics, I usually use tracepoints or dynamic tracepoints (with perf probe) as the trigger for something I want to trace.
One question I get some times is “how do I trace the initial probe of a kernel module?”. At that time you (usually) don’t yet have the module loaded and as a consequence, the symbols of that module are still not available for using tracepoints. For example:
# trace-cmd list -e '^i915.*' #One thing to realize is that a lot of time we don’t want to debug the module loading, but rather the module binding to a device. These are 2 separate things, that happen in a cascade of events. It probably also adds to the confusion that the userspace tools to load the modules are not named very consistently: modprobe and insmod, and they end up calling the [f]init_module syscall.
The various buses available in the kernel have mechanisms for stopping the autoprobe (and hence binding to a device), when a module is loaded. With i915, all we have to do is to set a few things in the /sys/bus/pci/:
# echo 0 > /sys/bus/pci/drivers_autoprobe # modprobe i915With the i915 module, but not attached to any device, we are ready to attach to any tracepoint or create new dynamic probes. Let’s suppose I want to debug the i915_driver_probe()() function, and any function called by it during the initialization. This is one of the functions to initialize the GPU in i915 called when we are binding to a device.
F=i915_driver_probe echo 0 > /sys/bus/pci/drivers_autoprobe modprobe i915 cd /sys/kernel/debug/tracing cat /dev/null > trace echo $F > set_graph_function echo _printk > set_graph_notrace echo 10 > max_graph_depth echo function_graph > current_tracer echo 1 > tracing_on echo 0000:03:00.0 | tee /sys/bus/pci/drivers/i915/bind cp trace /tmp/trace.txt echo 0 > tracing_on cat /dev/null > traceWith the snippet above we will start tracing whenever function i915_driver_probe() is executed. We also set a few additional parameters: set the maximum call depth to graph, disable graphing on printk() since it’s usually not very interesting. Depending on the size of your trace you may also need to increase the buffer_size_kb to avoid the ring buffer to rotate, or have something to pump data out off the ringbuffer to a file.
Even after we enable tracing by echo’ing 1 to the tracing_on file, nothing happens as we are not automatically binding to the device. In the snippet above we bind it manually, by writting the pci slot to the /sys/bus/pci/drivers/i915/bind file. We then should start seeing the function to be traced:
# head /tmp/trace.txt # tracer: function_graph # # CPU DURATION FUNCTION CALLS # | | | | | | | 3) | i915_driver_probe [i915]() { 3) | __devm_drm_dev_alloc() { 3) | __kmalloc() { 3) | kmalloc_order_trace() { 3) | kmalloc_order() { 3) | __alloc_pages() {Another thing very useful to do is to attach to a specific tracepoint. For example, to trace the MMIO read/write we can do the commands below. Now I’m using trace-cmd directly and omitting the device bind, that we should do after start recording:
# trace-cmd record -e i915:i915_reg_rw Hit Ctrl^C to stop recording ^C # trace-cmd report ... tee-2239 [009] 778.693172: i915_reg_rw: read reg=0x51000, len=4, val=(0xc1900, 0x0) tee-2239 [009] 778.693174: i915_reg_rw: write reg=0xc6204, len=4, val=(0x10251000, 0x0) tee-2239 [009] 778.693796: i915_reg_rw: read reg=0xa26c, len=4, val=(0x4, 0x0) tee-2239 [009] 778.693805: i915_reg_rw: read reg=0xd00, len=4, val=(0x14, 0x0) tee-2239 [009] 778.693808: bprint: intel_gt_init_clock_frequency: 0000:03:00.0 Using clock frequency: 19200kHz, period: 53ns, wrap: 113816ms tee-2239 [009] 778.693817: i915_reg_rw: read reg=0x913c, len=4, val=(0xff00, 0x0) tee-2239 [009] 778.693825: i915_reg_rw: read reg=0x9144, len=4, val=(0xff00, 0x0) tee-2239 [009] 778.693908: i915_reg_rw: read reg=0x9134, len=4, val=(0xff, 0x0) tee-2239 [009] 778.693918: i915_reg_rw: read reg=0x9118, len=4, val=(0xd02, 0x0) tee-2239 [009] 778.693933: i915_reg_rw: read reg=0x9140, len=4, val=(0x30005, 0x0) tee-2239 [009] 778.693941: i915_reg_rw: read reg=0x911c, len=4, val=(0x3000000, 0x0)Red Hat fails to take WeMakeFedora.org
The Panel finds that Respondent is operating a genuine, noncommercial website from a domain name that contains an appendage ("we make") that, as noted in the Response, is clearly an identifier of contributors to Complainant’s website. In registering the domain name using an appendage that identifies Complainant’s contributors, Respondent is not attempting to impersonate Complainant nor misleadingly to divert Internet users. Rather, Respondent is using the FEDORA mark in the domain name to identify Complainant for the purpose of operating a website that contains some criticism of Complainant. Such use is generally described as "fair use" of a trademark.
The judgment concludes with a statement that this action was an abuse of the process.