Ok, this is bad and needs to be prioritized:

1 second of Netrek on my Swift server: 970 packets (TCP, WriteAndFlush with every function)
1 second of Netrek on pickled.netrek.org <http://pickled.netrek.org/> using UDP: 11 packets 
1 second of Netrek on pickled.netrek.org <http://pickled.netrek.org/> using TCP: 24 packets

Ouch.  I’ll get on that.

Darrell


> On Jul 17, 2020, at 8:43 PM, Darrell Root <darrellroot at mac.com> wrote:
> 
> James Cameron wrote:
> 
> > As a wild guess, you may not have disabled the Nagle algorithm on the TCP socket?
> 
> You scored a point by making me open up my copy of TCP/IP Illustrated volume 1 by Richard Stevens ;-)
> 
> I have not disabled it.  But I also have not gotten to a bunch of other packet optimizations.  Every function which sends data currently ends with a WriteAndFlush (guaranteeing correctness).  I’m confident I can aggregate my SP_PLAYER sends with Writes and then execute one WriteAndFlush each every 0.1 seconds.
> 
> I also haven’t checked the tcpdumps to see how many packets per second my server is sending to a client versus the existing server.
> 
> I will get to these optimizations.
> 
> For now, the COW blinking may have been CPU related.  My Linux VM is running on a 2013 iMac.  I’d love to have an observation of how well/poorly my server looks from Windows and Linux clients which are not running in VM’s.  For reference, my netrek.networkmom.net <http://netrek.networkmom.net/> server is located in the SFO region.
> 
> Good progress today on command-line-arguments and logging, which were necessary infrastructure for tomorrow's “genocide logic” and “user database” day.
> 
> Darrell
> 
>> On Jul 16, 2020, at 4:04 PM, James Cameron <quozl at laptop.org <mailto:quozl at laptop.org>> wrote:
>> 
>> As a wild guess, you may not have disabled the Nagle algorithm on the
>> TCP socket?  Aggregation and delay of data in the outgoing queue does
>> cause an effect that can be reported as "blinking".
>> 
>> On Thu, Jul 16, 2020 at 03:27:18PM -0700, Darrell Root wrote:
>>> Thank you!  This bug is now resolved thanks to your help and Bill Balcerski’s
>>> bug report!
>>> 
>>> It looks like the explosion gets animated in the EXPLODE state.  Then there is
>>> a pause in the DEAD state allowing torpedoes to run out.  But then I needed to
>>> migrate the user to the OUTFIT state to get back to the “select ship/quit”
>>> screen.  I chose 1 second for each of those two states.
>>> 
>>> I think most of the “client blinking” in the x86 client (that Bill reported) is
>>> resolved.  But I’m seeing a huge quantity of “stuff blinking” on the COW client
>>> running in a Parallels VM on my Mac.
>>> 
>>> I’m not sure whether the “stuff blinking” is an artifact of the Parallels VM or
>>> a real problem.  In the x86 client case, I was sending unnecessary updates to
>>> the client, resulting in continuous redraws.
>>> 
>>> If someone could pop up a COW client on a native Linux box, point it at [1]
>>> netrek.networkmom.net <http://netrek.networkmom.net/>, and report if they see planets/ships on the screen
>>> blinking too much, I’d appreciate it.
>>> 
>>> Darrell
>>> 
>>>    On Jul 16, 2020, at 2:19 PM, James Cameron <[2]quozl at laptop.org <mailto:quozl at laptop.org>> wrote:
>>> 
>>>    Looking at Gytha's __init__.py which contains a paste of the protocol
>>>    definition;
>>> 
>>>    SP_PSTATUS, indicates PDEAD state
>>>    client animates explosion
>>> 
>>>    SP_PSTATUS, indicates POUTFIT state
>>>    clients returns to team selection window
>>> 
>>>    Looking at Gytha's PhaseFlight class, the event loop exits on POUTFIT
>>>    "# no longer flying".
>>> 
>>>    Looking at Gytha's nt_play_a_slot "keep playing on a server, until
>>>    user chooses a quit option, or a list option to return to the server
>>>    list", play continues until POUTFIT.
>>> 
>>>    On Thu, Jul 16, 2020 at 01:55:03PM -0700, Darrell Root wrote:
>>> 
>>>        Netrek-dev,
>>> 
>>>        My Swift Netrek server has a compatibility problem with COW and Windows
>>>        clients.
>>> 
>>>        When a person dies, the clients do not pop up the “choose team” screen.
>>>         So
>>>        people have to disconnect to respawn.
>>>        The clients also do not show the “you were killed by [WEAPON] from
>>>        [PLAYER]
>>>        message when connected to my server.
>>> 
>>>        What message/flag sent from the server triggers that window / message?
>>> 
>>>        I was assuming it was the whydead and whodead fields in the SP_YOU, but
>>>        so far
>>>        I haven’t been able to get it working.
>>> 
>>>        Here’s a sequence of SP_YOU messages from [1][3]pickled.netrek.org <http://pickled.netrek.org/>.
>>>         These can be
>>>        assumed to be correct.  I’ve put the death and respan in BOLD
>>> 
>>>        "Received SP_YOU 12 1 hostile 13 war 0 armies 0 tractor 0 flags
>>>        33562624 damage
>>>        64 shieldStrength 100 fuel 10000 engineTemp 0 weaponsTemp 0 whyDead 0
>>>        whodead
>>>        6"
>>>        "Received SP_YOU 12 1 hostile 13 war 0 armies 0 tractor 0 flags
>>>        33562624 damage
>>>        103 shieldStrength 100 fuel 10000 engineTemp 0 weaponsTemp 0 whyDead 2
>>>        whodead
>>>        6"
>>>        "Received SP_YOU 12 1 hostile 13 war 0 armies 0 tractor 0 flags
>>>        33562624 damage
>>>        103 shieldStrength 100 fuel 9980 engineTemp 5 weaponsTemp 0 whyDead 2
>>>        whodead
>>>        6"
>>>        "Received SP_YOU 12 1 hostile 13 war 0 armies 0 tractor 0 flags
>>>        33562624 damage
>>>        103 shieldStrength 100 fuel 9960 engineTemp 10 weaponsTemp 0 whyDead 2
>>>        whodead
>>>        6"
>>>        "Received SP_YOU 12 1 hostile 13 war 0 armies 0 tractor 0 flags
>>>        33562624 damage
>>>        103 shieldStrength 100 fuel 9940 engineTemp 15 weaponsTemp 0 whyDead 2
>>>        whodead
>>>        6"
>>>        "Received SP_YOU 12 1 hostile 13 war 0 armies 0 tractor 0 flags
>>>        33562624 damage
>>>        103 shieldStrength 100 fuel 9924 engineTemp 19 weaponsTemp 0 whyDead 2
>>>        whodead
>>>        6"
>>>        "Received SP_YOU 12 1 hostile 13 war 0 armies 0 tractor 0 flags
>>>        33562624 damage
>>>        103 shieldStrength 100 fuel 9908 engineTemp 23 weaponsTemp 0 whyDead 2
>>>        whodead
>>>        6"
>>>        "Received SP_YOU 12 1 hostile 13 war 0 armies 0 tractor 0 flags
>>>        33562624 damage
>>>        103 shieldStrength 100 fuel 9892 engineTemp 27 weaponsTemp 0 whyDead 2
>>>        whodead
>>>        6"
>>>        "Received SP_YOU 12 1 hostile 13 war 0 armies 0 tractor 0 flags
>>>        33562624 damage
>>>        103 shieldStrength 100 fuel 9876 engineTemp 31 weaponsTemp 0 whyDead 2
>>>        whodead
>>>        6"
>>>        "Received SP_YOU 12 1 hostile 13 war 0 armies 0 tractor 0 flags
>>>        33562624 damage
>>>        103 shieldStrength 100 fuel 9860 engineTemp 35 weaponsTemp 0 whyDead 2
>>>        whodead
>>>        6"
>>>        "Received SP_YOU 12 1 hostile 13 war 0 armies 0 tractor 0 flags
>>>        33562624 damage
>>>        103 shieldStrength 100 fuel 9848 engineTemp 38 weaponsTemp 0 whyDead 2
>>>        whodead
>>>        6"
>>>        "Received SP_YOU 12 1 hostile 13 war 0 armies 0 tractor 0 flags
>>>        33562624 damage
>>>        103 shieldStrength 100 fuel 9836 engineTemp 41 weaponsTemp 0 whyDead 2
>>>        whodead
>>>        6"
>>>        "Received SP_YOU 12 1 hostile 13 war 0 armies 0 tractor 0 flags 2049
>>>        damage
>>>        0 shieldStrength 100 fuel 10000 engineTemp 0 weaponsTemp 0 whyDead 2
>>>        whodead 6"
>>>        "Received SP_YOU 12 1 hostile 13 war 0 armies 0 tractor 0 flags
>>>        33556481 damage
>>>        0 shieldStrength 100 fuel 10000 engineTemp 0 weaponsTemp 0 whyDead 2
>>>        whodead 6”
>>> 
>>>        Here’s a sequence of SP_YOU messages from [2][4]netrek.networkmom.net <http://netrek.networkmom.net/>.
>>> 
>>>        "Received SP_YOU 12 16 hostile 14 war 14 armies 0 tractor 0 flags 2048
>>>        damage
>>>        78 shieldStrength 100 fuel 9460 engineTemp 5 weaponsTemp 0 whyDead 0
>>>        whodead 0"
>>>        "Received SP_YOU 12 16 hostile 14 war 14 armies 0 tractor 0 flags 2048
>>>        damage
>>>        118 shieldStrength 100 fuel 9460 engineTemp 5 weaponsTemp 0 whyDead 2
>>>        whodead
>>>        0"
>>>        "Received SP_YOU 12 16 hostile 14 war 14 armies 0 tractor 0 flags 2048
>>>        damage
>>>        118 shieldStrength 100 fuel 9460 engineTemp 5 weaponsTemp 0 whyDead 2
>>>        whodead
>>>        0"
>>>        "Received SP_YOU 12 16 hostile 14 war 14 armies 0 tractor 0 flags 2048
>>>        damage
>>>        118 shieldStrength 100 fuel 9460 engineTemp 5 weaponsTemp 0 whyDead 2
>>>        whodead
>>>        0”
>>> 
>>>        …large number of identical messages deleted…
>>> 
>>>        "Received SP_YOU 12 16 hostile 14 war 14 armies 0 tractor 0 flags 2048
>>>        damage
>>>        118 shieldStrength 100 fuel 9460 engineTemp 5 weaponsTemp 0 whyDead 2
>>>        whodead
>>>        0"
>>>        "Received SP_YOU 12 16 hostile 14 war 14 armies 0 tractor 0 flags 2048
>>>        damage
>>>        118 shieldStrength 100 fuel 9460 engineTemp 5 weaponsTemp 0 whyDead 2
>>>        whodead
>>>        0"
>>>        "Received SP_YOU 12 16 hostile 14 war 14 armies 0 tractor 0 flags 2048
>>>        damage 0
>>>        shieldStrength 100 fuel 10000 engineTemp 0 weaponsTemp 0 whyDead 0
>>>        whodead 0”
>>> 
>>>        (Looks like I need to fix whodead, but 0 is valid so I don’t think
>>>        that’s the
>>>        cause).
>>> 
>>>        Could it be PFREFIT?
>>> 
>>>        For reference, here’s the p_flags fields.  While my current
>>>        implementation is
>>>        missing red/yellow/green, I don’t see anything relevant.
>>> 
>>>        /* bit masks of p_flags */
>>>        #define PFSHIELD           0x0001 /*!< shields are up */
>>>        #define PFREPAIR           0x0002 /*!< repairing damage or shields */
>>>        #define PFBOMB             0x0004 /*!< bombing planet while orbiting */
>>>        #define PFORBIT            0x0008 /*!< orbiting planet p_planet */
>>>        #define PFCLOAK            0x0010
>>>        #define PFWEP              0x0020
>>>        #define PFENG              0x0040
>>>        #define PFROBOT            0x0080
>>>        #define PFBEAMUP           0x0100
>>>        #define PFBEAMDOWN         0x0200
>>>        #define PFSELFDEST         0x0400
>>>        #define PFGREEN            0x0800
>>>        #define PFYELLOW           0x1000
>>>        #define PFRED              0x2000
>>>        #define PFPLOCK            0x4000       /* Locked on a player */
>>>        #define PFPLLOCK           0x8000       /* Locked on a planet */
>>>        #define PFCOPILOT         0x10000       /* Allow copilots */
>>>        #define PFWAR             0x20000       /* computer reprogramming for
>>>        war */
>>>        #define PFPRACTR          0x40000       /* practice type robot (no
>>>        kills) */
>>>        #define PFDOCK            0x80000 /*!< docked to a base, p_dock_with
>>>        valid */
>>>        #define PFREFIT          0x100000       /* true if about to refit */
>>>        #define PFREFITTING      0x200000       /* true if currently refitting
>>>        */
>>>        #define PFTRACT          0x400000       /* tractor beam activated */
>>>        #define PFPRESS          0x800000       /* pressor beam activated */
>>>        #define PFDOCKOK        0x1000000       /* docking permission */
>>>        #define PFSEEN          0x2000000       /* seen by enemy on galactic
>>>        map? */
>>>        /*#define PFCYBORG      0x4000000       a cyborg? 7/27/91 TC */
>>>        #define PFOBSERV        0x8000000       /* for observers */
>>>        #define PFTWARP        0x40000000       /* isae -- SB transwarp */
>>> 
>>>        References:
>>> 
>>>        [1] [5]http://pickled.netrek.org/ <http://pickled.netrek.org/>
>>>        [2] [6]http://netrek.networkmom.net/ <http://netrek.networkmom.net/>
>>> 
>>>        _______________________________________________
>>>        netrek-dev mailing list
>>>        [7]netrek-dev at us.netrek.org <mailto:netrek-dev at us.netrek.org>
>>>        [8]http://mailman.us.netrek.org/mailman/listinfo/netrek-dev <http://mailman.us.netrek.org/mailman/listinfo/netrek-dev>
>>> 
>>>    -- 
>>>    James Cameron
>>>    [9]http://quozl.netrek.org/ <http://quozl.netrek.org/>
>>>    _______________________________________________
>>>    netrek-dev mailing list
>>>    [10]netrek-dev at us.netrek.org <mailto:netrek-dev at us.netrek.org>
>>>    [11]http://mailman.us.netrek.org/mailman/listinfo/netrek-dev <http://mailman.us.netrek.org/mailman/listinfo/netrek-dev>
>>> 
>>> References:
>>> 
>>> [1] http://netrek.networkmom.net/ <http://netrek.networkmom.net/>
>>> [2] mailto:quozl at laptop.org <mailto:quozl at laptop.org>
>>> [3] http://pickled.netrek.org/ <http://pickled.netrek.org/>
>>> [4] http://netrek.networkmom.net/ <http://netrek.networkmom.net/>
>>> [5] http://pickled.netrek.org/ <http://pickled.netrek.org/>
>>> [6] http://netrek.networkmom.net/ <http://netrek.networkmom.net/>
>>> [7] mailto:netrek-dev at us.netrek.org <mailto:netrek-dev at us.netrek.org>
>>> [8] http://mailman.us.netrek.org/mailman/listinfo/netrek-dev <http://mailman.us.netrek.org/mailman/listinfo/netrek-dev>
>>> [9] http://quozl.netrek.org/ <http://quozl.netrek.org/>
>>> [10] mailto:netrek-dev at us.netrek.org <mailto:netrek-dev at us.netrek.org>
>>> [11] http://mailman.us.netrek.org/mailman/listinfo/netrek-dev <http://mailman.us.netrek.org/mailman/listinfo/netrek-dev>
>> 
>>> _______________________________________________
>>> netrek-dev mailing list
>>> netrek-dev at us.netrek.org <mailto:netrek-dev at us.netrek.org>
>>> http://mailman.us.netrek.org/mailman/listinfo/netrek-dev
>> 
>> 
>> -- 
>> James Cameron
>> http://quozl.netrek.org/ <http://quozl.netrek.org/>
>> _______________________________________________
>> netrek-dev mailing list
>> netrek-dev at us.netrek.org
>> http://mailman.us.netrek.org/mailman/listinfo/netrek-dev
> 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.us.netrek.org/pipermail/netrek-dev/attachments/20200717/68198183/attachment-0001.htm>