Merge pull request #19591 from karalabe/64bit-align
core/rawdb, eth/downloader: align 64bit atomic fields
This commit is contained in:
		
						commit
						2f855bfa28
					
				| @ -66,8 +66,12 @@ const ( | ||||
| //   reserving it for go-ethereum. This would also reduce the memory requirements
 | ||||
| //   of Geth, and thus also GC overhead.
 | ||||
| type freezer struct { | ||||
| 	// WARNING: The `frozen` field is accessed atomically. On 32 bit platforms, only
 | ||||
| 	// 64-bit aligned fields can be atomic. The struct is guaranteed to be so aligned,
 | ||||
| 	// so take advantage of that (https://golang.org/pkg/sync/atomic/#pkg-note-BUG).
 | ||||
| 	frozen uint64 // Number of blocks already frozen
 | ||||
| 
 | ||||
| 	tables       map[string]*freezerTable // Data tables for storing everything
 | ||||
| 	frozen       uint64                   // Number of blocks already frozen
 | ||||
| 	instanceLock fileutil.Releaser        // File-system lock to prevent double opens
 | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -73,6 +73,11 @@ func (i *indexEntry) marshallBinary() []byte { | ||||
| // It consists of a data file (snappy encoded arbitrary data blobs) and an indexEntry
 | ||||
| // file (uncompressed 64 bit indices into the data file).
 | ||||
| type freezerTable struct { | ||||
| 	// WARNING: The `items` field is accessed atomically. On 32 bit platforms, only
 | ||||
| 	// 64-bit aligned fields can be atomic. The struct is guaranteed to be so aligned,
 | ||||
| 	// so take advantage of that (https://golang.org/pkg/sync/atomic/#pkg-note-BUG).
 | ||||
| 	items uint64 // Number of items stored in the table (including items removed from tail)
 | ||||
| 
 | ||||
| 	noCompression bool   // if true, disables snappy compression. Note: does not work retroactively
 | ||||
| 	maxFileSize   uint32 // Max file size for data-files
 | ||||
| 	name          string | ||||
| @ -86,7 +91,6 @@ type freezerTable struct { | ||||
| 
 | ||||
| 	// In the case that old items are deleted (from the tail), we use itemOffset
 | ||||
| 	// to count how many historic items have gone missing.
 | ||||
| 	items      uint64 // Number of items stored in the table (including items removed from tail)
 | ||||
| 	itemOffset uint32 // Offset (number of discarded items)
 | ||||
| 
 | ||||
| 	headBytes  uint32        // Number of bytes written to the head file
 | ||||
|  | ||||
| @ -98,6 +98,13 @@ var ( | ||||
| ) | ||||
| 
 | ||||
| type Downloader struct { | ||||
| 	// WARNING: The `rttEstimate` and `rttConfidence` fields are accessed atomically.
 | ||||
| 	// On 32 bit platforms, only 64-bit aligned fields can be atomic. The struct is
 | ||||
| 	// guaranteed to be so aligned, so take advantage of that. For more information,
 | ||||
| 	// see https://golang.org/pkg/sync/atomic/#pkg-note-BUG.
 | ||||
| 	rttEstimate   uint64 // Round trip time to target for download requests
 | ||||
| 	rttConfidence uint64 // Confidence in the estimated RTT (unit: millionths to allow atomic ops)
 | ||||
| 
 | ||||
| 	mode SyncMode       // Synchronisation mode defining the strategy used (per sync cycle)
 | ||||
| 	mux  *event.TypeMux // Event multiplexer to announce sync operation events
 | ||||
| 
 | ||||
| @ -109,9 +116,6 @@ type Downloader struct { | ||||
| 	stateDB    ethdb.Database  // Database to state sync into (and deduplicate via)
 | ||||
| 	stateBloom *trie.SyncBloom // Bloom filter for fast trie node existence checks
 | ||||
| 
 | ||||
| 	rttEstimate   uint64 // Round trip time to target for download requests
 | ||||
| 	rttConfidence uint64 // Confidence in the estimated RTT (unit: millionths to allow atomic ops)
 | ||||
| 
 | ||||
| 	// Statistics
 | ||||
| 	syncStatsChainOrigin uint64 // Origin block number where syncing started at
 | ||||
| 	syncStatsChainHeight uint64 // Highest block number known when syncing started
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user