In a folder with ~150k files I notice high CPU usage when adding a single empty file, after having used the REST API just before.
This is a problem, because many Syncthing status panels/icons use the REST API.
Usually when I add a single empty file to my folder, the CPU usage stays at 0.0%. Here’s the log of such an event:
log for adding an empty file "test/jo12" -> CPU 0.0%
[EUX7P] DEBUG: sendreceive/njam-home@0xc0001f4b00 filesystem notification rescan
[EUX7P] DEBUG: Walk [test/jo12] Matcher/[/.* /.*/** /VirtualBox VMs /VirtualBox VMs/**]@0xc000220090
[EUX7P] DEBUG: to hash: test/jo12 File{Name:"test/jo12", Sequence:0, Permissions:0644, ModTime:2018-10-21 14:56:42.613226998 +0200 CEST, Version:{[{EUX7PUQ 1}]}, Length:0, Deleted:false, Invalid:false, LocalFlags:0x0, NoPermissions:false, BlockSize:131072, Blocks:[]}
[EUX7P] DEBUG: real to hash: test/jo12
[EUX7P] DEBUG: Walk progress done njam-home [test/jo12] Matcher/[/.* /.*/** /VirtualBox VMs /VirtualBox VMs/**]@0xc000220090
[EUX7P] DEBUG: njam-home Update(7777777-777777N-7777777-777777N-7777777-777777N-7777777-77777Q4, [1])
[EUX7P] DEBUG: insert; folder="njam-home" device=7777777-777777N-7777777-777777N-7777777-777777N-7777777-77777Q4 File{Name:"test/jo12", Sequence:6077934, Permissions:0644, ModTime:2018-10-21 14:56:42.613226998 +0200 CEST, Version:{[{EUX7PUQ 1}]}, Length:0, Deleted:false, Invalid:false, LocalFlags:0x0, NoPermissions:false, BlockSize:131072, Blocks:[Block{0/0/0/e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855}]}
[EUX7P] DEBUG: update global; folder="njam-home" device=7777777-777777N-7777777-777777N-7777777-777777N-7777777-77777Q4 file="test/jo12" version={[{EUX7PUQ 1}]} invalid=false
[EUX7P] DEBUG: new global for "test/jo12" after update: {{{[{EUX7PUQ 1}]}, 7777777-777777N-7777777-777777N-7777777-777777N-7777777-77777Q4}}
[EUX7P] DEBUG: adding sequence; folder="njam-home" sequence=6077934 test/jo12
[EUX7P] DEBUG: njam-home WithPrefixedHaveTruncated(7777777-777777N-7777777-777777N-7777777-777777N-7777777-77777Q4, "test/jo12")
[EUX7P] DEBUG: njam-home WithHaveSequence(6077934)
[EUX7P] DEBUG: njam-home WithHaveSequence(6077934)
[EUX7P] DEBUG: Sending indexes for njam-home to OL5YS2A-XTFA54E-FUEMEQQ-OSVW5TE-ESDZH4W-OW5ENTN-Q4AQKSJ-IT6S7Q5 at [2a02:168:978a::f8d]:41816-[2a05:d014:d1b:5000:fe7c:8d39:f02c:3a13]:22000/tcp-client: 1 files (<98 bytes)
[EUX7P] DEBUG: njam-home WithNeed(7777777-777777N-7777777-777777N-7777777-777777N-7777777-77777Q4)
[EUX7P] DEBUG: Sending indexes for njam-home to 5YT4NI6-24V6YNT-BY7XUDN-ZGQPH4G-W2YJQIQ-FMJ4PHS-XXSCHAW-GXAIIQ4 at [2a02:168:978a::f8d]:46322-[2a02:168:978a::214]:22000/tcp-client: 1 files (<98 bytes)
[EUX7P] DEBUG: Index update (in): OL5YS2A-XTFA54E-FUEMEQQ-OSVW5TE-ESDZH4W-OW5ENTN-Q4AQKSJ-IT6S7Q5 / "njam-home": 1 files
[EUX7P] DEBUG: njam-home Update(OL5YS2A-XTFA54E-FUEMEQQ-OSVW5TE-ESDZH4W-OW5ENTN-Q4AQKSJ-IT6S7Q5, [1])
[EUX7P] DEBUG: insert; folder="njam-home" device=OL5YS2A-XTFA54E-FUEMEQQ-OSVW5TE-ESDZH4W-OW5ENTN-Q4AQKSJ-IT6S7Q5 File{Name:"test/jo12", Sequence:6114572, Permissions:0644, ModTime:2018-10-21 14:56:42.613226998 +0200 CEST, Version:{[{EUX7PUQ 1}]}, Length:0, Deleted:false, Invalid:false, LocalFlags:0x0, NoPermissions:false, BlockSize:131072, Blocks:[Block{0/0/0/e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855}]}
[EUX7P] DEBUG: update global; folder="njam-home" device=OL5YS2A-XTFA54E-FUEMEQQ-OSVW5TE-ESDZH4W-OW5ENTN-Q4AQKSJ-IT6S7Q5 file="test/jo12" version={[{EUX7PUQ 1}]} invalid=false
[EUX7P] DEBUG: new global for "test/jo12" after update: {{{[{EUX7PUQ 1}]}, OL5YS2A-XTFA54E-FUEMEQQ-OSVW5TE-ESDZH4W-OW5ENTN-Q4AQKSJ-IT6S7Q5}, {{[{EUX7PUQ 1}]}, 7777777-777777N-7777777-777777N-7777777-777777N-7777777-77777Q4}}
[EUX7P] DEBUG: njam-home WithNeed(7777777-777777N-7777777-777777N-7777777-777777N-7777777-77777Q4)
[EUX7P] DEBUG: Index update (in): 5YT4NI6-24V6YNT-BY7XUDN-ZGQPH4G-W2YJQIQ-FMJ4PHS-XXSCHAW-GXAIIQ4 / "njam-home": 1 files
[EUX7P] DEBUG: njam-home Update(5YT4NI6-24V6YNT-BY7XUDN-ZGQPH4G-W2YJQIQ-FMJ4PHS-XXSCHAW-GXAIIQ4, [1])
[EUX7P] DEBUG: insert; folder="njam-home" device=5YT4NI6-24V6YNT-BY7XUDN-ZGQPH4G-W2YJQIQ-FMJ4PHS-XXSCHAW-GXAIIQ4 File{Name:"test/jo12", Sequence:1185943, Permissions:0644, ModTime:2018-10-21 14:56:42.613226998 +0200 CEST, Version:{[{EUX7PUQ 1}]}, Length:0, Deleted:false, Invalid:false, LocalFlags:0x0, NoPermissions:false, BlockSize:131072, Blocks:[Block{0/0/0/e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855}]}
[EUX7P] DEBUG: update global; folder="njam-home" device=5YT4NI6-24V6YNT-BY7XUDN-ZGQPH4G-W2YJQIQ-FMJ4PHS-XXSCHAW-GXAIIQ4 file="test/jo12" version={[{EUX7PUQ 1}]} invalid=false
[EUX7P] DEBUG: new global for "test/jo12" after update: {{{[{EUX7PUQ 1}]}, 5YT4NI6-24V6YNT-BY7XUDN-ZGQPH4G-W2YJQIQ-FMJ4PHS-XXSCHAW-GXAIIQ4}, {{[{EUX7PUQ 1}]}, OL5YS2A-XTFA54E-FUEMEQQ-OSVW5TE-ESDZH4W-OW5ENTN-Q4AQKSJ-IT6S7Q5}, {{[{EUX7PUQ 1}]}, 7777777-777777N-7777777-777777N-7777777-777777N-7777777-77777Q4}}
[EUX7P] DEBUG: njam-home WithNeed(7777777-777777N-7777777-777777N-7777777-777777N-7777777-77777Q4)
Now let’s say I open the Syncthing web interface to look at the status. If I add another single empty file now, the CPU usages increases to 100% just after adding the file. Here’s the log:
log for adding an empty file "test/jo13" -> CPU 100.0%
[EUX7P] DEBUG: sendreceive/njam-home@0xc0001f4b00 filesystem notification rescan
[EUX7P] DEBUG: Walk [test/jo13] Matcher/[/.* /.*/** /VirtualBox VMs /VirtualBox VMs/**]@0xc000220090
[EUX7P] DEBUG: to hash: test/jo13 File{Name:"test/jo13", Sequence:0, Permissions:0644, ModTime:2018-10-21 14:57:53.202172275 +0200 CEST, Version:{[{EUX7PUQ 1}]}, Length:0, Deleted:false, Invalid:false, LocalFlags:0x0, NoPermissions:false, BlockSize:131072, Blocks:[]}
[EUX7P] DEBUG: real to hash: test/jo13
[EUX7P] DEBUG: Walk progress done njam-home [test/jo13] Matcher/[/.* /.*/** /VirtualBox VMs /VirtualBox VMs/**]@0xc000220090
[EUX7P] DEBUG: njam-home Update(7777777-777777N-7777777-777777N-7777777-777777N-7777777-77777Q4, [1])
[EUX7P] DEBUG: insert; folder="njam-home" device=7777777-777777N-7777777-777777N-7777777-777777N-7777777-77777Q4 File{Name:"test/jo13", Sequence:6077935, Permissions:0644, ModTime:2018-10-21 14:57:53.202172275 +0200 CEST, Version:{[{EUX7PUQ 1}]}, Length:0, Deleted:false, Invalid:false, LocalFlags:0x0, NoPermissions:false, BlockSize:131072, Blocks:[Block{0/0/0/e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855}]}
[EUX7P] DEBUG: update global; folder="njam-home" device=7777777-777777N-7777777-777777N-7777777-777777N-7777777-77777Q4 file="test/jo13" version={[{EUX7PUQ 1}]} invalid=false
[EUX7P] DEBUG: new global for "test/jo13" after update: {{{[{EUX7PUQ 1}]}, 7777777-777777N-7777777-777777N-7777777-777777N-7777777-77777Q4}}
[EUX7P] DEBUG: adding sequence; folder="njam-home" sequence=6077935 test/jo13
[EUX7P] DEBUG: njam-home WithPrefixedHaveTruncated(7777777-777777N-7777777-777777N-7777777-777777N-7777777-77777Q4, "test/jo13")
[EUX7P] DEBUG: njam-home WithHaveSequence(6077935)
[EUX7P] DEBUG: njam-home WithHaveSequence(6077935)
[EUX7P] DEBUG: Sending indexes for njam-home to 5YT4NI6-24V6YNT-BY7XUDN-ZGQPH4G-W2YJQIQ-FMJ4PHS-XXSCHAW-GXAIIQ4 at [2a02:168:978a::f8d]:46322-[2a02:168:978a::214]:22000/tcp-client: 1 files (<97 bytes)
[EUX7P] DEBUG: njam-home WithNeed(7777777-777777N-7777777-777777N-7777777-777777N-7777777-77777Q4)
[EUX7P] DEBUG: Sending indexes for njam-home to OL5YS2A-XTFA54E-FUEMEQQ-OSVW5TE-ESDZH4W-OW5ENTN-Q4AQKSJ-IT6S7Q5 at [2a02:168:978a::f8d]:41816-[2a05:d014:d1b:5000:fe7c:8d39:f02c:3a13]:22000/tcp-client: 1 files (<97 bytes)
[EUX7P] DEBUG: Index update (in): OL5YS2A-XTFA54E-FUEMEQQ-OSVW5TE-ESDZH4W-OW5ENTN-Q4AQKSJ-IT6S7Q5 / "njam-home": 1 files
[EUX7P] DEBUG: njam-home Update(OL5YS2A-XTFA54E-FUEMEQQ-OSVW5TE-ESDZH4W-OW5ENTN-Q4AQKSJ-IT6S7Q5, [1])
[EUX7P] DEBUG: insert; folder="njam-home" device=OL5YS2A-XTFA54E-FUEMEQQ-OSVW5TE-ESDZH4W-OW5ENTN-Q4AQKSJ-IT6S7Q5 File{Name:"test/jo13", Sequence:6114573, Permissions:0644, ModTime:2018-10-21 14:57:53.202172275 +0200 CEST, Version:{[{EUX7PUQ 1}]}, Length:0, Deleted:false, Invalid:false, LocalFlags:0x0, NoPermissions:false, BlockSize:131072, Blocks:[Block{0/0/0/e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855}]}
[EUX7P] DEBUG: update global; folder="njam-home" device=OL5YS2A-XTFA54E-FUEMEQQ-OSVW5TE-ESDZH4W-OW5ENTN-Q4AQKSJ-IT6S7Q5 file="test/jo13" version={[{EUX7PUQ 1}]} invalid=false
[EUX7P] DEBUG: new global for "test/jo13" after update: {{{[{EUX7PUQ 1}]}, OL5YS2A-XTFA54E-FUEMEQQ-OSVW5TE-ESDZH4W-OW5ENTN-Q4AQKSJ-IT6S7Q5}, {{[{EUX7PUQ 1}]}, 7777777-777777N-7777777-777777N-7777777-777777N-7777777-77777Q4}}
[EUX7P] DEBUG: njam-home WithNeed(7777777-777777N-7777777-777777N-7777777-777777N-7777777-77777Q4)
[EUX7P] DEBUG: Index update (in): 5YT4NI6-24V6YNT-BY7XUDN-ZGQPH4G-W2YJQIQ-FMJ4PHS-XXSCHAW-GXAIIQ4 / "njam-home": 1 files
[EUX7P] DEBUG: njam-home Update(5YT4NI6-24V6YNT-BY7XUDN-ZGQPH4G-W2YJQIQ-FMJ4PHS-XXSCHAW-GXAIIQ4, [1])
[EUX7P] DEBUG: insert; folder="njam-home" device=5YT4NI6-24V6YNT-BY7XUDN-ZGQPH4G-W2YJQIQ-FMJ4PHS-XXSCHAW-GXAIIQ4 File{Name:"test/jo13", Sequence:1185944, Permissions:0644, ModTime:2018-10-21 14:57:53.202172275 +0200 CEST, Version:{[{EUX7PUQ 1}]}, Length:0, Deleted:false, Invalid:false, LocalFlags:0x0, NoPermissions:false, BlockSize:131072, Blocks:[Block{0/0/0/e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855}]}
[EUX7P] DEBUG: update global; folder="njam-home" device=5YT4NI6-24V6YNT-BY7XUDN-ZGQPH4G-W2YJQIQ-FMJ4PHS-XXSCHAW-GXAIIQ4 file="test/jo13" version={[{EUX7PUQ 1}]} invalid=false
[EUX7P] DEBUG: new global for "test/jo13" after update: {{{[{EUX7PUQ 1}]}, 5YT4NI6-24V6YNT-BY7XUDN-ZGQPH4G-W2YJQIQ-FMJ4PHS-XXSCHAW-GXAIIQ4}, {{[{EUX7PUQ 1}]}, OL5YS2A-XTFA54E-FUEMEQQ-OSVW5TE-ESDZH4W-OW5ENTN-Q4AQKSJ-IT6S7Q5}, {{[{EUX7PUQ 1}]}, 7777777-777777N-7777777-777777N-7777777-777777N-7777777-77777Q4}}
[EUX7P] DEBUG: njam-home WithNeed(7777777-777777N-7777777-777777N-7777777-777777N-7777777-77777Q4)
[EUX7P] DEBUG: njam-home WithNeedTruncated(7777777-777777N-7777777-777777N-7777777-777777N-7777777-77777Q4)
[EUX7P] DEBUG: progress emitter: bytes completed for njam-home: 0
[EUX7P] DEBUG: model@0xc0001ea7e0 NeedSize("njam-home"): {0 0 0 0 0 0 [] 0}
[EUX7P] DEBUG: njam-home WithNeedTruncated(OL5YS2A-XTFA54E-FUEMEQQ-OSVW5TE-ESDZH4W-OW5ENTN-Q4AQKSJ-IT6S7Q5)
[EUX7P] DEBUG: model@0xc0001ea7e0 Completion(OL5YS2A-XTFA54E-FUEMEQQ-OSVW5TE-ESDZH4W-OW5ENTN-Q4AQKSJ-IT6S7Q5, "njam-home"): 100.000000 (0 / 142519357509 = 0.000000)
[EUX7P] DEBUG: njam-home WithNeedTruncated(5YT4NI6-24V6YNT-BY7XUDN-ZGQPH4G-W2YJQIQ-FMJ4PHS-XXSCHAW-GXAIIQ4)
[EUX7P] DEBUG: model@0xc0001ea7e0 Completion(5YT4NI6-24V6YNT-BY7XUDN-ZGQPH4G-W2YJQIQ-FMJ4PHS-XXSCHAW-GXAIIQ4, "njam-home"): 100.000000 (0 / 142519357509 = 0.000000)
This behaviour of high CPU usage when changing single files persists for half a minute or so after the last API request was made, even after the browser window was closed.
The difference between the two logs is that the latter one has these additional lines at the end:
[EUX7P] DEBUG: njam-home WithNeedTruncated(7777777-777777N-7777777-777777N-7777777-777777N-7777777-77777Q4)
[EUX7P] DEBUG: progress emitter: bytes completed for njam-home: 0
[EUX7P] DEBUG: model@0xc0001ea7e0 NeedSize("njam-home"): {0 0 0 0 0 0 [] 0}
[EUX7P] DEBUG: njam-home WithNeedTruncated(OL5YS2A-XTFA54E-FUEMEQQ-OSVW5TE-ESDZH4W-OW5ENTN-Q4AQKSJ-IT6S7Q5)
[EUX7P] DEBUG: model@0xc0001ea7e0 Completion(OL5YS2A-XTFA54E-FUEMEQQ-OSVW5TE-ESDZH4W-OW5ENTN-Q4AQKSJ-IT6S7Q5, "njam-home"): 100.000000 (0 / 142519357509 = 0.000000)
[EUX7P] DEBUG: njam-home WithNeedTruncated(5YT4NI6-24V6YNT-BY7XUDN-ZGQPH4G-W2YJQIQ-FMJ4PHS-XXSCHAW-GXAIIQ4)
[EUX7P] DEBUG: model@0xc0001ea7e0 Completion(5YT4NI6-24V6YNT-BY7XUDN-ZGQPH4G-W2YJQIQ-FMJ4PHS-XXSCHAW-GXAIIQ4, "njam-home"): 100.000000 (0 / 142519357509 = 0.000000)
I’m experiencing this behaviour also when running one of the two available GNOME extensions for Syncthing (1, 2). Since these extensions run all the time, the CPU usage for changing single files is high all the time.
Can someone explain to me which API requests result in this behaviour, and why? And is this expected behaviour? If this is expected behaviour, then any status panel/icon should probably use different APIs?