1) in isys.h differentiate betweet powerpc64 and sparc and everything else. powerpc is extremely hungry. 2) decrease the limits for the remaining architectures--I have i686 and x86_64 particularly in mind there 3) change the way the total memory is guessed. the previous method just assumed kernel binary image is around 16 MB. This can be completely off for the hungry archs. --- anaconda | 14 +++++--------- isys/isys.c | 1 + isys/isys.h | 14 ++++++++++---- isys/isys.py | 1 + iutil.py | 11 +++++++++++ loader/loadermisc.c | 7 +++++++ 6 files changed, 35 insertions(+), 13 deletions(-) diff --git a/anaconda b/anaconda index b5532b0..45e2fc1 100755 --- a/anaconda +++ b/anaconda @@ -349,12 +349,6 @@ def runVNC(): sys.stdin.readline() iutil.execConsole() -def within_available_memory(needed_ram): - # kernel binary code estimate that is - # not reported in MemTotal by /proc/meminfo: - epsilon = 15360 # 15 MB - return needed_ram < (iutil.memInstalled() + epsilon) - def check_memory(anaconda, opts, display_mode=None): if not display_mode: @@ -366,8 +360,10 @@ def check_memory(anaconda, opts, display_mode=None): extra_ram += isys.URL_INSTALL_EXTRA_RAM reason = " using this install method" + total_ram = iutil.total_memory() + needed_ram = isys.MIN_RAM + extra_ram - if not within_available_memory(needed_ram): + if needed_ram > total_ram: from snack import SnackScreen, ButtonChoiceWindow screen = SnackScreen() ButtonChoiceWindow(screen, _('Fatal Error'), @@ -382,9 +378,9 @@ def check_memory(anaconda, opts, display_mode=None): # override display mode if machine cannot nicely run X if display_mode not in ('t', 'c') and not flags.usevnc: - needed_ram = isys.MIN_GUI_RAM + extra_ram + needed_ram += isys.GUI_INSTALL_EXTRA_RAM - if not within_available_memory(needed_ram): + if needed_ram > total_ram: complain = _("You do not have enough RAM to use the graphical " "installer.") if flags.livecdInstall: diff --git a/isys/isys.c b/isys/isys.c index 409170b..ca3fb0d 100644 --- a/isys/isys.c +++ b/isys/isys.c @@ -313,6 +313,7 @@ void init_isys(void) { PyDict_SetItemString(d, "MIN_RAM", PyInt_FromLong(MIN_RAM)); PyDict_SetItemString(d, "MIN_GUI_RAM", PyInt_FromLong(MIN_GUI_RAM)); + PyDict_SetItemString(d, "GUI_INSTALL_EXTRA_RAM", PyInt_FromLong(GUI_INSTALL_EXTRA_RAM)); PyDict_SetItemString(d, "URL_INSTALL_EXTRA_RAM", PyInt_FromLong(URL_INSTALL_EXTRA_RAM)); PyDict_SetItemString(d, "EARLY_SWAP_RAM", PyInt_FromLong(EARLY_SWAP_RAM)); } diff --git a/isys/isys.h b/isys/isys.h index e3cb1fc..659e3d6 100644 --- a/isys/isys.h +++ b/isys/isys.h @@ -20,10 +20,16 @@ #ifndef H_ISYS #define H_ISYS -#define MIN_RAM 262144 // 256 MB -#define MIN_GUI_RAM 524288 // 512 MB -#define URL_INSTALL_EXTRA_RAM 131072 // 128 MB -#define EARLY_SWAP_RAM 524288 +#if defined(__powerpc64__) || defined(__sparc__) + #define MIN_RAM 1024*1024 // 1 GB + #define GUI_INSTALL_EXTRA_RAM 512*1024 // 512 MB +#else + #define MIN_RAM 256 * 1024 // 256 MB + #define GUI_INSTALL_EXTRA_RAM 128 * 1024 // 128 MB +#endif +#define URL_INSTALL_EXTRA_RAM 128 * 1024 // 128 MB +#define MIN_GUI_RAM MIN_RAM + GUI_INSTALL_EXTRA_RAM +#define EARLY_SWAP_RAM 512 * 1024 // 512 MB #define OUTPUT_TERMINAL "/dev/tty5" diff --git a/isys/isys.py b/isys/isys.py index 62010ff..cddb916 100755 --- a/isys/isys.py +++ b/isys/isys.py @@ -62,6 +62,7 @@ mountCount = {} MIN_RAM = _isys.MIN_RAM MIN_GUI_RAM = _isys.MIN_GUI_RAM +GUI_INSTALL_EXTRA_RAM = _isys.GUI_INSTALL_EXTRA_RAM URL_INSTALL_EXTRA_RAM = _isys.URL_INSTALL_EXTRA_RAM EARLY_SWAP_RAM = _isys.EARLY_SWAP_RAM diff --git a/iutil.py b/iutil.py index b2dabd1..fc22c76 100644 --- a/iutil.py +++ b/iutil.py @@ -453,6 +453,17 @@ def swapSuggestion(quiet=0): return (minswap, maxswap) +def total_memory(): + """ + Calculate how much memory this machine has in kB. Because /proc/meminfo only + gives us the MemTotal (total physical RAM minus the kernel binary code), we + need to round this up. Assuming every machine has the total RAM MB number + divisible by 128 + """ + reported_mb = memInstalled() / 1024 + mem = ((reported_mb / 128) + 1) * 128 + return mem * 1024 + ## Create a directory path. Don't fail if the directory already exists. # @param dir The directory path to create. def mkdirChain(dir): diff --git a/loader/loadermisc.c b/loader/loadermisc.c index 64e80a2..2e667f5 100644 --- a/loader/loadermisc.c +++ b/loader/loadermisc.c @@ -144,6 +144,13 @@ int totalMemory(void) { } } + /*Because /proc/meminfo only gives us the MemTotal (total physical RAM minus + the kernel binary code), we need to round this up. Assuming every machine + has the total RAM MB number divisible by 128. */ + total /= 1024; + total = (total / 128 + 1) * 128; + total *= 1024; + logMessage(INFO, "%d kB are available", total); return total; -- 1.6.6 _______________________________________________ Anaconda-devel-list mailing list Anaconda-devel-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/anaconda-devel-list