AHCI
-
Размер не влияет, потому что там алгоритм перебирает по кольцу все номера секторов кешированных, никаких хитрых списков ускоряющих поиск. Так что с увеличением кеша скорость даже может упасть при текущем алгоритме поиска.Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
Для AHCI пришлось делать в драйвере свой собственный кэш с поиском по хеш-таблице, потому что fat32 читает с диска по одному сектору, а это очень медленно.
Тесты: кэш 4 Мб
256 элементов по 16КБ - 7.4 с
128 х 32КБ - 6.3 с
64 х 128КБ - 5.8 с
кэш 8 МБ
512 х 16Кб - 7.3 с
256 х 32КБ - 6.4 с
128 х 64 КБ - 5.8 с
кэш 2МБ
128 х 32КБ - 6.3 с
Тесты: кэш 4 Мб
256 элементов по 16КБ - 7.4 с
128 х 32КБ - 6.3 с
64 х 128КБ - 5.8 с
кэш 8 МБ
512 х 16Кб - 7.3 с
256 х 32КБ - 6.4 с
128 х 64 КБ - 5.8 с
кэш 2МБ
128 х 32КБ - 6.3 с
Копировал 100500 файлов из /sd в /tmp и где-то что-то пошло не так. В системе были /bd.
В логе, кстати, видно место, когда произошла проблема с копированием файла. Потом я пытался убить безуспешно поток (видно в логах), т.к. после изменений CleverMouse поток умрёт только после полного окончания работы с ФС.
В логе, кстати, видно место, когда произошла проблема с копированием файла. Потом я пытался убить безуспешно поток (видно в логах), т.к. после изменений CleverMouse поток умрёт только после полного окончания работы с ФС.
- Attachments
-
-
BOARDLOG.TXT (69.81 KiB)Downloaded 337 times
-
Из хаоса в космос
Leency
Ты про
Ты про
илиError: CopyFile->ReadFile
/bd1/4/Testing files/Big_folder_1/1 (1345).txt
Error #6 - End of file, EOF
Я не могу пока отключить /bd после загрузки AHCI, но тот, кто использует два разных механизма для доступа к одному устройству - ССЗБ.K : Process - forced terminate PID: 00000029 [EOLITE]
K : Page fault
K : EAX : 0C49A5C8 EBX : 00C30010 ECX : 00270003
K : EDX : 00FFFFFF ESI : 00021730 EDI : 0001025C
K : EBP : 0009FFCC EIP : 00019247 ESP : 0009FFC0
K : Flags : 00011202 CS : 0000001B (application)
Первое. ОК, в следующий раз буду отключать.
Из хаоса в космос
Было бы замечательно прикрутить и к IDE режиму. Я в свое время не осилил к сожалению, хоть и планы были.Serge wrote:Для AHCI пришлось делать в драйвере свой собственный кэш с поиском по хеш-таблице,
Для DMA есть предварительный кэш на 16 секторов, которые считываются одним запросом.Serge wrote:потому что fat32 читает с диска по одному сектору, а это очень медленно.
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
Возможно будет полезным Эмулируют ли QEMU/KVM и VmWare AHCI(SATA) контроллеры?
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
Для справки, дисковый кеш ahci
Spoiler:
Code: Select all
#define BLOCK_SIZE 64
#define BLOCK_SHIFT 6
#define CACHE_SIZE 64
#define SECTOR_SIZE 512
size_t _stdcall ahci_adjust_cache_size(void* userdata, size_t suggested_size)
{
printf("LRU cache %dx%dKB size %d\n",CACHE_SIZE,BLOCK_SIZE/2, CACHE_SIZE*BLOCK_SIZE*SECTOR_SIZE);
return 0; //suggested_size;
}
typedef struct
{
struct list_head lru_list;
struct list_head key_list;
int64_t start;
char *mem;
void *r;
}dcache_t;
dcache_t dcache[CACHE_SIZE];
struct list_head key_hash[CACHE_SIZE];
struct list_head dcache_lru;
int init_dcache()
{
int i;
char *mem;
mem = KernelAlloc(CACHE_SIZE*BLOCK_SIZE*SECTOR_SIZE);
if(mem == NULL)
return -ENOMEM;
for(i = 0; i < CACHE_SIZE; i++)
INIT_LIST_HEAD(&key_hash[i]);
INIT_LIST_HEAD(&dcache_lru);
for(i = 0; i < CACHE_SIZE; i++)
{
INIT_LIST_HEAD(&dcache[i].key_list);
dcache[i].mem = mem + i * BLOCK_SIZE * SECTOR_SIZE;
list_add_tail(&dcache[i].lru_list, &dcache_lru);
}
return 0;
};
int _stdcall dcache_disk_read(void* userdata, void* buffer, int64_t startsector, int* numsectors)
{
int i, key;
int64_t sector;
int offset;
dcache_t *cache, *tmp_cache;
// return ahci_disk_read(userdata, buffer, startsector, *numsectors);
for(i = 0; i < *numsectors; i++)
{
sector = (startsector + i) & ~((u64)BLOCK_SIZE - 1);
offset = (startsector + i) & (BLOCK_SIZE - 1);
key = (sector >> BLOCK_SHIFT) & (CACHE_SIZE - 1);
cache = NULL;
list_for_each_entry(tmp_cache, &key_hash[key], key_list)
{
if(tmp_cache->start == sector)
{
cache = tmp_cache;
list_del(&cache->lru_list);
break;
}
};
if(cache == NULL)
{
cache = container_of(dcache_lru.next, dcache_t, lru_list);
list_del(&cache->key_list);
list_del(&cache->lru_list);
ahci_disk_read(userdata, cache->mem, sector, BLOCK_SIZE);
cache->start = sector;
list_add_tail(&cache->key_list, &key_hash[key]);
}
list_add_tail(&cache->lru_list, &dcache_lru);
memcpy((char*)buffer + i * SECTOR_SIZE, cache->mem + offset *SECTOR_SIZE, SECTOR_SIZE);
};
return 0;
};
Начиная с ядра r3742, разделы ntfs и ext2 с драйвером тоже должны работать.
Dell Vostro: таки да, чтение работает.
Dell Vostro: таки да, чтение работает.
Сделаем мир лучше!
Отличная новость !
Проверил воспроизведение видео, работает, но скорости чтения файловой системы недостаточно.
Лог на моём ноутбуке.
- Attachments
-
-
BOARDLOG.TXT (3.01 KiB)Downloaded 325 times
-
Диски не видны. Ноутбук Aspire 4740G
- Attachments
-
-
BOARDLOG.TXT (6.32 KiB)
- не знаю нужен или нет
Downloaded 328 times
-
PCIDEV.TXT (2.32 KiB)Downloaded 316 times
-
Из хаоса в космос
popovpa
А как всё в реальности подключено ?
Leency
А драйвер вообще запускался ? Я никаких следов этого не обнаружил.
А как всё в реальности подключено ?
Leency
А драйвер вообще запускался ? Я никаких следов этого не обнаружил.
ftp://ftp.kolibrios.org/users/Serge/new/ahci_rc06.7z
Отключены режимы энергосбережения. Прощайте, батарейки.
Mario_r4
Интересует вредный Dell Inspiron N7010
Отключены режимы энергосбережения. Прощайте, батарейки.
Mario_r4
Интересует вредный Dell Inspiron N7010
Who is online
Users browsing this forum: No registered users and 2 guests