|
|
Subscribe / Log in / New account

Kernel development

Brief items

Kernel release status

The current development kernel is 4.10-rc7, released on February 5. Linus said: "Hey, look at that - it's all been very quiet, and unless anything bad happens, we're all back to the regular schedule with this being the last rc."

Stable updates: 4.9.7 and 4.4.46 were released on February 2, followed by 4.9.8 and 4.4.47 on February 4. There was also a surprise 3.18.48 update, despite that kernel's end-of-life status, on February 8.

The 4.9.9 and 4.4.48 updates are in the review process as of this writing; they can be expected on or after February 9.

Comments (none posted)

Quote of the week

Oh, if you are _stuck_ on 3.18 (/me eyes his new phone), well, I might have a plan for you, that first involves you yelling very loudly at your hardware vendor and refusing to buy from them again unless they cut this crap out. After you properly vent to them, drop me an email and let's see what we can come up with, you aren't in this sinking ship alone, and it's obvious your vendor isn't going to help out...
Greg Kroah-Hartman

Comments (7 posted)

Kernel development news

Some 4.10 Development statistics

By Jonathan Corbet
February 8, 2017
If Linus Torvalds is to be believed, the final 4.10 kernel release will happen on February 12. This development cycle has been described as "quiet", but that term really only applies if one looks at it in comparison with the record-setting 4.9 cycle. As will be seen below, there was still quite a bit of activity in this "quiet" cycle; the kernel community is never truly quiet anymore, it would seem.

As of this writing, 12,811 non-merge changesets have been pulled into the mainline repository for the 4.10 development cycle. Those changes were contributed by 1,647 developers, of whom 251 made their first-ever contribution in 4.10. These numbers put this development cycle firmly in line with its predecessors:

Release Changesets Developers
4.010,3461,458
4.111,9161,539
4.213,6941,591
4.311,8941,625
4.413,0711,575
4.512,0801,538
4.613,5171,678
4.712,2831,582
4.813,3821,597
4.916,2141,729
4.1012,8111,647

The trend toward increasing numbers of changesets clearly continues, with numbers that are now routinely higher than were seen even in the 4.0 kernel, less than two years ago.

The most active developers this time around were:

Most active 4.10 developers
By changesets
Mauro Carvalho Chehab2311.8%
Chris Wilson1931.5%
Arnd Bergmann1341.0%
Christoph Hellwig1150.9%
Ben Skeggs950.7%
Jiri Olsa920.7%
Geert Uytterhoeven860.7%
Wei Yongjun850.7%
Thomas Gleixner830.6%
Ville Syrjälä820.6%
Felipe Balbi790.6%
Javier Martinez Canillas790.6%
Masahiro Yamada770.6%
Trond Myklebust760.6%
Tvrtko Ursulin760.6%
Dan Carpenter730.6%
Sergio Paracuellos730.6%
Walt Feasel720.6%
Neil Armstrong700.5%
Eric Dumazet670.5%
By changed lines
Andi Kleen835609.7%
Tom St Denis555906.4%
Mauro Carvalho Chehab441205.1%
Edward Cree191642.2%
Zhi Wang160771.9%
Christoph Hellwig138721.6%
Takashi Iwai127071.5%
Neil Armstrong118091.4%
Chris Wilson90421.0%
Thomas Lendacky86931.0%
Bard Liao81890.9%
Tony Lindgren81830.9%
Jani Nikula80590.9%
James Smart76550.9%
Manish Rangankar74700.9%
Ard Biesheuvel69960.8%
Raghu Vatsavayi67530.8%
Ben Skeggs64820.7%
Sukadev Bhattiprolu64150.7%
Rob Clark60170.7%

Mauro Carvalho Chehab is the media subsystem maintainer, and much of his work this time around was focused there. He also, however, did a lot of work in the ongoing process of converting the kernel's documentation to Sphinx and organizing it. Chris Wilson works on the Intel i915 driver, Arnd Bergmann made fixes all over the kernel tree, Christoph Hellwig contributed a lot of changes in the block and filesystem areas, and Ben Skeggs works on the Nouveau graphics driver.

In the "changed lines" column, Andi Kleen ended up at the top of the list with a bunch of work in the perf events subsystem. Tom St. Denis added a bunch of code to the amdgpu driver, Edward Cree enhanced the sfc network driver, and Zhi Wang, once again, works in the i915 driver.

These lists are often dominated by developers working in the staging tree but, this time, nobody in the top five of either list was creating staging patches. Indeed, Sergio Paracuellos is the first staging-focused developer in the left column, while no staging work features in the right column at all. The staging tree itself was busy enough, with 957 changes in 4.10, but that work was spread across 158 developers.

Work on 4.10 was supported by 218 employers that can be identified. The list of the most active employers looks pretty much like it usually does:

