-
Notifications
You must be signed in to change notification settings - Fork 119
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Thread-per-core Architecture #382
Comments
Kindly pinging :) |
Yes, Photon coroutines can satisfy your requirements. Every resource is located in a single thread and shared among coroutines. You can read the documents for more details. |
Linux thread is referred to as vCPU in Photon. Each of them has a dedicated scheduler for coroutines (Photon's threads), and a dedicated instance of event engine (e.g. epoll or io_uring). Their execution is basically independent of each other, unless you conduct inter-vCPU task coordination or migration. |
You can realize interrupt affinity in the same way you do to other applications, e.g. pinning interrupt handler and corresponding photon vCPU (Linux thread) to the same physical CPU core. |
What would you recommend to separate CPU and IO-bound jobs in the programming models? As far as I know, coroutines are for IO-bound jobs. |
You can use the migrate API to move your CPU bound tasks to specific vCPU. It’s lightweight |
What would you recommend for Interprocessor communication if shared memory is absolutely no? |
Is it a Photon related issue? |
Already appreciate your answers so I apologize if it sounds unrelated. I am evaluating and comparing Photon with Seastar. Trying to map approaches in Seastar to Photon. For example, In Seastar, it is mostly done by passing a lambda to a neighbor VCPU. I was wondering what do you think is a best approach to take as communication between VCPUs. |
A Photon thread (coroutine) is essentially a function. Lambda is also the same. The underlay implementation of thread migrate is eventfd notification and task queue. Besides Photon also has a MPMC queue to transmit functions, encapsulated as the so-called |
I've searched the code, how about use |
@loongs-zhang Are you suggesting that we bind vCPU by default? |
Multi-process without sharing memory? How about UNIX domain socket? |
yes |
How about deep cloning and sharing? |
As different apps require different binding configuration, it's difficult for us to do it by default. |
I not sure whether cloning is feasible, as it may imply sharing in the first place, and @kosav7r said it was "absolutely no". |
Photon has a built-in BTW, the jobs are efficiently passed to workers with lock-free shared memory ring queue. |
Hi folks,
I'm in the process of building a storage system and evaluating PhotonLib. Same architectural decisions on the system:
Do you have any recommendations on thread-to-thread communication without sharing any memory?
Coroutine-based approach is new to me. Can I achieve my basic needs on PhotonLib? If so, are there any examples?
Thanks!
The text was updated successfully, but these errors were encountered: