14

I'm wanting to read and understand the Linux kernel's Memory Management (in particular defrag\compaction\migration).

So, I turn off optimization for size in .config (using make menuconfig of course) and compile...This leaves me with still an optimized kernel.

NOTE: When I say optimized kernel, I mean that when I use gdb and tell it next that it'll jump around. I don't want that, I want to be able to follow the code line by line just as I would with a simple hello world.

Next, I edit the Makefile and swap -O2 with -O0 and that causes things to break.

I found this, but I don't know what files I'll want because I don't know how far down the rabbit hole goes.

Is there a more generic option that I can use? I understand the concepts of memory compaction; however, I want to see where everything happens and how it exactly happens.

Community
  • 1
  • 1
SailorCire
  • 548
  • 1
  • 7
  • 24
  • How are you `gdb`ing the kernel? Do you have `kgdb` support turned on? – Eugene Sh. Mar 19 '15 at 17:46
  • @EugeneSh. I'm going through `qemu -s` in `DEBUG_KERNEL` is enabled. I'll enable `kgdb` and report the results. – SailorCire Mar 19 '15 at 17:51
  • @EugeneSh. Although I couldn't get a pipe working with qemu (gdb threw fits), there doesn't seem to be a difference. – SailorCire Mar 19 '15 at 20:36
  • 2
    While going through the question above, I'm suddenly curious, why Linux kernel has to be optimized for working properly? – jaeyong Mar 20 '15 at 04:09
  • @osgx it's not a kdb issue that I was having in regards to EugeneSh. it is a qemu issue. – SailorCire Mar 21 '15 at 13:01
  • 1
    Greg says it can't be done, thus you can't be done (in practice): https://lists.kernelnewbies.org/pipermail/kernelnewbies/2016-August/016689.html :-) Related: http://unix.stackexchange.com/questions/153788/linux-cannot-compile-without-gcc-optimizations-implications – Ciro Santilli OurBigBook.com Feb 18 '17 at 19:28

1 Answers1

17

You can't de-optimize the kernel. You might be able to de-optimize certain functions, like this:

void __attribute__((optimize("O0"))) foo(unsigned char data) {
    // unmodifiable compiler code
}

But the kernel as a whole requires -O2 because the code itself is written with assumptions that certain functions will be optimized in a certain way.

Sorry, but you really will need to know the size of the rabbit hole you want to go down.

Richard Fallon
  • 537
  • 4
  • 8
  • 2
    Can we set optimization as `-O1` instead `-O0`? – skytree Nov 01 '17 at 02:24
  • 3
    „But the kernel as a whole requires -O2 because the code itself is written with assumptions that certain functions will be optimized in a certain way.“ – That sounds ugly. – Pavel Šimerda Sep 27 '20 at 21:23