Jump to content

LTT Folding Team's Emergency Response to Covid-19

Go to solution Solved by GOTSpectrum,

This event has ended and I recommend you guys head over to the Folding Community Board for any general folding conversation. 

 

 

1 minute ago, ConceptOW said:

I went from 387 to 568 because EOC reported 0. Nice :/

thats b/c Stanford hasn't updated for you since 4-4-2020 at 1:43 pm UTC

image.png.b6a4f17db33db5212a6d87b115b0560f.png

My EOC F@H stats | My F@H Stats | My Real time F@H Production | My Boinc Stats

My team in point Generation order:

- Bender: Corsair CARBIDE 600C | Win 11 Pro | AMD Ryzen 2600 | 32GB DDR4-3200MHz Crucial CL22 4x8GB | Noctua NH-U14H | 1TB Toshiba SSD | EVGA XC3 Ultra 3070LHR 8GB Metal BackPlate | EVGA FTW 3070FHR 8GB Metal BackPlate | Gigabyte X470 AORUS ULTRA GAMING | Seasonic FOCUS Plus 1000 Gold SSR-1000FX | 55" Samsung 120Hz 3D TV

----------------------------------------------------------------------------------------------------------------

- Scooty-Puff: Alienware M15R5 | Win 11 Pro | AMD R7-5800H | 64GB DDR4-3200 | PC711 & WD SN750 SE 1TB | 3070M | 240 Watt ACadapter

----------------------------------------------------------------------------------------------------------------

- Omicron_Persei_8: Dell G5 5511 | Ubuntu 22.04.3 LTS | Intel i7-11800 | 32GB DDR4-3200 | 1x512GB BC711 & 2TB Intel 660p | 3060M | 240 Watt ACadapter

----------------------------------------------------------------------------------------------------------------

- Calculon (MainTower): Fractal Design Meshify S2 White | Win 11 Pro | AMD Ryzen 3900x | 32GB DDR4-3200 TridentZ RGB | Noctua NH-D15 | 1x SN750SE | AMD 5700XT XFX Rx-57XT8OFF6 | Gigabyte X570 WiFi Pro | Seasonic FOCUS Plus 750 Gold SSR-750FX | 2x Dell S3422DWG & Dell U2715H & Dell U2917W

----------------------------------------------------------------------------------------------------------------

- Leela:  Fractal Design Focus G Blue | Win 11 Pro | AMD Ryzen 2600 | 32GB DDR4-3200MHz | AMD Wraith cooler | Toshiba KSG60ZMV256G | EVGA 2060 KO | Gigabyte X470 AORUS ULTRA GAMING | Seasonic FOCUS Plus 650 Gold SSR-650-FX | 

 

Pre ordered Framework 16 Batch 8 | Ryzen 7 7840HS DIY | Plan on getting the Crucial 64 or 96GB ram Depending on feedback | and a 2 or 4TB WD Black SN850x and 2TB SN770M | 180Watt ACadapter

 

Honorable Mentions:

----------------------------------------------------------------------------------------------------------------

- iZac (Server): Fractal Design Node 804 | Win 11 Pro | Ryzen 5700G | 32GB DDR4-3200MHz Crucial CL22 4x8GB | AMD Wraith Prism

5x1TB NVME | 2x2TB 7x4TB 1x 8TB SATA HDD | ASROCKRACK x470D4U | RM750i PSU | NO Monitor

----------------------------------------------------------------------------------------------------------------

- Fry: Dell XPS 9520 | Win 11 Pro | Intel i7-12700H | 15.6" 3840x2400 | 64 GB RAM DDR5-4800 | 2TB WD SN810 & 2TB Seagate FireCuda 530 | Nvidia 3050Ti | 130Watt ACadapter

----------------------------------------------------------------------------------------------------------------

Model 3 Ryzen APU | 2TB Samsung T7

 

Useful stuff i may mention

F@H Babysitter | F@H in the Dark | HFM Setup

Link to comment
Share on other sites

Link to post
Share on other sites

4 minutes ago, ConceptOW said:

I went from 387 to 568 because EOC reported 0. Nice :/

Just imagine the huge chunka points you'll get when it updates though

F@H    EOC

Link to comment
Share on other sites

Link to post
Share on other sites

3 minutes ago, LFreeman said:

Hopefully for @ConceptOW it will be before the end of the event.

it seems like recently about daily they fix something  so should be in the next 24 hrs i would think

 

  

2 minutes ago, StellarJay_TBG said:

