Genoil's ZEC Miner

There ya go. I would rule that out first by loosening the timings or lowering the clock but that’s me.

Yes, if there is an error the task will close due to the -f 2 switch, and then it will wait 10 seconds and restart.

I’m going to do some other shit now and won’t be replying for a while cuz I feel like I’m spamming this already ridiculously long thread.

1 Like

i already have my initial virtual memory set to 16.5gb, any other ideas?

Depends on windows I stick to 4

Doesn’t pay enough? I feel like I’m getting $5 per 25sol/s a day? Is that not as much as I should be getting?

6 x r480 8g nitros - basically it runs for anything up to 5 minutes then drops a gpu to 0, and so on. Do you have a solid restart script?

I think this miner would be a lot better if it used the PC RAM rather than a swap file.

i’m getting better sol/s with -k zec than with -k zec zec. Most of the time zec zec also totally kills my rig.

6x Sapphire Rx480, all on usb risers. Best i get is 155-170 sol/s. 0.4 miner seems the most stable, without crashes and 0.0 sol/s on any gpus.

Hi, I’m working with 2 different bats, one is mining with one 470 and two 370 4 GB model. No problem with it but the other bat is working with one 370 2 GB model only. I tried to isolated because I thought it could help but no success. It keeps getting me 0.0S/s even when I first open genoil.

Any help would be appreciated.

Thank you.

18 sols/s with a 7850, 2gb ram, Core 2 Duo and win 7 64-bit

Thanks Genoil !

2 Likes

Thanks…

(20 …)

This is much more readable and useful version, basically the criteria for stopping the miner has been updated so that we check for different scenarios:

  • hash rate dropped below threshold n times in m seconds

  • we saw more than n rejected shares in m seconds

  • we did not see at least n accepted shares in m seconds

  • all this we check after initial period of n seconds after miner started - this to provide for initial tolerance

    import subprocess
    import threading
    import sys
    import re
    import time

    set this one for your miner

    minerCommand = “cat sample_output”

    change these optionally

    setupTime = 15 # initially in when miner starts no action will be taken in setupTime seconds
    expectedGpuHashRate = 15.0 # expected minimum S/s rate for each GPU
    gpuHashRateTime = 30 # for each gpuHashRateTime time interval in seconds
    gpuHashRateCount = 3 # if more than this num GPUs hash below expectedGpuHashRate script will terminate the miner
    rejectedShareTime = 16 # for each time interval
    rejectedShareCount = 4 # if more than this number of shares are rejected miner will be terminated
    acceptedShareTime = 120 # for each time interval
    acceptedShareCount = 1 # if less than this number of shares is accepted miner will be terminated

    do not change these

    setupCounter = 0
    gpuHashRateCounter = 0
    rejectedShareCounter = 0
    acceptedShareCounter = 0
    gpuHashRateDecrement = 0
    rejectedShareDecrement = 0
    acceptedShareDecrement = 0

    def stdout_thread(pipe):
    ‘’’ proces stdout from miner ‘’’
    global gpuHashRateCounter, rejectedShareCounter, acceptedShareCounter
    cummulativeHashRate = {‘T’: 0.0}
    avgHashSamples = 0

      while True:
          out = pipe.stdout.readline()
    
          if len(out) == 0:
              break
          else:
              sys.stdout.buffer.write(bytes('S{:2d} H{:3d} R{:3d} A{:3d}  '.format(setupCounter, gpuHashRateCounter, \
                                          rejectedShareCounter, acceptedShareCounter), 'utf-8'))
              hr = list(str(x.group()).split() for x in re.finditer(b'(?<=zec-sa#)\d: \d+(\.\d+)', out))
              hr = list(list(float(a.strip("'b:")) for a in b) for b in hr)
              hr = [{'gpu': int(h[0]), 'S/s': h[1]} for h in hr]
              hr.append({'gpu': 'T', 'S/s': sum(h['S/s'] for h in hr)})
    
              if len(hr) > 1:
                  for r in hr:
                      if r['gpu'] not in cummulativeHashRate:
                          cummulativeHashRate[r['gpu']] = 0.0
    
                      if r['gpu'] != 'T':
                          cummulativeHashRate[r['gpu']] += r['S/s']
                          cummulativeHashRate['T'] += r['S/s']
    
                      if r['S/s'] < expectedGpuHashRate:
                          gpuHashRateCounter -= gpuHashRateDecrement
                          gpuHashRateCounter = max(gpuHashRateCounter, 0)
    
                  avgHashSamples += 1
    
                  for r in hr:
                      r['avg'] = cummulativeHashRate[r['gpu']] / avgHashSamples
    
                  hr = ', '.join(["g{} h{:5.1f} a{:5.1f}".format(r['gpu'], r['S/s'], r['avg']) for r in hr])
    
                  sys.stdout.buffer.write(bytes(hr, 'utf-8'))
    
              hr = re.search(b'accepted', out)
    
              if hr:
                  acceptedShareCounter += acceptedShareDecrement
                  acceptedShareCounter = min(acceptedShareCounter, acceptedShareTime)
    
              hr = re.search(b'rejected', out)
    
              if hr:
                  rejectedShareCounter -= rejectedShareDecrement
                  rejectedShareCounter = max(rejectedShareCounter, 0)
    
              sys.stdout.buffer.write(bytes("\r", 'utf-8'))
              sys.stdout.flush()
    

    def stderr_thread(pipe):
    ‘’’ proces stderr from miner ‘’’
    while True:
    err = pipe.stderr.readline()

          if len(err) == 0:
              break
          else:
              sys.stdout.buffer.write(err)
              sys.stdout.flush()
    

    def time_thread():
    ‘’’ update Counters and check criteria for stopping the miner ‘’’
    global setupCounter, gpuHashRateCounter, rejectedShareCounter, acceptedShareCounter

      while True:
          sys.stdout.buffer.write(bytes('S{:2d} H{:3d} R{:3d} A{:3d}  \r'.format(setupCounter, gpuHashRateCounter, \
                                          rejectedShareCounter, acceptedShareCounter), 'utf-8'))
          setupCounter -= 1
          setupCounter = max(setupCounter, 0)
    
          gpuHashRateCounter += 1
          gpuHashRateCounter = min(gpuHashRateCounter, gpuHashRateTime)
    
          rejectedShareCounter += 1
          rejectedShareCounter = min(rejectedShareCounter, rejectedShareTime)
    
          acceptedShareCounter -= 1
          acceptedShareCounter = max(acceptedShareCounter, 0)
    
          if not (setupCounter or (gpuHashRateCounter and rejectedShareCounter and acceptedShareCounter)):
              sys.stdout.buffer.write(bytes("\nFault found. Restarting.\n\n", 'utf-8'))
              sys.stdout.flush()
              break
    
          sys.stdout.flush()
          time.sleep(1)
    

    def exec_command(command, cwd=None):
    ‘’’ start the miner ‘’’
    global setupCounter, gpuHashRateCounter, rejectedShareCounter, acceptedShareCounter, gpuHashRateDecrement,
    rejectedShareDecrement, acceptedShareDecrement

      if cwd is not None:
          print('[' + ' '.join(command) + '] in ' + cwd)
      else:
          print('[' + ' '.join(command) + ']')
    
      setupCounter = setupTime
      gpuHashRateCounter = gpuHashRateTime
      rejectedShareCounter = rejectedShareTime
      acceptedShareCounter = acceptedShareTime
      gpuHashRateDecrement = int(gpuHashRateTime / gpuHashRateCount)
      rejectedShareDecrement = int(rejectedShareTime / rejectedShareCount)
      acceptedShareDecrement = int(acceptedShareTime / acceptedShareCount)
    
      t_thread = threading.Thread(name='time_thread', target=time_thread)
    
      process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, cwd=cwd)
    
      out_thread = threading.Thread(name='stdout_thread', target=stdout_thread, args=(process,))
      #err_thread = threading.Thread(name='stderr_thread', target=stderr_thread, args=(process,))
    
      out_thread.start()
      #err_thread.start()
      t_thread.start()
    
      t_thread.join()
      #out_thread.join()
      #err_thread.join() # let's not wait... if time thread finished then we're done
    
      process.kill()
      time.sleep(3) # wait for it
      return 0
    

    endless loop that starts the miner

    while True:
    exec_command(minerCommand.split())

