IP Library › Granted Patent US 12,405,727
Granted Patent B2
US 12,405,727 · App. 18/344,901 · Granted Sep 2, 2025

Method and apparatus for data buffering of write operations and performing write operations

Inventors: Lawrence Stewart (Wayland, MA); David Keppel (Mountain View, CA)
Assignee: Intel Corporation
G06F3/061G06F3/0659G06F3/0673
View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 12,405,727
App. No.
18/344,901
Granted
Sep 2, 2025
Kind
B2
Abstract

Various examples relate to a method, apparatus, device and computer program for a first entity, to a method, apparatus, device and computer program for a second entity, to the first and second entity, and to a system comprising the first and second entity. Some aspects of the present disclosure relate to a method for a first entity for data buffering of write operations performed by a second entity comprises providing a limited-space data buffer comprising a plurality of slots for storing data provided by the second entity, processing the data stored in the slots of the limited-space data buffer, updating a read indicator based on the processing of the data, and providing a copy of the read indicator to the second entity according to a pre-defined criterion.

Claims (34)

1. A method for a first entity for data buffering of write operations performed by a second entity, the method comprising:

providing a limited-space data buffer comprising a plurality of slots for storing data provided by the second entity;

processing the data stored in the slots of the limited-space data buffer;

updating a read indicator based on the processing of the data; and

providing a copy of the read indicator to the second entity according to a pre-defined criterion.

2. The method according to claim 1 , wherein the data stored in the slots of the limited-space data buffer has a fixed size.

3. The method according to claim 1 , wherein the data stored in the slots of the limited-space data buffer has a variable size, with the data comprising a header portion specifying a size of the data and a payload portion comprising payload data.

4. The method according to claim 1 , wherein the limited-space data buffer is segmented into a first segment of previously processed data, a second segment of data being processed or data to be processed, and a third segment for future data to be provided by the second entity, with the segmentation changing according to a progress in processing the data and according to the copy of the read indicator provided to the second entity.

5. The method according to claim 1 , wherein the data stored in the respective slots comprises a sequence number, the method comprising determining whether new data has been provided in a slot based on the sequence number of the data stored in the slot.

6. The method according to claim 5 , wherein the read indicator and the copy of the read indicator indicate one or more slots of the plurality of slots as having been processed in terms of the sequence numbers included in the respective data having been processed, the method comprising maintaining at least one next expected sequence number, wherein the acts of determining whether new data has been provided in a slot and of processing the data are based on the at least one next expected sequence number.

7. The method according to claim 6 , wherein the acts of determining whether new data has been provided in a slot and of processing the data are based on a mapping between the respective sequence numbers and the plurality of slots.

8. The method according to claim 6 , wherein the act of processing the data is performed by a single worker thread, with the single worker thread determining the slot comprising the data to be processed based on the next expected sequence number.

9. The method according to claim 6 , wherein the act of processing the data is performed by a plurality of worker threads, with the plurality of worker threads each being assigned a sequence number, and the respective worker threads determining the slot comprising the data to be processed based on the respective sequence number.

10. The method according to claim 5 , wherein the sequence number included in the data is a shortened sequence number being re-used that is derived from a long-form unique sequence number.

11. The method according to claim 1 , wherein the act of processing the data is performed by a single worker thread, and the read indicator is updated after the single worker thread has read or copied the data stored in the respective slot while processing the data.

12. The method according to claim 1 , wherein the act of processing the data is performed by a plurality of worker threads, and the read indicator is updated according to a highest sequence number of an uninterrupted sequence of sequence numbers having been read or copied by the plurality of worker threads.

13. A method for a second entity for performing write operations at a first entity, the method comprising:

maintaining a copy of a read indicator provided by the first entity as a local variable, the copy of the read indicator indicating one or more slots of a plurality of slots of a limited-space data buffer having been processed at the first entity;

setting an allowed range for a local counter based on the read indicator;

providing a value of the local counter to an application waiting to perform a write operation at a first entity, the value of the local counter indicating a slot of the plurality of slots to perform the write operation at, with the write operation being constrained by the allowed range; and

incrementing the local counter.

14. The method according to claim 13 , wherein the local counter represents a sequence number to be included by the application waiting to perform the write operation in the data being written to the slot, wherein the copy of the read indicator indicate the one or more slots of the plurality of slots having been processed in terms of sequence numbers included in the respective data having been processed by the first entity.

15. The method according to claim 13 , wherein the acts of providing the value of the local counter and of incrementing the local counter are performed together as a single atomic instruction.

16. The method according to claim 13 , wherein the method further comprises, by the application, writing data to a slot of the plurality of slots using an atomic write operation according to the local counter.

17. An apparatus for a first entity for data buffering of write operations performed by a second entity, the apparatus comprising:

interface circuitry for communicating with the second entity; and

machine-readable instructions; and

processor circuitry to execute the machine-readable instructions to perform the method according to claim 1 .

18. An apparatus for a second entity for performing write operations at a first entity, the apparatus comprising:

interface circuitry for communicating with the first entity; and

machine-readable instructions; and

processor circuitry to execute the machine-readable instructions to perform the method according to claim 13 .

19. A non-transitory machine-readable storage medium including program code, when executed, to cause a machine to perform the method of claim 1 .

20. A non-transitory machine-readable storage medium including program code, when executed, to cause a machine to perform the method according to claim 13 .

Assignments (1)
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Aug 10, 2023
From: KEPPEL, DAVID; STEWART, LAWRENCE
To: INTEL CORPORATION
Reel/Frame 064544/0141 →
Continuity (1)
Related Publication 20240126440A1 · Apr 18, 2024
References Cited (14)
US 11481147B1 · Fradkin · 2022 [cited by examiner]
US 20110191555A1 · Narayanan · 2011 [cited by examiner]
US 20150349926A1 · Pollack · 2015 [cited by examiner]
US 20160202722A1 · Kuwata · 2016 [cited by examiner]
US 20180081624A1 · Liljedahl · 2018 [cited by examiner]
US 20200073584A1 · Tsuchiya · 2020 [cited by examiner]
US 20220137873A1 · Liljedahl · 2022 [cited by examiner]
US 20230291696A1 · Ma · 2023 [cited by examiner]
Yang et al.; A Wait-free Queue as Fast as Fetch-and-Add; Department of Computer Science, Rice University; Mar. 12-16, 2016, Barcelona, Spain. [cited by applicant]
Morrison et al; Fast Concurrent Queues for x86 Processors; Blavatnik School of Computer Science, Tel Aviv University; Feb. 23-27, 2013, Shenzhen, China. [cited by applicant]
Snellman, J., Juho Snellman's Weblog, “I've been writing ring buffers wrong all these years”, https://www.snellman.net/blog/archive/2016-12-13-ring-buffers/ (posted on Dec. 13, 2016, last accessed: Jul. 18, 2023). [cited by applicant]
Morton, A., “RE: [RFC, 2.6] a simple FIFO implementation”, https://lkml.iu.edu/hypermail/linux/kernel/0409.1/2709.html, (posted on: Sep. 15, 2004, last accessed: Jul. 18, 2023). [cited by applicant]
Torvalds, Linus, https://github.com/torvalds/linux/blob/1da177e4c3f41524e886b7f1b8a0c1fc7321cac2/drivers/net/lance.c (posted on: Apr. 17, 2005, last accessed: Jul. 18, 2023). [cited by applicant]
Herlihy Maurice, Shavit Nir, “The Art of Multiprocessor Programming”, Morgan Kaufmann, (2012), ISBN: 9780124159501. [cited by applicant]