Most active 4.10 employers
By changesets
Intel175213.7%
(Unknown)11989.4%
Red Hat9077.1%
(None)7656.0%
Samsung5454.3%
Linaro4963.9%
SUSE4713.7%
IBM3813.0%
(Consultant)3372.6%
AMD3162.5%
Google3062.4%
Mellanox2972.3%
Renesas Electronics2361.8%
Texas Instruments2261.8%
Huawei Technologies2021.6%
Broadcom1991.6%
Oracle1831.4%
ARM1761.4%
Linutronix1541.2%
NXP Semiconductors1511.2%
By lines changed
Intel17654920.4%
AMD749658.7%
Samsung575296.6%
Red Hat411714.8%
(Unknown)347484.0%
Linaro326703.8%
SUSE315703.6%
(None)280023.2%
IBM262383.0%
(Consultant)257443.0%
Solarflare Comm.202112.3%
MediaTek159791.8%
Cavium158121.8%
Broadcom156951.8%
BayLibre145971.7%
Mellanox127701.5%
NXP Semiconductors117921.4%
NVidia112791.3%
Texas Instruments104201.2%
Facebook88961.0%

Another way to look at the employer information is to see how many developers are associated with each company:

Companies with the most developers
CompanyDevsPct
(Unknown)34920.5%
Intel18210.7%
(None)1036.1%
Red Hat965.6%
IBM663.9%
Google533.1%
Mellanox422.5%
Linaro402.4%
Samsung372.2%
SUSE331.9%
Texas Instruments281.6%
AMD271.6%
Oracle261.5%
Code Aurora Forum261.5%
Huawei Technologies251.5%
NXP Semiconductors221.3%
ARM211.2%
Broadcom201.2%
Renesas Electronics171.0%
Rockchip150.9%

Here we see that nearly 11% of the developers who contributed to the 4.10 kernel were working for Intel. Over 20% were of unknown affiliation; they contributed 9.4% of the changes merged in this cycle.

Normal practice in these summaries is to look at the "most active employers" table above and conclude that (in this case) if all of the unknowns are working on their own time, then a maximum of just over 15% of the changes in this development cycle came from volunteers. The above table paints a slightly different picture; if, once again, the unknowns are all volunteers, then nearly 27% of the community is made up of volunteers. The difference between the numbers is almost certainly explained by the unsurprising observation that developers doing kernel work for their job will be able to spend more time on that work and, as a result, be more productive.

As of this writing, there are just over 7,500 changesets in the linux-next repository. Those changes are the beginning of what will be merged for 4.11; history suggests that this number is likely to grow significantly between now and the opening of the 4.11 merge window. Still, it seems clear that 4.11 is unlikely to set any new records for patch volume. For the definitive answer, look forward to the 4.11 summary article, to be published in 63-70 days.

Comments (1 posted)

Unscheduled maintenance for sched.h

By Jonathan Corbet
February 8, 2017
The kernel contains a large number of header files used to declare data structures and functions needed in more than one source file. Many are small and only used in a few places; others are large and frequently included. Header files have a tendency to build up over time since they often do not get as much attention as regular C source files. But there can be costs associated with bloated and neglected header files, as a current project to clean up one of the biggest ones shows.

The 0.01 kernel release contained a grand total of 31 header files, nine of which lived in include/linux. One of those, <linux/sched.h>, weighed in at all of 230 lines — the largest header file in that directory. Things have changed just a little bit since then. The upcoming 4.10 kernel contains 18,407 header files, just under 10,000 of which are intended for use outside of a specific subsystem. The 4.10 version of <linux/sched.h> is 3,674 lines, but that understates its true weight: it directly includes 50 other header files, many of which will have further includes of their own. This is not the 0.01 <linux/sched.h> anymore.