Anyone noticed that we're closing in on team Default and soon to pass folding@evga?

 

Team Overtake Status

thing is default would be untouchable if those that don't use passkeys did lol

My EOC F@H stats | My F@H Stats | My Real time F@H Production | My Boinc Stats

My team in point Generation order:

- Bender: Corsair CARBIDE 600C | Win 11 Pro | AMD Ryzen 2600 | 32GB DDR4-3200MHz Crucial CL22 4x8GB | Noctua NH-U14H | 1TB Toshiba SSD | EVGA XC3 Ultra 3070LHR 8GB Metal BackPlate | EVGA FTW 3070FHR 8GB Metal BackPlate | Gigabyte X470 AORUS ULTRA GAMING | Seasonic FOCUS Plus 1000 Gold SSR-1000FX | 55" Samsung 120Hz 3D TV

----------------------------------------------------------------------------------------------------------------

- Scooty-Puff: Alienware M15R5 | Win 11 Pro | AMD R7-5800H | 64GB DDR4-3200 | PC711 & WD SN750 SE 1TB | 3070M | 240 Watt ACadapter

----------------------------------------------------------------------------------------------------------------

- Omicron_Persei_8: Dell G5 5511 | Ubuntu 22.04.3 LTS | Intel i7-11800 | 32GB DDR4-3200 | 1x512GB BC711 & 2TB Intel 660p | 3060M | 240 Watt ACadapter

----------------------------------------------------------------------------------------------------------------

- Calculon (MainTower): Fractal Design Meshify S2 White | Win 11 Pro | AMD Ryzen 3900x | 32GB DDR4-3200 TridentZ RGB | Noctua NH-D15 | 1x SN750SE | AMD 5700XT XFX Rx-57XT8OFF6 | Gigabyte X570 WiFi Pro | Seasonic FOCUS Plus 750 Gold SSR-750FX | 2x Dell S3422DWG & Dell U2715H & Dell U2917W

----------------------------------------------------------------------------------------------------------------

- Leela:  Fractal Design Focus G Blue | Win 11 Pro | AMD Ryzen 2600 | 32GB DDR4-3200MHz | AMD Wraith cooler | Toshiba KSG60ZMV256G | EVGA 2060 KO | Gigabyte X470 AORUS ULTRA GAMING | Seasonic FOCUS Plus 650 Gold SSR-650-FX | 

 

Pre ordered Framework 16 Batch 8 | Ryzen 7 7840HS DIY | Plan on getting the Crucial 64 or 96GB ram Depending on feedback | and a 2 or 4TB WD Black SN850x and 2TB SN770M | 180Watt ACadapter

 

Honorable Mentions:

----------------------------------------------------------------------------------------------------------------

- iZac (Server): Fractal Design Node 804 | Win 11 Pro | Ryzen 5700G | 32GB DDR4-3200MHz Crucial CL22 4x8GB | AMD Wraith Prism

5x1TB NVME | 2x2TB 7x4TB 1x 8TB SATA HDD | ASROCKRACK x470D4U | RM750i PSU | NO Monitor

----------------------------------------------------------------------------------------------------------------

- Fry: Dell XPS 9520 | Win 11 Pro | Intel i7-12700H | 15.6" 3840x2400 | 64 GB RAM DDR5-4800 | 2TB WD SN810 & 2TB Seagate FireCuda 530 | Nvidia 3050Ti | 130Watt ACadapter

----------------------------------------------------------------------------------------------------------------

Model 3 Ryzen APU | 2TB Samsung T7

 

Useful stuff i may mention

F@H Babysitter | F@H in the Dark | HFM Setup

Link to comment
Share on other sites

Link to post
Share on other sites

Oops, i commented on the blog not here XD

 

Still top 500 at least, I think thats about as high as i can realistically get with only one system to contribute

Inari - Ryzen 9 3900X, Gigabyte X570 Aorus Master, 32gb Corsair Dominator Platinum RGB DDR4-3400, eVGA RTX 3080 FTW3, Corsair Crystal 680X, 2x Corsair MP510 960gb SSD, 1x Samsung 860 EVO 1TB SSD, 2x Toshiba 5TB HDDs, Acer Predator X27, Lots of Sony camera equipment

Asus RoG Zephyrus G15 5900HS/3070/QHD On Order

Link to comment
Share on other sites

Link to post
Share on other sites

2 minutes ago, StellarJay_TBG said:

Anyone noticed that we're closing in on team Default and soon to pass folding@evga?

 

Team Overtake Status

