[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: PowerMac G5 fans run out of control with kernel 4.17.0-3-powerpc64 but not with 4.16.0-1-powerpc64



On 08/25/2018 04:10 AM, Rick Thomas wrote:

On Aug 24, 2018, at 9:26 PM, Dennis Clarke <dclarke@blastwave.org> wrote:
On 08/24/2018 09:31 PM, Rick Thomas wrote:
I just loaded the latest Debian-ports powerpc64 installer ...

From the better late than never pile.

So I built and installed 4.18.12 twice. Documented what I was doing and
went slowly step by step. I really don't know what to do in order to
create these so called "deb" packages that I could hand to you but I am
guessing that a tarball made from the root level would work. Worth a try.

nix$ cat /proc/version
Linux version 4.18.12-genunix (dclarke@nix) (gcc version 8.1.0 (genunix Sat May 12 22:02:47 UTC 2018)) #1 SMP Sat Oct 6 06:06:01 GMT 2018

nix$ ls -lapb /boot | grep "4.18.12"
-rw-r--r--  1 root root    167467 Oct  6 16:51 config-4.18.12-genunix
lrwxrwxrwx 1 root root 26 Oct 6 16:55 initrd.img -> initrd.img-4.18.12-genunix
-rw-r--r--  1 root root   4311150 Oct  6 16:52 initrd.img-4.18.12-genunix
-rw-r--r--  1 root root   4457845 Oct  6 16:51 System.map-4.18.12-genunix
lrwxrwxrwx 1 root root 23 Oct 6 16:51 vmlinux -> vmlinux-4.18.12-genunix
-rw-r--r--  1 root root 213614368 Oct  6 16:51 vmlinux-4.18.12-genunix

nix$ ls -lap /lib/modules/
total 20
drwxr-xr-x  5 root root 4096 Oct  7 01:08 ./
drwxr-xr-x 16 root root 4096 Jul 26 18:26 ../
drwxr-xr-x  3 root root 4096 Mar 28  2018 4.15.0-2-powerpc64/
drwxr-xr-x  3 root root 4096 Oct  3 15:44 4.18.11-genunix/
drwxr-xr-x  3 root root 4096 Oct  6 16:47 4.18.12-genunix/
nix$

What else is needed ?   I don't know.

If you are interested then I can make up an xz compressed tarball and
stick it on a website somewhere. Along with a really verbose readme file
that shows what I did step by step.

I will say that I don't see any difference in the windfarm modules
regardless of that patch.  Also I did go with the default 64k page size
and I also tried 4k page size and there really isn't any difference in
performance. I guess the 4k page size results in better granularity but
otherwise it was just an experiment.

nix$ ./pgm/C/pagesize/pagesize
-------------------------------------------------------------
        system name = Linux
          node name = nix
            release = 4.18.12-genunix
            version = #1 SMP Sat Oct 6 06:06:01 GMT 2018
            machine = ppc64
-------------------------------------------------------------
         sysconf_phys = 2023070
       sysconf_avphys = 1964405
                 pgsz = 4096
                 phys = 2023070
               avphys = 1964405
Total physical memory may be   8286494720 bytes.
     Available memory may be   8046202880 bytes.
get_nprocs() claims 4 processors are available.
get_nprocs_conf() claims 4 processors are configured.
sysconf(_SC_NPROCESSORS_ONLN) reports 4 processors are available.
sysconf(_SC_NPROCESSORS_CONF) reports 4 processors are configured.
nix$


Dennis

nix$ cat ./pgm/C/pagesize/pagesize.c

#define _XOPEN_SOURCE 600

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <errno.h>
#include <unistd.h>
#include <limits.h>
#include <locale.h>
#include <sys/sysinfo.h>
#include <sys/utsname.h>

int main(int argc, char *argv[])
{
    int errno, pgsz, procs, avprocs;
    long int phys, avphys;
    long int sysconf_phys, sysconf_avphys, sysconf_pgsz;
    long int sysconf_procs, sysconf_avprocs;
    struct utsname uname_data;

    setlocale( LC_MESSAGES, "C" );
    if ( uname( &uname_data ) < 0 ) {
        fprintf ( stderr,
                 "WARNING : Could not attain system uname data.\n" );
        perror ( "uname" );
    } else {
        printf ( "-------------------------------" );
        printf ( "------------------------------\n" );
        printf ( "        system name = %s\n", uname_data.sysname );
        printf ( "          node name = %s\n", uname_data.nodename );
        printf ( "            release = %s\n", uname_data.release );
        printf ( "            version = %s\n", uname_data.version );
        printf ( "            machine = %s\n", uname_data.machine );
        printf ( "-------------------------------" );
        printf ( "------------------------------" );
    }
    printf ("\n");

    sysconf_phys = sysconf(_SC_PHYS_PAGES);
    if (sysconf_phys<0){
        fprintf(stderr,
            "WARNING : Could not attain sysconf(_SC_PHYS_PAGES).\n");
        perror("sysconf(_SC_PHYS_PAGES)");
        errno = 0;
    }else{
        printf("         sysconf_phys = %i\n", sysconf_phys);
    }

    sysconf_avphys = sysconf(_SC_AVPHYS_PAGES);
    if (sysconf_avphys<0){
        fprintf(stderr,
            "WARNING : Could not attain sysconf(_SC_PHYS_PAGES).\n");
        perror("sysconf(_SC_AVPHYS_PAGES)");
        errno = 0;
    }else{
        printf("       sysconf_avphys = %i\n", sysconf_avphys);
    }

    pgsz = getpagesize();
    if (pgsz<0){
        fprintf(stderr,
                      "WARNING : Could not attain getpagesize().\n");
        perror("getpagesize()");
        errno = 0;
    }else{
        printf("                 pgsz = %i\n", pgsz);
    }

    phys = get_phys_pages();
    if (phys<0){
        fprintf(stderr,
                   "WARNING : Could not attain get_phys_pages().\n");
        perror("get_phys_pages()");
        errno = 0;
    }else{
        printf("                 phys = %i\n", phys);
    }

    avphys = get_avphys_pages();
    if (avphys<0){
        fprintf(stderr,
                  "WARNING : Could not attain get_avphys_pages().\n");
        perror("get_avphys_pages()");
        errno = 0;
    }else{
        printf("               avphys = %i\n", avphys);
    }
    /* may as well guess at the available and physical memory */
    printf("Total physical memory may be %12ld bytes.\n",
                                       sysconf_phys * (long int)pgsz );
    printf("     Available memory may be %12ld bytes.\n",
                                     sysconf_avphys * (long int)pgsz );
    /* would be nice to get swap amount but I have no idea on that */

    avprocs = get_nprocs();
    printf("get_nprocs() claims %i processors are available.\n",
                                                             avprocs );

    procs = get_nprocs_conf();
    printf("get_nprocs_conf() claims %i processors are configured.\n",
                                                               procs );

    sysconf_avprocs = sysconf(_SC_NPROCESSORS_ONLN);
    if (sysconf_avprocs<0){
        fprintf(stderr,
        "WARNING : Could not attain sysconf(_SC_NPROCESSORS_ONLN).\n");

        perror("sysconf(_SC_NPROCESSORS_ONLN)");
        errno = 0;
    }else{
        printf("sysconf(_SC_NPROCESSORS_ONLN) reports %i",
                                                     sysconf_avprocs );
        printf(" processors are available.\n");
    }

    sysconf_procs = sysconf(_SC_NPROCESSORS_CONF);
    if (sysconf_procs<0){
        fprintf(stderr,
        "WARNING : Could not attain sysconf(_SC_NPROCESSORS_CONF).\n");

        perror("sysconf(_SC_NPROCESSORS_CONF)");
        errno = 0;
    }else{
        printf("sysconf(_SC_NPROCESSORS_CONF) reports %i",
                                                       sysconf_procs );
        printf(" processors are configured.\n");
    }

    return EXIT_SUCCESS;
}


Reply to: