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>