Only another 200,000,000,000 points!

Link to comment
Share on other sites

Link to post
Share on other sites

Last check on the forum before I head off to see Mr Sandman, fold on you lot, and make sure whoever takes the crown really had to work at it!

 

Nighty night!

My Folding Stats - Join the fight against COVID-19 with FOLDING! - If someone has helped you out on the forum don't forget to give them a reaction to say thank you!

 

The only true wisdom is in knowing you know nothing. - Socrates
 

Please put as much effort into your question as you expect me to put into answering it. 

 

  • CPU
    Ryzen 9 5950X
  • Motherboard
    Gigabyte Aorus GA-AX370-GAMING 5
  • RAM
    32GB DDR4 3200
  • GPU
    Inno3D 4070 Ti
  • Case
    Cooler Master - MasterCase H500P
  • Storage
    Western Digital Black 250GB, Seagate BarraCuda 1TB x2
  • PSU
    EVGA Supernova 1000w 
  • Display(s)
    Lenovo L29w-30 29 Inch UltraWide Full HD, BenQ - XL2430(portrait), Dell P2311Hb(portrait)
  • Cooling
    MasterLiquid Lite 240
Link to comment
Share on other sites

Link to post
Share on other sites

2 minutes ago, C3Shark said:

Only another 200,000,000,000 points!

Peanuts

F@H    EOC

Link to comment
Share on other sites

Link to post
Share on other sites

3 minutes ago, GOTSpectrum said:

Last check on the forum before I head off to see Mr Sandman, fold on you lot, and make sure whoever takes the crown really had to work at it!

 

Nighty night!

Night

Link to comment
Share on other sites

Link to post
Share on other sites

Surprisingly I'm going a bit up on the list even though I only have old slow hardware. Currently I'm folding with a GTX 760, GTX 660, GTX 470, GT 640, GT 430, i5-3450 3.7GHz 4c/8t, Xeon X5677 3.6GHz 4c/8t, i3-4150 3.5GHz 2c/4t and i5-3210M 2.9GHz 2c/4t. For a while I was folding with my main PC (X5670 4.4GHz 6c/12t and GTX 960) too

soffice.bin_9qQdo7d9RA.png.7718bd1c7453af639d1ae2a564980df2.png

Intel Core i9-10900X, Asus TUF X299 Mark 1, 64GB DDR4 3200MHz, Asus GTX 1080 Strix, 2TB 970 EVO Plus, 2TB SN570, 8TB HDD, DC Assassin III, Meshify 2

Old PC: Intel Xeon X5670 6c/12t @ 4.40GHz, Asus P6X58D-E, 24GB DDR3 1600MHz, Asus GTX 1080 Strix, 500GB, 250GB & 120GB SSD, 2x 4TB & 2x 2TB HDD, Fractal Define R5

PC 2: Intel Xeon E5-2690 8c/16t @ 3.3-3.8GHz, ThinkStation S30 (C602/X79), 64GB (4x 16GB) DDR3 1600MHz, Asus GeForce GTX 960 Turbo OC, 1TB Crucial MX500

PC 3: Intel Core i7-3770 4c/8t @ 4.22-4.43GHz, Asus P8Z77-V LK, 16GB DDR3 1648MHz, Asus GTX 760 DC2 OC, 1TB & 250GB Crucial MX500 and 3x 500GB HDD

Laptop: ThinkPad T440p, Intel Core i7-4800MQ 4c/8t @ 2.7-3.7GHz, 16GB DDR3 1600MHz, GeForce GT 730M (GPU: 1006MHz MEM: 1151MHz), 2TB SSD, 14" 1080p IPS, 100Wh battery

Laptop 2: ThinkPad T450, Intel Core i7-5600U 2c/4t @ 2.6-3.2GHz, 16GB DDR3 1600MHz, Intel HD 5500, 250GB SSD, 14" 900p TN, 24Wh + 72Wh batteries

Phone: Huawei Honor 9 64GB + 256GB card Watch: Motorola Moto 360 1st Gen.

General X58 Xeon/i7 discussion

Some other PC's:

Spoiler

Some of the specs of these systems might not be up to date

PC 4: Intel Xeon X5675 6c/12t @ 3.07-3.47GHz, HP 0B4Ch (X58), 12GB DDR3 1333MHz, Asus GeForce GTX 660 DC2, 240GB & 120GB SSD, 1TB HDD

