{ "_class" : "hudson.model.FreeStyleBuild", "actions" : [ { "_class" : "hudson.model.CauseAction", "causes" : [ { "_class" : "hudson.triggers.SCMTrigger$SCMTriggerCause", "shortDescription" : "Started by an SCM change" } ] }, { }, { "_class" : "hudson.plugins.git.util.BuildData", "buildsByBranchName" : { "refs/remotes/origin/master" : { "_class" : "hudson.plugins.git.util.Build", "buildNumber" : 116, "buildResult" : None, "marked" : { "SHA1" : "76236cb74c4a1fe1a3e1b8e49b0540584b13ef08", "branch" : [ { "SHA1" : "76236cb74c4a1fe1a3e1b8e49b0540584b13ef08", "name" : "refs/remotes/origin/master" } ] }, "revision" : { "SHA1" : "76236cb74c4a1fe1a3e1b8e49b0540584b13ef08", "branch" : [ { "SHA1" : "76236cb74c4a1fe1a3e1b8e49b0540584b13ef08", "name" : "refs/remotes/origin/master" } ] } } }, "lastBuiltRevision" : { "SHA1" : "76236cb74c4a1fe1a3e1b8e49b0540584b13ef08", "branch" : [ { "SHA1" : "76236cb74c4a1fe1a3e1b8e49b0540584b13ef08", "name" : "refs/remotes/origin/master" } ] }, "remoteUrls" : [ "https://hub.spigotmc.org/stash/scm/spigot/spigot.git" ], "scmName" : "" }, { "_class" : "hudson.plugins.git.GitTagAction" }, { }, { "_class" : "org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction" } ], "artifacts" : [ ], "building" : False, "description" : None, "displayName" : "#116", "duration" : 649, "estimatedDuration" : 416, "executor" : None, "fullDisplayName" : "Spigot-RSS #116", "id" : "116", "inProgress" : False, "keepLog" : False, "number" : 116, "queueId" : 4, "result" : "SUCCESS", "timestamp" : 1441867749030, "url" : "https://hub.spigotmc.org/jenkins/view/RSS/job/Spigot-RSS/116/", "builtOn" : "", "changeSet" : { "_class" : "hudson.plugins.git.GitChangeSetList", "items" : [ { "_class" : "hudson.plugins.git.GitChangeSet", "affectedPaths" : [ "CraftBukkit-Patches/0038-Add-Getter-for-Entity-Invulnerability.patch", "CraftBukkit-Patches/0003-Skeleton-API-Implementations.patch", "CraftBukkit-Patches/0159-More-effecient-RegionFile-zero-ing.patch", "CraftBukkit-Patches/0121-Cross-World-Entity-Teleportation.patch", "CraftBukkit-Patches/0158-Optimize-Chunk-Saving-Memory-Allocation-and-Compress.patch" ], "commitId" : "da71ee9abd99ea2fbcb844e2a5b4388b8edfeb63", "timestamp" : 1441831650000, "author" : { "absoluteUrl" : "https://hub.spigotmc.org/jenkins/user/md_5", "fullName" : "md_5" }, "authorEmail" : "git@md-5.net", "comment" : "Optimize Chunk Saving Memory Allocation and Compression\u000a\u000aMinecraft ineffeciently uses OutputStreams by calling .write(int) on the stream.\u000aFor Chunks, this is a DeflaterOutputStream, which allocates a single byte EVERY write.\u000a\u000aThis is causing the server to allocate tons of new byte[1] objects.\u000aAdditionally, this is very ineffecient for the Deflate process.\u000a\u000aBy Buffering Writes the same way it already is Buffering Reads, we will\u000awrite to the stream much more effeciently.\u000a\u000aAlso a more effecient RegionFile zero'ing for new chunks to speed up\u000anew chunk generation.\u000a", "date" : "2015-09-10T06:47:30+1000", "id" : "da71ee9abd99ea2fbcb844e2a5b4388b8edfeb63", "msg" : "Optimize Chunk Saving Memory Allocation and Compression", "paths" : [ { "editType" : "edit", "file" : "CraftBukkit-Patches/0038-Add-Getter-for-Entity-Invulnerability.patch" }, { "editType" : "edit", "file" : "CraftBukkit-Patches/0003-Skeleton-API-Implementations.patch" }, { "editType" : "add", "file" : "CraftBukkit-Patches/0159-More-effecient-RegionFile-zero-ing.patch" }, { "editType" : "edit", "file" : "CraftBukkit-Patches/0121-Cross-World-Entity-Teleportation.patch" }, { "editType" : "add", "file" : "CraftBukkit-Patches/0158-Optimize-Chunk-Saving-Memory-Allocation-and-Compress.patch" } ] }, { "_class" : "hudson.plugins.git.GitChangeSet", "affectedPaths" : [ "CraftBukkit-Patches/0002-mc-dev-imports.patch", "CraftBukkit-Patches/0160-Don-t-sleep-between-chunk-saves.patch" ], "commitId" : "76236cb74c4a1fe1a3e1b8e49b0540584b13ef08", "timestamp" : 1441831690000, "author" : { "absoluteUrl" : "https://hub.spigotmc.org/jenkins/user/md_5", "fullName" : "md_5" }, "authorEmail" : "git@md-5.net", "comment" : "Don't sleep between chunk saves\u000a\u000aFor some unknown reason, Minecraft is sleeping 10ms between every single chunk being saved to disk.\u000aUnder high chunk load/unload activity (lots of movement / teleporting), this causes the chunk unload queue\u000ato build up in size.\u000a\u000aThis has multiple impacts:\u000a1) Performance of the unload queue itself - The save thread is pretty ineffecient for how it accesses it\u000a By letting the queue get larger, checking and popping work off the queue can get less performant.\u000a2) Performance of chunk loading - As with #1, chunk loads also have to check this queue when loading\u000a chunk data so that it doesn't load stale data if new data is pending write to disk.\u000a3) Memory Usage - The entire chunk has been serialized to NBT, and now sits in this queue. This leads to\u000a elevated memory usage, and then the objects used in the serialization sit around longer than needed,\u000a resulting in promotion to Old Generation instead of dying young.\u000a\u000aIf there is work to do, then the thread should be doing its work, and only sleep when it is done.\u000a", "date" : "2015-09-10T06:48:10+1000", "id" : "76236cb74c4a1fe1a3e1b8e49b0540584b13ef08", "msg" : "Don't sleep between chunk saves", "paths" : [ { "editType" : "edit", "file" : "CraftBukkit-Patches/0002-mc-dev-imports.patch" }, { "editType" : "add", "file" : "CraftBukkit-Patches/0160-Don-t-sleep-between-chunk-saves.patch" } ] } ], "kind" : "git" }, "culprits" : [ { "absoluteUrl" : "https://hub.spigotmc.org/jenkins/user/md_5", "fullName" : "md_5" } ] }