Please let me know if you think additional features should be included (rrdtool hash rate, share rate graphing for example) or if the script needs tuning… I’m currently testing it and will surely post any findings.

Cheers

Tips are welcome at BTC: 19USHJYiFCZvX5mpFSNHPKh3yvJN4yuGN

3 Likes

thank you ferth2010

very good

Thank you, this is best reset script yet. Checking it out now.

Also, +1 for simply pasting the source code and not making us download some shady file or worse an exe.

I use a bunch of cards: 7970, 290x, 280x… total 34 cards in 17 PCs… Started well with almost 1000 sol/s in supernova but after 5 hours of mining only one card still works, total 20 sol/s for 34 cards… I don’t know is it from pool or from genoil miner but this sucks! Lost a day in this shit!

I honestly don’t know because I don’t know what your issue is. What is your current pagefile usage with 1 instance? I would try to setting initial size to 1.5GB per GPU, per instance, and then add another 4-8GB for good measure. So for 6 GPUs I would try setting it to 24+GB

I’m getting no shares from nanopool, is there anyone with the same problem?

My suggestion. use all the same cards for one rig. Use same cards with same memory on one rig. If your mixing 4gb with 8gb you can only input -k zec zec (which will push your 4gb to their max while your 8gb are not hashing at max potential) I don’t know if this is part of the miner or not, I have notice that it will try to sync all your gpu’s setting together. For example in my rig of two 470 4gb and four 480 8gb. The settings for the 480 are default. My 470 settings such as fan, etc will be synced with my 480’s.

If your miners are crashing, here is another suggestion. The same settings you have for eth may or may not be optimized for zec. I have notice that the memory strap mod still play a large role. What changes is the the memory and core values. You would have to find the sweep spot for your gpu. A good starting point is to leave all your core values alone and adjust your memory to 1900 mhz and test from there.

mininghubpool is reporting the same thing. Maybe something going on with Zec blockchain?

are they ref sapphire 480 with 8gb memory? if so you should be pushing over 200 sol. U might need to mod your bios for that to happen. Just copy and paste the 1500 timing strap into the 1625, 1750, and 2000 straps. Leave your core frez stock. change your max memory to 1900 mz to start with. Each gpu should be pushing over 30 sol at the minium.

It could be that. I switched back to suprnova even though I was having problems with the 0.0S/s.

^this…

1 Like