PC 5: Intel Xeon W3550 @ 3.07GHz, HP (X58), 8GB DDR3, NVIDIA GeForce GT 640 (GPU: 1050MHz MEM: 1250MHz), 120GB SSD, 2TB, 1TB and 500GB HDD

PC 6: Intel Core2 Quad Q9550 @ 3.8GHz, Asus P5KC, 8GB DDR2, NVIDIA GeForce GTX 470, 120GB SSD and 500GB HDD

HTPC: Intel Core2 Quad Q6600 @ 3.0GHz, HP DC7900SFF, 8GB DDR2 800MHz, Asus Radeon HD 6570, 240GB SSD and 3TB HDD

WinXP PC: Intel Core2 Duo E6300 @ 2.33GHz, Asus P5B, 2GB DDR2 667MHz, NVIDIA GeForce 8500 GT, 32GB SSD and 80GB HDD

RetroPC: Intel Pentium 4 HT @ 3.0GHz, Gigabyte GA-8SGXLFS, 2gb DDR1, ATi Radeon 9800 Pro, 2x 40gb HDD

My first PC: Intel Celeron 333MHz, Diamond Micronics C400, 384mb RAM, Diamond Viper V550 (NVIDIA Riva TNT), 6gb and 8gb HDD

Server: 2x Intel Xeon E5420, Dell PowerEdge 2950, 32gb DDR2, ATI ES1000, 4x 146gb SAS

Dual Opteron PC: 2x 6-core AMD Opteron 2419EE, HP XW9400, 32GB DDR2, ATI Radeon 3650, 500gb HDD

Core2 Duo PC: Intel Core2 Duo E8400, HP DC7800, 4gb DDR2, NVIDIA Quadro FX1700, 1tb and 80gb HDD

Athlon XP PC: AMD Athlon XP 2400+, MSI something, 1,5gb DDR1, ATI Radeon 9200, 40gb HDD

Thinkpad: Intel Core2 Duo T7200, Lenovo Thinkpad T60, 4gb DDR2, ATI Mobility Radeon X1400, 1tb HDD

Pentium 3 PC: Intel Pentium 3 866MHz, Asus CUSL2-C, 512mb RAM, 3DFX VooDoo 3 2000 AGP

Laptop: Dell Latitude E6430, Intel Core i5-3210M, 6gb DDR3 1600MHz , Intel HD 4000, 250gb Samsung SSD 860 EVO, 1TB WD Blue HDD

Laptop: Latitude 3380, Intel Pentium Gold 4415U 2c/4t @ 2.3GHz, 8GB DDR4, Intel HD 610, 120GB SSD, 13.3" 768p TN, 56Wh battery

 

Link to comment
Share on other sites

Link to post
Share on other sites

Really interesting to watch this and relax your eyes...

 

But do not forget to comment #223518!

 

Favebook's F@H Stats

Favebook's BOINC Stats

 

CPU i7-8700k (5.0GHz)  Motherboard Aorus Z370 Gaming 7  RAM Vengeance® RGB Pro 16GB DDR4 3200MHz  GPU  Aorus 1080 Ti

Case Carbide Series SPEC-OMEGA  Storage  Samsung Evo 970 1TB & WD Red Pro 10TB

PSU Corsair HX850i  Cooling Custom EKWB loop

 

Display Acer Predator x34 120Hz

Link to comment
Share on other sites

Link to post
Share on other sites

5 hours ago, danielocdh said:

babysitter python script

It will automatically scan all the slots and pause+unpause slots that are "Waiting On: WS Assignment" and have too high "Next Attempt"

Need to set host(s) and password(only if you use a password)

  Reveal hidden contents

 



################################################################################
##                                  options                                   ##
################################################################################
hosts = [ #quoted strings, hosts or IPs separated by comma
  'localhost',
  '192.168.0.123',
]
hostsPassword = '' #quoted string, if the host(s) don't use a password just leave it as: ''

restartLimit = 10 * 60 #in seconds, pause+unpause if next attempt to get WU is this or more
checkEvery = 2 * 60 #in seconds, do a check for all hosts every this seconds

tConTimeout = 15 #in seconds, connection timeout
tReadTimeout = 10 #in seconds, read timeout
testMode = False # if set to True: checkEvery=6 and restartLimit=0 but won't actually pause+unpause slots

################################################################################
##                                    code                                    ##
################################################################################
import json
import re
import telnetlib
import time
import datetime

if testMode:
    restartLimit = 0
    checkEvery = 6
