Re: Ambient temperature spike: effect on hardware?

From: Dave (nospam_at_nowhere.com)
Date: 02/22/05

  • Next message: Dennis Grevenstein: "Re: What hardware does Solaris 10 SPARC support?"
    Date: Tue, 22 Feb 2005 04:29:25 +0000
    
    

    Stefaan A Eeckels wrote:

    > Both the e4500 and the v1280 are rated up to 104F,
    > so they're probably OK.

    Although he did say the temperature could have hit 120F, which is a lot
    higher than 104F.

    However, the Suns are usually rated at high altitude too, so if the OP
    is nearer sea level, he will get away with higher temperatures, as the
    *mass* of air flow per unit time is higher at low altitudes. As you go
    up in altitude, air becomes thinner, so is less effective in cooling. I
    believe the effect of this is not small, but significant.

    The following is a data *** for a valve (tube to Americans) capable of
    dissipating 5kW. At sea level and 25deg C is needs 180cfm to keep it
    cool (that's below 250deg C). At 5000' altitude this rises to 255cfm,
    then at 10000' it rises to 305cfm.

    At an air inlet temp of 50deg C, the airflow varies from 260cfm (at sea
    level) to 385cfm at 10,000'. (see page 3 if interested).

    http://www.g8wrb.org/data/Eimac/3CPX5000A7.pdf

    It needs very similar (255 vs 260 cfm) to keep it cool at 25deg C and
    5000' as it does at 50deg C at sea level. The effect may be less on
    something that runs cooler (like hard disks) than it does on devices
    like a ceramic vacuum tube, which are designed to run hot.

    You might find the disk has a record of the max temperature in
    non-volatile memory. You might find some software to read that.

    # luxadm stop device_file // Standard Solaris command

    will spin the disk down (do after a umount -f).

    I've got a script I wrote that spins the disks down if they get too hot.

    Below is a bit of C-code, written by someone else (I hacked it very
    little), that reports the temperature of a disk, as well as the maximum
    temperature it should be run at. It's easy to hack something together
    that will shut a system down.

    For a SPARC 20, which is old and its temperature can't be read via the
    USCSI commands, I took a brute-force approach

    http://www.g8wrb.org/useful-stuff/Sun/cooling-Sun-SPARCstation-20/index.html

    where I just remove the +5V lead with a bi-metalic strip. In the summer,
    that did trip a couple of times in my garage, where there is no air-con.
    It sounds like the OP's RAID array is not shutting down. He might like
    to add a bi-metallic strip. Brute force, but effective and simple.

    sparrow /usr/local/bin # more hdtemp.c
    #include <stdlib.h>
    #include <stdio.h>
    #include <sys/types.h>
    #include <fcntl.h>
    #include <unistd.h>
    #include <errno.h>
    #include <string.h>
    #include <sys/scsi/scsi.h>

    #define LOG_SENSE 0x4d
    #define TEMPERATURE_PAGE 0x0d

    int
    scsi_log_sense(int fd, int pagenum, uint8_t *pbuf, size_t buflen,
         size_t known_resp_len)
    {
             struct uscsi_cmd ucmd;
             struct scsi_extended_sense sense;
             uint8_t cdb[10];
             int status;

      memset(&ucmd, 0, sizeof (ucmd));
      memset(cdb, 0, sizeof (cdb));

      cdb[0] = LOG_SENSE;
      cdb[2] = 0x40 | (pagenum & 0x3f);
      cdb[7] = known_resp_len >> 8;
      cdb[8] = known_resp_len;

      ucmd.uscsi_cdb = (caddr_t)cdb;
      ucmd.uscsi_cdblen = sizeof (cdb);
      ucmd.uscsi_bufaddr = pbuf;
      ucmd.uscsi_buflen = known_resp_len;
      ucmd.uscsi_rqbuf = (caddr_t)&sense;
      ucmd.uscsi_rqlen = sizeof (sense);
      ucmd.uscsi_timeout = 15;
      ucmd.uscsi_flags = USCSI_READ;

      status = ioctl(fd, USCSICMD, &ucmd);

      return (status);
    }
    int main(int argc, char *argv[])
    {
      char *device;
      int fd;
      int err;
      uint8_t tbuf[16];

      if (argc != 2) {
                     fprintf(stderr, "usage: %s <device>\n", argv[0]);
                     exit (1);
             }
             device = argv[1];

             fd = open(device, O_RDONLY | O_NONBLOCK);
             if (fd < 0) {
                     perror(device);
                     exit(1);
             }

      memset(tbuf, 0, sizeof (tbuf));
      err = scsi_log_sense(fd, TEMPERATURE_PAGE, tbuf, sizeof (tbuf),
          sizeof (tbuf));
      if (err != 0) {
                     perror("scsi_log_sense failed - disk might not exist,
    or be powered off");
                     tbuf[9]=1;
      }
      if (tbuf[9] == 255 )
        tbuf[9]=0;
      printf("current temp = %d C, trip temp = %d C\n", tbuf[9], tbuf[15]);

      return (0);
    }


  • Next message: Dennis Grevenstein: "Re: What hardware does Solaris 10 SPARC support?"