Ich hatte das weiter oben schon mal kommentiert. Könnte irgendwo ein Fehler sein, dass eine Pagesize in eine Stück Code hart codiert ist, wo eigentlich ein dynamischer Wert genommen werden sollte, normalerweise in C oder C++ nimmt man sysconf(_SC_PAGESIZE) oder getpagesize(). Das sollten (zumindest nach meinem Verständnis) auch alle Bibliotheken oder Toolketten so machen.
Hat man 16k hart codiert, dann wird das normalerweise auch auf 4k Systemen funktionieren, da halt ein alignment auf 16k immer auch 4k aligned ist bzw. halt ein dur 16 teilbarer Wert auch durch 4k teilbar ist. Aber nicht anders herum. (z.B. der offset Parameter der mmap() Funktion muss ein Vielfaches der page size sein) Früher wurde das Makro "PAGE_SIZE" mit statischem (aber konfigurierbarem) Wert verwendet. Wenn Code das nutzt, muss er neu compiliert werden wenn man von PS 4k auf 16k wechselt.
Ich meine, zumindest früher konnte man Redhat Linux per Konfiguration mit Huge Page Tables betreiben. Kann mich nicht erinnern, dass dafür was neu installiert werden musste. Hatte darunter programmiert, und ein Binary Executable hat immer gereicht für beide Konfigs.