countEvery = 1 #seconds, have to be a factor of checkEvery, default: 1
countEveryDec = max(0, str(countEvery)[::-1].find('.'))
countEveryDecStr = f'{{:.{countEveryDec}f}}'
def remSeconds(seconds):
    if seconds > 0:
        if (seconds * 10000) % (countEvery * 10000) == 0:
            secondsP = countEveryDecStr.format(seconds)
            pr(f'Next check in {secondsP} seconds', same=True)
        time.sleep(countEvery)
        seconds = round((seconds - countEvery) * 10000) / 10000
        remSeconds(seconds)

prLastLen = 0
prLastSame = False
def pr(t, indent=0, same=False, overPrev=False):
    global prLastLen, prLastSame
    if not overPrev and not same and prLastSame:
        prLastLen = 0
        print('')
    t = str(t)
    toPrint = ('  ' * indent) + t
    tLen = len(toPrint)
    print(toPrint + (' ' * max(0, prLastLen - tLen)), end='\r')
    prLastSame = same
    prLastLen = tLen
    if not same:
        print('')
        prLastLen = 0

def checkKeep():
    while (True):
        checkAll()
        remSeconds(checkEvery)

def checkAll():
    for host in hosts: check(host)
    now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    pr(f'check complete at {now}', 0, False, True)


tEnd = ['\n> '.encode('utf-8'), '\n---\n'.encode('utf-8')]
def readResult(expected, expectedResult=''):
    index = expected[0]
    readB = expected[2]
    read = readB.decode('utf-8')
    #noting
    if index < 0 or read == '': return [False, 'nothing was read']
    #expected result
    if expectedResult:
        endWith = tEnd[index].decode('utf-8')
        readStrip = read[0:-len(endWith)].strip()
        if (readStrip != expectedResult):
            return [False, f'{readB}']
    #PyON->json
    match = re.search('\nPyON (\d+) ([-_a-zA-Z\d]+)\n(.*)\n---\n', read, re.DOTALL)
    ###print('');print('');print('');print(index);print(match);print(read);print(readB);print('');
    if match:
        version = match.group(1)
        if version != '1': raise Exception('Response data version does not match')
        data = match.group(3)
        #to json
        data = re.sub('(:\s)?False', r'\1false', data)
        data = re.sub('(:\s)?True', r'\1true', data)
        data = re.sub('(:\s)?None', r'\1null', data)
        data = json.loads(data)
        return [True, data]
    #auth error
    match = re.search('\nERROR: unknown command or variable', read, re.DOTALL)
    if match:
        raise Exception('error sending command, wrong password?')
    #return read
    return [True, read]
def tnCreate(host):
    tn = telnetlib.Telnet(host, 36330, tConTimeout)
    readResult(tn.expect(tEnd, tReadTimeout))
    return tn

def sendCmd(tn, cmd, par=''):
    if cmd == 'auth':
        if hostsPassword:
            cmdStr = f'auth {hostsPassword}';
            tn.write(f'{cmdStr}\n'.encode('utf-8'))
            res = readResult(tn.expect(tEnd, tReadTimeout), 'OK')
            if not res[0]: raise Exception(f'Error with {cmd}, {res[1]}')
            return res[1]
        return True
    elif cmd == 'exit':
        cmdStr = f'{cmd}';
        tn.write(f'{cmdStr}\n'.encode('utf-8'))
        res = readResult(tn.expect(tEnd, tReadTimeout))
        if not res[0]: raise Exception(f'Error with {cmd}, {res[1]}')
        return res[1]
    elif cmd == 'slot-info' or cmd == 'queue-info':
        cmdStr = f'{cmd}';
        tn.write(f'{cmdStr}\n'.encode('utf-8'))
        res = readResult(tn.expect(tEnd, tReadTimeout))
        if not res[0]: raise Exception(f'Error with {cmd}, {res[1]}')
        return res[1]
    elif cmd == 'get-info-and-restart':
        queueData = sendCmd(tn, 'queue-info')
        slotData = sendCmd(tn, 'slot-info')
        ###
        #if type(queueData) == str: print('');print('');print('');print(queueData);print(queueData.encode('utf-8'));print('');
        #if type(slotData) == str: print('');print('');print('');print(slotData);print(slotData.encode('utf-8'));print('');
        restarted = []
        for slot in slotData:
            isStillRunning = False
            queueDl = False
            for queue in queueData:
                if queue['slot'] == slot['id']:
                    if queue['state'] == 'RUNNING': isStillRunning = True
                    if queue['state'] == 'DOWNLOAD': queueDl = queue
            if not isStillRunning and queueDl and queueDl['waitingon'] == 'WS Assignment':
                match = re.match('\s?(\d+ days?)?\s?(\d+ hours?)?\s?(\d+ mins?)?\s?([\d.]+ secs?)?', queueDl['nextattempt'])
                if match:
                    seconds = 0
                    if match.group(1): seconds += int(re.sub('[^\d.]', '', match.group(1))) * 3600 * 24
                    if match.group(2): seconds += int(re.sub('[^\d.]', '', match.group(2))) * 3600
                    if match.group(3): seconds += int(re.sub('[^\d.]', '', match.group(3))) * 60
                    if match.group(4): seconds += round(float(re.sub('[^\d.]', '', match.group(4))) * 1)
                    if seconds >= restartLimit:
                        if not testMode:
                          sendCmd(tn, 'pause', queueDl['slot'])
                          time.sleep(1)
                          sendCmd(tn, 'unpause', queueDl['slot'])
                        restarted.append([queueDl['slot'], queueDl['nextattempt']])
                else: raise Exception(f'Error with {cmd}, parsing queue nextattempt:{queueDl["nextattempt"]}')
        return restarted
    elif par and (cmd == 'pause' or cmd == 'unpause'):
        cmdStr = f'{cmd} {par}';
        tn.write(f'{cmdStr}\n'.encode('utf-8'))
        res = readResult(tn.expect(tEnd, tReadTimeout))
        if not res[0]: raise Exception(f'Error with {cmd}, {res[1]}')
        return res[1]
    else : return False

