{
  "_class" : "hudson.matrix.MatrixBuild",
  "actions" : [
    {
      "_class" : "hudson.model.CauseAction",
      "causes" : [
        {
          "_class" : "hudson.triggers.SCMTrigger$SCMTriggerCause",
          "shortDescription" : "Started by an SCM change"
        }
      ]
    },
    {
      
    },
    {
      "_class" : "hudson.model.ParametersAction",
      "parameters" : [
        {
          "_class" : "hudson.model.StringParameterValue",
          "name" : "BRANCH",
          "value" : "master"
        },
        {
          "_class" : "hudson.model.StringParameterValue",
          "name" : "EMAIL_NOTIFICATIONS",
          "value" : "jenkins-notifications@lists.osmocom.org laforge@gnumonks.org"
        }
      ]
    },
    {
      "_class" : "jenkins.metrics.impl.TimeInQueueAction",
      "blockedDurationMillis" : 0,
      "blockedTimeMillis" : 0,
      "buildableDurationMillis" : 0,
      "buildableTimeMillis" : 0,
      "buildingDurationMillis" : 118782,
      "executingTimeMillis" : 118782,
      "executorUtilization" : 1.0,
      "subTaskCount" : 0,
      "waitingDurationMillis" : 6341,
      "waitingTimeMillis" : 6341
    },
    {
      
    },
    {
      "_class" : "hudson.plugins.git.util.BuildData",
      "buildsByBranchName" : {
        "origin/master" : {
          "_class" : "hudson.plugins.git.util.Build",
          "buildNumber" : 4480,
          "buildResult" : None,
          "marked" : {
            "SHA1" : "7d7c6bee96d81e31f205ce593b4e9b8042994653",
            "branch" : [
              {
                "SHA1" : "7d7c6bee96d81e31f205ce593b4e9b8042994653",
                "name" : "origin/master"
              }
            ]
          },
          "revision" : {
            "SHA1" : "7d7c6bee96d81e31f205ce593b4e9b8042994653",
            "branch" : [
              {
                "SHA1" : "7d7c6bee96d81e31f205ce593b4e9b8042994653",
                "name" : "origin/master"
              }
            ]
          }
        },
        "refs/remotes/origin/master" : {
          "_class" : "hudson.plugins.git.util.Build",
          "buildNumber" : 3086,
          "buildResult" : None,
          "marked" : {
            "SHA1" : "a42f4a51c09fdc3c4f532ff07b806e26bf7e9fa1",
            "branch" : [
              {
                "SHA1" : "a42f4a51c09fdc3c4f532ff07b806e26bf7e9fa1",
                "name" : "refs/remotes/origin/master"
              }
            ]
          },
          "revision" : {
            "SHA1" : "a42f4a51c09fdc3c4f532ff07b806e26bf7e9fa1",
            "branch" : [
              {
                "SHA1" : "a42f4a51c09fdc3c4f532ff07b806e26bf7e9fa1",
                "name" : "refs/remotes/origin/master"
              }
            ]
          }
        }
      },
      "lastBuiltRevision" : {
        "SHA1" : "7d7c6bee96d81e31f205ce593b4e9b8042994653",
        "branch" : [
          {
            "SHA1" : "7d7c6bee96d81e31f205ce593b4e9b8042994653",
            "name" : "origin/master"
          }
        ]
      },
      "remoteUrls" : [
        "https://gerrit.osmocom.org/libosmocore"
      ],
      "scmName" : ""
    },
    {
      
    },
    {
      
    },
    {
      "_class" : "org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction"
    }
  ],
  "artifacts" : [
    
  ],
  "building" : False,
  "description" : None,
  "displayName" : "#4480",
  "duration" : 118782,
  "estimatedDuration" : 110810,
  "executor" : None,
  "fullDisplayName" : "master-libosmocore #4480",
  "id" : "4480",
  "inProgress" : False,
  "keepLog" : False,
  "number" : 4480,
  "queueId" : 1996254,
  "result" : "SUCCESS",
  "timestamp" : 1758188706576,
  "url" : "https://jenkins.osmocom.org/jenkins/job/master-libosmocore/4480/",
  "builtOn" : "",
  "changeSet" : {
    "_class" : "hudson.plugins.git.GitChangeSetList",
    "items" : [
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/core/select.c",
          "src/core/osmo_io_uring.c"
        ],
        "commitId" : "6b851c3bb04ca368dec916d59f5ec4aadf0ad6bc",
        "timestamp" : 1758188516000,
        "author" : {
          "absoluteUrl" : "https://jenkins.osmocom.org/jenkins/user/laforge",
          "fullName" : "laforge"
        },
        "authorEmail" : "laforge@osmocom.org",
        "comment" : "Allow io_uring_submit batching just ahead of poll/select\u000a\u000aLet's add a mode (enabled via the LIBOSMO_IO_URING_BATCH environment\u000avariable), where we don't call io_uring_submit() after every operation\u000awe add to the submission queue.  Rather, do that once before we go into\u000apoll.\u000a\u000aThis should massively reduce the amount of io_uring_enter() syscalls\u000awe're seeing.\u000a\u000aRelated: OS#6705\u000aChange-Id: Id34fe2ced32c63d15b14810e145744f7509064cc\u000a",
        "date" : "2025-09-18 09:41:56 +0000",
        "id" : "6b851c3bb04ca368dec916d59f5ec4aadf0ad6bc",
        "msg" : "Allow io_uring_submit batching just ahead of poll/select",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/core/osmo_io_uring.c"
          },
          {
            "editType" : "edit",
            "file" : "src/core/select.c"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/core/osmo_io.c",
          "src/core/osmo_io_internal.h",
          "src/core/osmo_io_uring.c",
          "src/core/osmo_io_poll.c"
        ],
        "commitId" : "01ae6dbed8c15182ad262bbab50ba4d23f3aaaa8",
        "timestamp" : 1758188516000,
        "author" : {
          "absoluteUrl" : "https://jenkins.osmocom.org/jenkins/user/laforge",
          "fullName" : "laforge"
        },
        "authorEmail" : "laforge@osmocom.org",
        "comment" : "Avoid reusing pending buffer; append incoming data instead\u000a\u000aWhen reading from a stream, a single read may return only part of a\u000amessage segment. In such cases, the partial data was stored in\u000a'iofd->pending' and reused for subsequent reads to complete the message.\u000a\u000aWith upcoming changes that submit multiple read SQEs to io_uring,\u000aeach read uses its own pre-submitted buffer. Reusing 'iofd->pending' for\u000asubmitting next read is not possible, as the next read buffer is already\u000asubmitted.\u000a\u000aInstead, create a new msgb which is used for the read operation and,\u000aonce completed, memcopy to the existing pending buffer, allowing message\u000asegments to accumulate until complete.\u000a\u000aChange-Id: I08df9736ccc5e9a7df61ca6dcf94629ee010752f\u000a",
        "date" : "2025-09-18 09:41:56 +0000",
        "id" : "01ae6dbed8c15182ad262bbab50ba4d23f3aaaa8",
        "msg" : "Avoid reusing pending buffer; append incoming data instead",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/core/osmo_io_uring.c"
          },
          {
            "editType" : "edit",
            "file" : "src/core/osmo_io_poll.c"
          },
          {
            "editType" : "edit",
            "file" : "src/core/osmo_io.c"
          },
          {
            "editType" : "edit",
            "file" : "src/core/osmo_io_internal.h"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "tests/osmo_io/osmo_io_test.c",
          "tests/osmo_io/osmo_io_test.ok"
        ],
        "commitId" : "086ee51de416ae5276b4b185c055831e16c0ef85",
        "timestamp" : 1758188516000,
        "author" : {
          "absoluteUrl" : "https://jenkins.osmocom.org/jenkins/user/laforge",
          "fullName" : "laforge"
        },
        "authorEmail" : "laforge@osmocom.org",
        "comment" : "osmo_io: Add unit test to verify segmentation process\u000a\u000aChange-Id: I7d8feba9c8e8386c9fd144669f6ccd01d6bbbabb\u000a",
        "date" : "2025-09-18 09:41:56 +0000",
        "id" : "086ee51de416ae5276b4b185c055831e16c0ef85",
        "msg" : "osmo_io: Add unit test to verify segmentation process",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "tests/osmo_io/osmo_io_test.c"
          },
          {
            "editType" : "edit",
            "file" : "tests/osmo_io/osmo_io_test.ok"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/core/osmo_io.c",
          "src/core/libosmocore.map",
          "include/osmocom/core/osmo_io.h",
          "src/core/osmo_io_internal.h",
          "src/core/osmo_io_poll.c",
          "src/core/osmo_io_uring.c"
        ],
        "commitId" : "7c10401b3553fe19c4b010d91e15bc0bd4f46e3b",
        "timestamp" : 1758188516000,
        "author" : {
          "absoluteUrl" : "https://jenkins.osmocom.org/jenkins/user/laforge",
          "fullName" : "laforge"
        },
        "authorEmail" : "laforge@osmocom.org",
        "comment" : "Add multiple messages buffers to struct iofd_msghdr\u000a\u000aThis is a prerequisite for transfering multiple buffers with a single\u000aSQE or CQE when using osmo_io with io_uring.\u000a\u000aThe message buffers at struct iofd_msghr, as well as the io vectors are\u000aarrays. A maximum number is stored, as well as the current number.\u000a\u000aAs this patch does not implement multiple buffers yet, only index 0 of a\u000amessage buffer is used. (msg[0])\u000a\u000aHaving more than one buffer is optional and the number can be controlled\u000avia environment variable.\u000a\u000aRelated: OS#6705\u000aChange-Id: I4fb1067de4615cc22cc6caf99b481491e7f2ef92\u000a",
        "date" : "2025-09-18 09:41:56 +0000",
        "id" : "7c10401b3553fe19c4b010d91e15bc0bd4f46e3b",
        "msg" : "Add multiple messages buffers to struct iofd_msghdr",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "include/osmocom/core/osmo_io.h"
          },
          {
            "editType" : "edit",
            "file" : "src/core/osmo_io.c"
          },
          {
            "editType" : "edit",
            "file" : "src/core/libosmocore.map"
          },
          {
            "editType" : "edit",
            "file" : "src/core/osmo_io_internal.h"
          },
          {
            "editType" : "edit",
            "file" : "src/core/osmo_io_poll.c"
          },
          {
            "editType" : "edit",
            "file" : "src/core/osmo_io_uring.c"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/core/osmo_io.c",
          "src/core/osmo_io_uring.c"
        ],
        "commitId" : "76ace3ef1999551944e173e7b48d7b259abf4322",
        "timestamp" : 1758188516000,
        "author" : {
          "absoluteUrl" : "https://jenkins.osmocom.org/jenkins/user/laforge",
          "fullName" : "laforge"
        },
        "authorEmail" : "laforge@osmocom.org",
        "comment" : "Add multiple messages buffers to io_uring read operations\u000a\u000aMultiple message buffers can be read by receiving a single CQE when\u000ausing io_uring. If there is less data available than available buffers,\u000anot all buffers will be filled.\u000a\u000aHaving more than one buffer is optional and the number can be controlled\u000avia environment variable.\u000a\u000aRelated: OS#6705\u000aChange-Id: Ic4544b8fcbad5a266db748d6864d3ae93ee06bce\u000a",
        "date" : "2025-09-18 09:41:56 +0000",
        "id" : "76ace3ef1999551944e173e7b48d7b259abf4322",
        "msg" : "Add multiple messages buffers to io_uring read operations",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/core/osmo_io_uring.c"
          },
          {
            "editType" : "edit",
            "file" : "src/core/osmo_io.c"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/core/osmo_io.c",
          "src/core/osmo_io_uring.c"
        ],
        "commitId" : "2e75e6892765155d55bc2bfedc5000949d6eaa89",
        "timestamp" : 1758188516000,
        "author" : {
          "absoluteUrl" : "https://jenkins.osmocom.org/jenkins/user/laforge",
          "fullName" : "laforge"
        },
        "authorEmail" : "laforge@osmocom.org",
        "comment" : "Add multiple messages buffers to io_uring write operations\u000a\u000aMultiple message buffers can be writen by sending a single SQE when\u000ausing io_uring. If there is less data written, the completely written\u000abuffers are removed and the partly written buffers are truncated.\u000aAfterwards they are re-queued for next write operation.\u000a\u000aHaving more than one buffer is optional and the number can be controlled\u000avia environment variable.\u000a\u000aRelated: OS#6705\u000aChange-Id: I8c4e0a785cf66becd7fb5b2caf718c9724b56686\u000a",
        "date" : "2025-09-18 09:41:56 +0000",
        "id" : "2e75e6892765155d55bc2bfedc5000949d6eaa89",
        "msg" : "Add multiple messages buffers to io_uring write operations",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/core/osmo_io.c"
          },
          {
            "editType" : "edit",
            "file" : "src/core/osmo_io_uring.c"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/core/osmo_io.c"
        ],
        "commitId" : "3c2a02db40046933b143a69d75cb2691a1208fbd",
        "timestamp" : 1758188516000,
        "author" : {
          "absoluteUrl" : "https://jenkins.osmocom.org/jenkins/user/laforge",
          "fullName" : "laforge"
        },
        "authorEmail" : "laforge@osmocom.org",
        "comment" : "osmo-io: Put together message buffers when dequeued from tx queue\u000a\u000aWrite operations may be incomplete. osmo-io processs will remove\u000acomplete message buffers after a write operation from msghdr and put\u000athe msghdr with the remaining buffers back into tx_queue.\u000a\u000aIf the user requests multiple messages buffers per write operation, the\u000amsghdr of an incomplete write may have less message buffers than the\u000auser requested. The remaining buffers are buffers are taken from next\u000amsghdr in the queue, if exists.\u000a\u000aChange-Id: I97c366211dd266fd58ec252890ec017d6d334534\u000a",
        "date" : "2025-09-18 09:41:56 +0000",
        "id" : "3c2a02db40046933b143a69d75cb2691a1208fbd",
        "msg" : "osmo-io: Put together message buffers when dequeued from tx queue",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/core/osmo_io.c"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/core/osmo_io.c",
          "src/core/libosmocore.map",
          "include/osmocom/core/osmo_io.h",
          "src/core/osmo_io_internal.h",
          "src/core/osmo_io_uring.c"
        ],
        "commitId" : "8a1588aa71cdd49e8db8c2bc9722766338e6ed6a",
        "timestamp" : 1758188516000,
        "author" : {
          "absoluteUrl" : "https://jenkins.osmocom.org/jenkins/user/laforge",
          "fullName" : "laforge"
        },
        "authorEmail" : "laforge@osmocom.org",
        "comment" : "Send multiple read/recvfrom/recvmsg SQEs in advance\u000a\u000aMultiple read or recvfrom operations can be submitted via SQEs when\u000ausing io_uring. This allows reading multiple packet / more data between\u000acalls of osmo_select_main() the main loop.\u000a\u000aHaving more than one SQE submitted is optional and the number can be\u000acontrolled via environment variable.\u000a\u000aRelated: OS#6705\u000aChange-Id: Id50a8900fa2fe6de553e5025feae7e1e8d501e30\u000a",
        "date" : "2025-09-18 09:41:56 +0000",
        "id" : "8a1588aa71cdd49e8db8c2bc9722766338e6ed6a",
        "msg" : "Send multiple read/recvfrom/recvmsg SQEs in advance",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/core/osmo_io.c"
          },
          {
            "editType" : "edit",
            "file" : "src/core/osmo_io_internal.h"
          },
          {
            "editType" : "edit",
            "file" : "src/core/osmo_io_uring.c"
          },
          {
            "editType" : "edit",
            "file" : "include/osmocom/core/osmo_io.h"
          },
          {
            "editType" : "edit",
            "file" : "src/core/libosmocore.map"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/core/osmo_io_uring.c"
        ],
        "commitId" : "aa980b74961ed4f392d766a95a77f27789943f26",
        "timestamp" : 1758188516000,
        "author" : {
          "absoluteUrl" : "https://jenkins.osmocom.org/jenkins/user/laforge",
          "fullName" : "laforge"
        },
        "authorEmail" : "laforge@osmocom.org",
        "comment" : "Add environment variable to set io_uring size\u000a\u000aThe term \"LIBOSMO_IO_URING_INITIAL_SIZE\" is related to the following\u000apatch, which will increment the size of the io_uring automatically if\u000athe initial size is too small.\u000a\u000aRelated: OS#6705\u000aChange-Id: I55289d9282e13aa1bf82f3931c85c196752f1484\u000a",
        "date" : "2025-09-18 09:41:56 +0000",
        "id" : "aa980b74961ed4f392d766a95a77f27789943f26",
        "msg" : "Add environment variable to set io_uring size",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/core/osmo_io_uring.c"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/core/osmo_io_internal.h",
          "src/core/osmo_io_uring.c"
        ],
        "commitId" : "a63991d41cc41959d71c1d98413cc3349a7c7305",
        "timestamp" : 1758188516000,
        "author" : {
          "absoluteUrl" : "https://jenkins.osmocom.org/jenkins/user/laforge",
          "fullName" : "laforge"
        },
        "authorEmail" : "laforge@osmocom.org",
        "comment" : "Automatically increase io_uring, if too small.\u000a\u000aThe ring may be too small to store all SQEs before the kernel can\u000ahandle them. If this happens, a new ring is allocated with twice of the\u000asize of the old ring. The old ring will not be destroyed, as it still\u000acontains uncompleted elements. Some of them may never be completed.\u000a\u000aA pointer to the current ring will be stored within the msghdr\u000astructure. It is used when cancelling an SQE. The cancellation must be\u000aperformed in the same ring where it was created.\u000a\u000aIt is quite unlikely that the old ring cannot store the cancellation\u000aSQE. If this happens, the cancellation is queued and submitted, once\u000athe ring can store it.\u000a\u000aThe old ring will not be removed, because there is currently no counter\u000ato determine when all submissions are completed.\u000a\u000aRelated: OS#6705\u000aChange-Id: Id9230146acc8d54bfd44834e783c31b37bd64bca\u000a",
        "date" : "2025-09-18 09:41:56 +0000",
        "id" : "a63991d41cc41959d71c1d98413cc3349a7c7305",
        "msg" : "Automatically increase io_uring, if too small.",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/core/osmo_io_uring.c"
          },
          {
            "editType" : "edit",
            "file" : "src/core/osmo_io_internal.h"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/core/osmo_io_uring.c"
        ],
        "commitId" : "56a346335f36a6c0aea60b7c0f32409116bbafe1",
        "timestamp" : 1758188516000,
        "author" : {
          "absoluteUrl" : "https://jenkins.osmocom.org/jenkins/user/laforge",
          "fullName" : "laforge"
        },
        "authorEmail" : "laforge@osmocom.org",
        "comment" : "Remove old empty io_uring\u000a\u000aA previous patch creates a new io_uring, if it becomes too small to\u000astore all SQEs. When all SQEs of the old ring are completed, the old\u000aring will be destroyed.\u000a\u000aA counter is incremented whenever an SQE is submitted to an io_uring.\u000aThe counter is decremented whenever a CQE is received and handled. This\u000acounter will determine when a ring is empty and can be destroyed.\u000a\u000aRelated: OS#6705\u000aChange-Id: Id2d2a0400ad442198c684ea0ead4eaeaead4c53d\u000a",
        "date" : "2025-09-18 09:41:56 +0000",
        "id" : "56a346335f36a6c0aea60b7c0f32409116bbafe1",
        "msg" : "Remove old empty io_uring",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/core/osmo_io_uring.c"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/core/osmo_io_internal.h",
          "src/core/osmo_io.c",
          "src/core/osmo_io_uring.c"
        ],
        "commitId" : "7d7c6bee96d81e31f205ce593b4e9b8042994653",
        "timestamp" : 1758188516000,
        "author" : {
          "absoluteUrl" : "https://jenkins.osmocom.org/jenkins/user/laforge",
          "fullName" : "laforge"
        },
        "authorEmail" : "laforge@osmocom.org",
        "comment" : "Put all io_uring related read and write states into sub structures\u000a\u000aRelated: OS#6705\u000aChange-Id: I3cf4ab6d9aebf5532ad174c90c7b0e9633491c88\u000a",
        "date" : "2025-09-18 09:41:56 +0000",
        "id" : "7d7c6bee96d81e31f205ce593b4e9b8042994653",
        "msg" : "Put all io_uring related read and write states into sub structures",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/core/osmo_io_internal.h"
          },
          {
            "editType" : "edit",
            "file" : "src/core/osmo_io.c"
          },
          {
            "editType" : "edit",
            "file" : "src/core/osmo_io_uring.c"
          }
        ]
      }
    ],
    "kind" : "git"
  },
  "culprits" : [
    {
      "absoluteUrl" : "https://jenkins.osmocom.org/jenkins/user/laforge",
      "fullName" : "laforge"
    }
  ],
  "runs" : [
    {
      "number" : 475,
      "url" : "https://jenkins.osmocom.org/jenkins/job/master-libosmocore/a2=default,a3=default,arch=amd64,label=osmocom-master-debian9/475/"
    },
    {
      "number" : 475,
      "url" : "https://jenkins.osmocom.org/jenkins/job/master-libosmocore/a2=default,a3=default,arch=arm-none-eabi,label=osmocom-master-debian9/475/"
    },
    {
      "number" : 4480,
      "url" : "https://jenkins.osmocom.org/jenkins/job/master-libosmocore/a2=default,a3=default,a4=default,arch=amd64,label=io_uring/4480/"
    },
    {
      "number" : 4480,
      "url" : "https://jenkins.osmocom.org/jenkins/job/master-libosmocore/a2=default,a3=default,a4=default,arch=arm-none-eabi,label=io_uring/4480/"
    }
  ]
}