o
    i                     @   sl   d dl Z d dlmZ d dlmZ d dlmZ d dlmZm	Z	 d dl
mZ G dd de	ZG d	d
 d
eZdS )    N)Iterable)	BlockHash)LoadStoreSpec)BackendBlockStatusCPULoadStoreSpecc                       s4   e Zd Zejdejfg Zdef fddZ  Z	S )CPUBlockStatusblock_idc                    s   t    || _d S N)super__init__r
   )selfr
   	__class__ U/home/ubuntu/vllm_env/lib/python3.10/site-packages/vllm/v1/kv_offload/backends/cpu.pyr      s   

zCPUBlockStatus.__init__)
__name__
__module____qualname__r   _fields_ctypesc_int64intr   __classcell__r   r   r   r   r	      s    r	   c                       st   e Zd Zdedef fddZdd Zdee dee fd	d
Z	defddZ
dee dee defddZ  ZS )
CPUBackend
block_size
num_blocksc                    s*   t  j|t d || _d| _g | _d S )N)r   mediumr   )r   r   r   r   r   num_allocated_blocksallocated_blocks_free_list)r   r   r   r   r   r   r      s   
zCPUBackend.__init__c                 C   s   t | j| j | j S r   )lenr    r   r   )r   r   r   r   get_num_free_blocks   s   zCPUBackend.get_num_free_blocksblock_hashesreturnc                 C   s   t t|| j| j }t|| }t| j|ksJ g }t|D ]}|t| j |  jd7  _q t|D ]}| j }|t| q6|S )N   )	minr!   r   r   r    rangeappendr	   pop)r   r#   num_fresh_blocksnum_reused_blocksblocks_r
   r   r   r   allocate_blocks#   s   
zCPUBackend.allocate_blocksblockc                 C   s    t |tsJ | j|j d S r   )
isinstancer	   r    r(   r
   )r   r/   r   r   r   free7   s   zCPUBackend.freer,   c                 C   s   t dd |D S )Nc                 S   s   g | ]}|j qS r   )r
   ).0r/   r   r   r   
<listcomp>>   s    z2CPUBackend.get_load_store_spec.<locals>.<listcomp>r   )r   r#   r,   r   r   r   get_load_store_spec;   s   zCPUBackend.get_load_store_spec)r   r   r   r   r   r"   listr   r   r.   r1   r   r   r4   r   r   r   r   r   r      s    r   )r   collections.abcr   vllm.v1.core.kv_cache_utilsr   vllm.v1.kv_offload.abstractr   vllm.v1.kv_offload.backendr   r   vllm.v1.kv_offload.mediumsr   r	   r   r   r   r   r   <module>   s   