def check(host):
    st = time.time()
    pr(f'checking {host}', 1, True)
    try:
        tn = tnCreate(host)
        sendCmd(tn, 'auth')
        restarted = sendCmd(tn, 'get-info-and-restart')
        if len(restarted):
            pr(f'{host}: restarted {len(restarted)} slot{"s" if len(restarted) > 1 else ""}: ' + ', '.join(map(lambda item: '' + (' with '.join(item)), restarted)), 1, False, True)
        sendCmd(tn, 'exit')
        ed = time.time()
        time.sleep(max(0, 1 - (ed - st)))
    except Exception as err:
        pr(f'{host} error: {err}', 1, False, True)

checkKeep()

 

 

Looks like this when running:

ubu.png.dcef9a0ae7cddf57aa326276700f68ad.png

 

It access the clients API in a similar(much simpler) way that FAHControl or HFM.NET do

It won't restart slots that are still running and trying to download a new WU at the same time.

Tested on python 3 on windows (3.8.2)and ubuntu (3.6.9)

Let me know if you find any issues, it was stable for me after a few hours

 

Hey there, I'm not really familiar with python or code in general. How would I be able to put this code to use on my pc? I hate seeing the two slots I have waiting on assignments for hours on end

Link to comment
Share on other sites

Link to post
Share on other sites

Missed the sign-up apparently, but started my home server back up about a week ago.  It has been getting nothing but COVID19 related CPU jobs.  It's just an old 6 core AMD Phenom II running on Debian Linux, and F@H only uses 4 of the cores, but I figure every little bit helps, 🙂

 

https://folding.extremeoverclocking.com/user_summary.php?s=&u=830823

Link to comment
Share on other sites

Link to post
Share on other sites

~5.4 million points and ~200 work units since March 21st-ish. Not bad. If I could keep the machines fed steadily I'd be doing well.

 

What's a good $/Watt/PPD GPU to pair with my Xeon X3470? The GTX 650 in there is a wee bit slow. Something around the $100-150 USD price point, used is fine. In the future I'll probably toss it in a box with a Haswell Celeron (20W) and park it in the corner of the basement running Linux on a very small SSD to just fold all the time so being power efficient is good if it's running 24/7.

Link to comment
Share on other sites

Link to post
Share on other sites