Ingo Molnar has decided that it is time to do something about this header file. A large header has its costs, especially when it is (by your editor's count) directly included into 2,500 other files in the kernel. An extra 1,000 lines of bloat expands into 2.5 million lines more code that must be compiled in a (full) kernel build, slowing compilation times significantly. A large and complex header file is also difficult to maintain and difficult to change; there are too many subtle dependencies on it throughout the kernel.

How did this file get into this condition? As Molnar put it:

The main reason why it's so large is that since Linux 0.01 it had been the Rome of the kernel: all headers lead to it, due to almost every kernel subsystem having fields embedded in task_struct. sched.h has to know about the various structure definitions of various kernel subsystems - even if the scheduler never makes direct use of 90% of those fields.

Molnar's response is a petite 89-part patch set intended to disentangle the sched.h mess. It starts by splitting out many of the more esoteric scheduler interfaces that are not needed by most users of <linux/sched.h>. This header is often included by driver code, which typically needs a small subset of the available interfaces, but which has no use for CPU frequency management, CPU hotplugging, accounting, or many other scheduler details. Code that needs the more specialized interfaces can find a set of smaller header files under include/linux/sched, but, Molnar says, 90% of users have no need for those other files.

Beyond the split-up, the patch set cleans up the interfaces with a number of other "entangled", heavily-used header files so that each can be included separately. That eliminates the need to include those headers in sched.h. There was also a certain amount of historical cruft: header files that may have been needed at one time, but which were never removed from sched.h when that need went away.

The result is a leaner sched.h that, Molnar says, can save 30 seconds on an allyesconfig kernel build. There are some details to be taken care of, though, beyond fixing source files that need the interfaces that have been split out to their own files. Since sched.h included so many other files, code that included it could get away without including the others, even if it needed them. Kernel code is supposed to explicitly include every header it needs and not rely on secondary inclusions but, if the code compiles anyway, it is easy to overlook a missing #include line. Taking those inclusions out of sched.h meant fixing up code elsewhere in the kernel that stopped compiling.

After this work is done, the resulting patch set touches nearly 1,200 files; it is not a lightweight change, in other words. Molnar suggested that the patch set should be applied at the end of the merge window in the hope of minimizing the effects on other outstanding patches. He did not specify which merge window he was targeting; 4.11 might still be possible and might be as reasonable a choice as any. Most patch sets are expected to spend some time in linux-next for wider testing, but this set almost certainly cannot go there without creating a massive patch-conflict nightmare.

There are some changes that will need to be made before this work can be merged, though. Linus Torvalds liked the end result, but was not pleased with how the patch set is organized. The changes are mixed together in a way that makes the patches hard to review and which, as was seen in a couple of cases, makes it easy for mistakes to slip in.

He suggested that, instead, the series should start by splitting out parts of sched.h, but leaving things externally the same by including the split-out files back into sched.h. These changes could thus be made without changing code elsewhere in the kernel. After that, the back-includes could be removed, one by one, with the necessary fixes being applied elsewhere. The patches in this part of the series would consist of only #include changes and would, thus, be quick to review and verify. Molnar agreed to rework the patches along these lines, though he warned that this work "will increase the patch count by at least 50%". Making the patch set easier to review (and to bisect) will, hopefully, more than make up for the increased patch count.

If this work can be completed in a convincing way before the close of the merge window, it may well make sense to apply it right away, even though the combination of big, intrusive, and new normally suggests that it may be better to wait. Causing this work to sit out for another development cycle would force much of it to be redone, and the end result may not be any more "ready" in 4.12 than it would be for 4.11. Of course, once this patch set is merged and the final loose ends tied down, the work is not yet done; there are a number of other large and messy header files in the kernel tree. The next target for a split-up may be another huge header file present since the 0.01 release: <linux/mm.h>.

Comments (none posted)

Patches and updates

Kernel trees

Linus Torvalds Linux 4.10-rc7 Feb 05
Greg KH Linux 4.9.8 Feb 04
Greg KH Linux 4.9.7 Feb 02
Greg KH Linux 4.4.47 Feb 04
Steven Rostedt 4.4.47-rt58 Feb 08
Greg KH Linux 4.4.46 Feb 02
Steven Rostedt 4.1.38-rt44 Feb 08
Greg KH Linux 3.18.48 Feb 08
Steven Rostedt 3.18.47-rt51 Feb 08
Steven Rostedt 3.12.70-rt93 Feb 08

Architecture-specific

Core kernel code

Device drivers

Anup Patel Broadcom SBA RAID support Feb 02
Mylène Josserand Add sun8i A33 audio driver Feb 02
Agustin Vega-Frias irqchip: qcom: Add IRQ combiner driver Feb 02
Chris Zhong Rockchip dw-mipi-dsi driver Feb 08
Steve Longerbeam i.MX Media Driver Feb 03
Andrey Smirnov i.MX7 PCI support Feb 07
Ramiro Oliveira Add support for Omnivision OV5647 Feb 03
Jan Glauber Cavium MMC driver Feb 06
Geert Uytterhoeven Add HD44780 Character LCD support Feb 06
Stanimir Varbanov Qualcomm video decoder/encoder driver Feb 07
Ramesh Shanmugasundaram Add V4L2 SDR (DRIF & MAX2175) driver Feb 07
lis8215@gmail.com Add the Allwinner A31/A31s PWM driver Feb 07
sean.wang@mediatek.com leds: add leds-mt6323 support on MT7623 SoC Feb 08
Vishwanathapura, Niranjana HFI Virtual Network Interface Controller (VNIC) Feb 07

Device driver infrastructure

Sakari Ailus ACPI graph support Feb 02
Christoph Hellwig automatic IRQ affinity for virtio V3 Feb 05
Jarkko Sakkinen in-kernel resource manager Feb 08

Documentation

Filesystems and block I/O

Memory management

Security-related

Djalal Harouni introduce Timgad LSM Feb 02
Tyler Hicks Improved seccomp logging Feb 03

Virtualization and containers

Marcelo Tosatti KVM CPU frequency change hypercalls Feb 02
Boris Ostrovsky PVH v2 support (domU) Feb 06

Miscellaneous

Page editor: Jonathan Corbet
Next page: Distributions>>


Copyright © 2017, Eklektix, Inc.
Comments and public postings are copyrighted by their creators.
Linux is a registered trademark of Linus Torvalds