[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]
Subject: Re: [PATCH v1 1/2] content/virtio-balloon: VIRTIO_BALLOON_F_FREE_PAGE_HINT
On 01/15/2019 02:58 AM, Michael S. Tsirkin wrote:
On Tue, Nov 13, 2018 at 06:27:46PM +0800, Wei Wang wrote:+\field{num_pages} and \field{actual} are always available.+ +\field{free_page_report_cmd_id} is available if +VIRTIO_BALLON_F_FREE_PAGE_HINT negotiated. + +\devicenormative{\subsubsection}{Device configuration layout}{Device Types / Traditional Memory Balloon Device / Device configuration layout} + +The device MUST NOT set \field{free_page_report_cmd_id} to a value +between \field{VIRTIO_BALLOON_CMD_ID_DONE} and +\field{VIRTIO_BALLOON_CMD_ID_MIN} exclusive. Exclusive is confusing since you can include one edge or both. Let's write it up positively. So the only legal values are VIRTIO_BALLOON_CMD_ID_MIN to VIRTIO_BALLOON_CMD_ID_MAX inclusive or VIRTIO_BALLOON_CMD_ID_STOP?
OK, plan to change it: The device MUST set a legal value to \field{free_page_report_cmd_id}: a value between \field{VIRTIO_BALLOON_CMD_ID_MIN} and \field{VIRTIO_BALLOON_CMD_ID_MAX} inclusive, \field{VIRTIO_BALLOON_CMD_ID_STOP}, or \field{VIRTIO_BALLOON_CMD_ID_DONE}.
+ \subparagraph{Legacy Interface: Device configuration layout}\label{sec:Device Types / Memory Balloon Device / Device configuration layout / Legacy Interface: Device configuration layout} When using the legacy interface, transitional devices and drivers @@ -4448,8 +4469,20 @@ The device initialization process is outlined below: \item DRIVER_OK is set: device operation begins. \item Notify the device about the stats virtqueue buffer. \end{enumerate} + +\item If the VIRTIO_BALLOON_F_FREE_PAGE_HINT feature bit is + negotiated: + \begin{enumerate} + \item Identify the free page virtqueue. + \item Set \field{free_page_report_cmd_id} to + \field{VIRTIO_BALLOON_CMD_ID_MIN}.Does driver does it or the device? And does it have to be MIN? Why? Should not driver *read* the ID instead?
Yes, the device sets the value and the driver reads it. Probably not necessarily have to be MIN.
Plan to change: \item If the VIRTIO_BALLOON_F_FREE_PAGE_HINT feature bit is negotiated: \begin{enumerate} \item Identify the free page virtqueue. \item Set \field{free_page_report_cmd_id} to a legal value. \end{enumerate}
+ \item Register a notifier with an external component (e.g. a live + migration agent) who will request for the free page reporting + from the driver.Spec only operates in terms of driver and device. I don't know what does above mean in these terms but please restate it accordingly. No notifiers live migration agents and external (to what?) components please.
OK, removed this part.
+\item The driver reads \field{free_page_report_cmd_id}: if it is not + \field{VIRTIO_BALLOON_CMD_ID_STOP}, + \field{VIRTIO_BALLOON_CMD_ID_DONE}, and different from the value it + read last time, start free page reporting as follows: + \begin{enumerate} + \item Write the received \field{free_page_report_cmd_id} to a + buffer and add it to the free page virtqueue to indicate the start + of the reporting. + \item Collect free pages and write each page address into an entry + of the virtqueue.Spec does not define terms such as entry for virtqueue or writing into virtqueue. What you mean is add each page as an input buffer to the virtqueue I think? Also are there any alignment assumptions? What does "page" mean here generally? A size aligned physically contigious region of free memory?
OK, thanks for your suggestions. Here is the rewording (changed page to memory): \begin{enumerate} \item The device updates \field{free_page_report_cmd_id}: if it has reached \field{VIRTIO_BALLOON_CMD_ID_MAX}, resets it to \field{VIRTIO_BALLOON_CMD_ID_MIN}. Otherwise, increments it by 1. \item The device sends a configuration change notification to the driver. \item The driver reads \field{free_page_report_cmd_id}: if it is not \field{VIRTIO_BALLOON_CMD_ID_STOP}, \field{VIRTIO_BALLOON_CMD_ID_DONE}, and different from the value it read last time, start free page reporting as follows: \begin{enumerate} \item Write the received \field{free_page_report_cmd_id} to a buffer from the free page virtqueue. \item Write addresses of guest free memory to buffers from the free page virtqueue. \item Write \field{VIRTIO_BALLOON_CMD_ID_STOP} to a buffer from the free page virtqueue, which signifies that the guest free memory reporting is complete. \end{enumerate} A driver to device notification is sent in the above steps after writing a buffer from the free page virtqueue if the notification is not suppressed. \item The device processes available buffers from the virtqueue and stops the processing after it reads a buffer which stores \field{VIRTIO_BALLOON_CMD_ID_STOP}. \end{enumerate} A request to actively stop the free page reporting proceeds as follows: \begin{enumerate} \item The device sets \field{free_page_report_cmd_id} to \field{VIRTIO_BALLOON_CMD_ID_STOP}, followed by a configuration change notification to the driver if not suppressed. \item The driver reads \field{free_page_report_cmd_id} and identifies that it is \field{VIRTIO_BALLOON_CMD_ID_STOP}, then it stops adding buffers to the free page virtqueue. \item The driver writes \field{VIRTIO_BALLOON_CMD_ID_STOP} into a buffer from virtqueue. \item The device stops processing the available buffers from the virtqueue after receiving the buffer that stores \field{VIRTIO_BALLOON_CMD_ID_STOP}. \end{enumerate} The device can end the free page reporting by setting \field{free_page_report_cmd_id} to \field{VIRTIO_BALLOON_CMD_ID_DONE}, followed by a configuration notification to the driver.
+ +The driver SHOULD add the addresses of free pages as input buffers +to the virtqueue. + +The driver SHOULD add the buffer that stores the value of +\field{free_page_report_cmd_id} or \field{VIRTIO_BALLOON_CMD_ID_STOP} +as an output buffer to the virtqueue. + +The driver SHOULD use different buffers to send the the value of +\field{free_page_report_cmd_id} and +\field{VIRTIO_BALLOON_CMD_ID_STOP} to avoid one being overwritten by +another when the device has a delay in reading the command. + +The driver SHOULD release all the collected free pages after receiving +\field{VIRTIO_BALLOON_CMD_ID_DONE}. + \section{SCSI Host Device}\label{sec:Device Types / SCSI Host Device}The virtio SCSI host device groups together one or more virtual-- 2.7.4
The above looks like implementation related, I also plan to remove them. Thanks for your comments! Best, Wei
[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]