Decided to go ahead and throw it on my Windows gaming/HTPC so it can also take advantage of not only more and faster CPU cores (8 cores available, appears to be using 6, but the RX 480 GPU as well.

image.thumb.jpeg.e79c81da189af764fb5317b419c84a4d.jpeg

Link to comment
Share on other sites

Link to post
Share on other sites

3 minutes ago, Gerowen said:

Decided to go ahead and throw it on my Windows gaming/HTPC so it can also take advantage of not only more and faster CPU cores (8 cores available, appears to be using 6, but the RX 480 GPU as well.

 

If you're not currently, consider undervolting your 480 a little bit with overdriventool, you'll get quite a bit better efficiency out of it. My RX580 is running around 1400mhz at around 1150mv core (I need to check actual voltage after droop) using around 125W while folding. I wish there were tools like that available for Linux, sadly you'd need to mod/flash the BIOS to do that for running Linux with anything other than the stock configuration, as far as I know. I guess I have a research project!

Link to comment
Share on other sites

Link to post
Share on other sites

5 hours ago, danielocdh said:

babysitter python script

It will automatically scan all the slots and pause+unpause slots that are "Waiting On: WS Assignment" and have too high "Next Attempt"

Need to set host(s) and password(only if you use a password)

  Reveal hidden contents

 



################################################################################
##                                  options                                   ##
################################################################################
hosts = [ #quoted strings, hosts or IPs separated by comma
  'localhost',
  '192.168.0.123',
]
hostsPassword = '' #quoted string, if the host(s) don't use a password just leave it as: ''

restartLimit = 10 * 60 #in seconds, pause+unpause if next attempt to get WU is this or more
checkEvery = 2 * 60 #in seconds, do a check for all hosts every this seconds

tConTimeout = 15 #in seconds, connection timeout
tReadTimeout = 10 #in seconds, read timeout
testMode = False # if set to True: checkEvery=6 and restartLimit=0 but won't actually pause+unpause slots

################################################################################
##                                    code                                    ##
################################################################################
import json
import re
import telnetlib
import time
import datetime

if testMode:
    restartLimit = 0
    checkEvery = 6
countEvery = 1 #seconds, have to be a factor of checkEvery, default: 1
countEveryDec = max(0, str(countEvery)[::-1].find('.'))
countEveryDecStr = f'{{:.{countEveryDec}f}}'
def remSeconds(seconds):
    if seconds > 0:
        if (seconds * 10000) % (countEvery * 10000) == 0:
            secondsP = countEveryDecStr.format(seconds)
            pr(f'Next check in {secondsP} seconds', same=True)
        time.sleep(countEvery)
        seconds = round((seconds - countEvery) * 10000) / 10000
        remSeconds(seconds)

prLastLen = 0
prLastSame = False
def pr(t, indent=0, same=False, overPrev=False):
    global prLastLen, prLastSame
    if not overPrev and not same and prLastSame:
        prLastLen = 0
        print('')
    t = str(t)
    toPrint = ('  ' * indent) + t
    tLen = len(toPrint)
    print(toPrint + (' ' * max(0, prLastLen - tLen)), end='\r')
    prLastSame = same
    prLastLen = tLen
    if not same:
        print('')
        prLastLen = 0

def checkKeep():
    while (True):
        checkAll()
        remSeconds(checkEvery)

def checkAll():
    for host in hosts: check(host)
    now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    pr(f'check complete at {now}', 0, False, True)


tEnd = ['\n> '.encode('utf-8'), '\n---\n'.encode('utf-8')]
def readResult(expected, expectedResult=''):
    index = expected[0]
    readB = expected[2]
    read = readB.decode('utf-8')
    #noting
    if index < 0 or read == '': return [False, 'nothing was read']
    #expected result
    if expectedResult:
        endWith = tEnd[index].decode('utf-8')
        readStrip = read[0:-len(endWith)].strip()
        if (readStrip != expectedResult):
            return [False, f'{readB}']
    #PyON->json
    match = re.search('\nPyON (\d+) ([-_a-zA-Z\d]+)\n(.*)\n---\n', read, re.DOTALL)
    ###print('');print('');print('');print(index);print(match);print(read);print(readB);print('');
    if match:
        version = match.group(1)
        if version != '1': raise Exception('Response data version does not match')
        data = match.group(3)
        #to json
        data = re.sub('(:\s)?False', r'\1false', data)
        data = re.sub('(:\s)?True', r'\1true', data)
        data = re.sub('(:\s)?None', r'\1null', data)
        data = json.loads(data)
        return [True, data]
    #auth error
    match = re.search('\nERROR: unknown command or variable', read, re.DOTALL)
    if match:
        raise Exception('error sending command, wrong password?')
    #return read
    return [True, read]
def tnCreate(host):
    tn = telnetlib.Telnet(host, 36330, tConTimeout)
    readResult(tn.expect(tEnd, tReadTimeout))
    return tn

def sendCmd(tn, cmd, par=''):
    if cmd == 'auth':
        if hostsPassword:
            cmdStr = f'auth {hostsPassword}';
            tn.write(f'{cmdStr}\n'.encode('utf-8'))
            res = readResult(tn.expect(tEnd, tReadTimeout), 'OK')
            if not res[0]: raise Exception(f'Error with {cmd}, {res[1]}')
            return res[1]
        return True
    elif cmd == 'exit':
        cmdStr = f'{cmd}';
        tn.write(f'{cmdStr}\n'.encode('utf-8'))
        res = readResult(tn.expect(tEnd, tReadTimeout))
        if not res[0]: raise Exception(f'Error with {cmd}, {res[1]}')
        return res[1]
    elif cmd == 'slot-info' or cmd == 'queue-info':
        cmdStr = f'{cmd}';
        tn.write(f'{cmdStr}\n'.encode('utf-8'))
        res = readResult(tn.expect(tEnd, tReadTimeout))
        if not res[0]: raise Exception(f'Error with {cmd}, {res[1]}')
        return res[1]
    elif cmd == 'get-info-and-restart':
        queueData = sendCmd(tn, 'queue-info')
        slotData = sendCmd(tn, 'slot-info')
        ###
        #if type(queueData) == str: print('');print('');print('');print(queueData);print(queueData.encode('utf-8'));print('');
        #if type(slotData) == str: print('');print('');print('');print(slotData);print(slotData.encode('utf-8'));print('');
        restarted = []
        for slot in slotData:
            isStillRunning = False
            queueDl = False
            for queue in queueData:
                if queue['slot'] == slot['id']:
                    if queue['state'] == 'RUNNING': isStillRunning = True
                    if queue['state'] == 'DOWNLOAD': queueDl = queue
            if not isStillRunning and queueDl and queueDl['waitingon'] == 'WS Assignment':
                match = re.match('\s?(\d+ days?)?\s?(\d+ hours?)?\s?(\d+ mins?)?\s?([\d.]+ secs?)?', queueDl['nextattempt'])
                if match:
                    seconds = 0
                    if match.group(1): seconds += int(re.sub('[^\d.]', '', match.group(1))) * 3600 * 24
                    if match.group(2): seconds += int(re.sub('[^\d.]', '', match.group(2))) * 3600
                    if match.group(3): seconds += int(re.sub('[^\d.]', '', match.group(3))) * 60
                    if match.group(4): seconds += round(float(re.sub('[^\d.]', '', match.group(4))) * 1)
                    if seconds >= restartLimit:
                        if not testMode:
                          sendCmd(tn, 'pause', queueDl['slot'])
                          time.sleep(1)
                          sendCmd(tn, 'unpause', queueDl['slot'])
                        restarted.append([queueDl['slot'], queueDl['nextattempt']])
                else: raise Exception(f'Error with {cmd}, parsing queue nextattempt:{queueDl["nextattempt"]}')
        return restarted
    elif par and (cmd == 'pause' or cmd == 'unpause'):
        cmdStr = f'{cmd} {par}';
        tn.write(f'{cmdStr}\n'.encode('utf-8'))
        res = readResult(tn.expect(tEnd, tReadTimeout))
        if not res[0]: raise Exception(f'Error with {cmd}, {res[1]}')
        return res[1]
    else : return False

def check(host):
    st = time.time()
    pr(f'checking {host}', 1, True)
    try:
        tn = tnCreate(host)
        sendCmd(tn, 'auth')
        restarted = sendCmd(tn, 'get-info-and-restart')
        if len(restarted):
            pr(f'{host}: restarted {len(restarted)} slot{"s" if len(restarted) > 1 else ""}: ' + ', '.join(map(lambda item: '' + (' with '.join(item)), restarted)), 1, False, True)
        sendCmd(tn, 'exit')
        ed = time.time()
        time.sleep(max(0, 1 - (ed - st)))
    except Exception as err:
        pr(f'{host} error: {err}', 1, False, True)

checkKeep()

 

 

Looks like this when running:

ubu.png.dcef9a0ae7cddf57aa326276700f68ad.png

 

It access the clients API in a similar(much simpler) way that FAHControl or HFM.NET do

It won't restart slots that are still running and trying to download a new WU at the same time.

Tested on python 3 on windows (3.8.2)and ubuntu (3.6.9)

Let me know if you find any issues, it was stable for me after a few hours

 

Wish I had had this a week ago! I've had so many times where I come back to my computer & it wasn't doing any folding (for possibly multiple hours at a time).

Thank you for this. : ) I now have this set as a startup program on my computer!

Link to comment
Share on other sites

Link to post
Share on other sites

Guest
This topic is now closed to further replies.


×