mirror of
https://github.com/elastic/elasticsearch.git
synced 2025-06-27 17:10:22 -04:00
Turn direct IO for BBQ rescoring off by default (#130014)
Add a changelog entry for direct io option
This commit is contained in:
parent
77b459c454
commit
ff65fd1133
5 changed files with 27 additions and 2 deletions
18
docs/changelog/125921.yaml
Normal file
18
docs/changelog/125921.yaml
Normal file
|
@ -0,0 +1,18 @@
|
|||
pr: 125921
|
||||
summary: Allow direct IO for BBQ rescoring
|
||||
area: Vector Search
|
||||
type: feature
|
||||
highlight:
|
||||
title: Allow direct IO for BBQ rescoring
|
||||
body: |-
|
||||
BBQ rescoring performance can be drastically affected by the amount of available
|
||||
off-heap RAM for use by the system page cache. When there is not enough off-heap RAM
|
||||
to fit all the vector data in memory, BBQ search latencies can be affected by as much as 5000x.
|
||||
Specifying the `vector.rescoring.directio=true` Java option on all vector search
|
||||
nodes modifies rescoring to use direct IO, which eliminates these very high latencies
|
||||
from searches in low-memory scenarios, at a cost of a reduction
|
||||
in vector search performance for BBQ indices when the vectors do all fit in memory.
|
||||
|
||||
This option is released in 9.1 as a tech preview whilst we analyse its effect
|
||||
for a variety of use cases.
|
||||
issues: []
|
|
@ -17,6 +17,7 @@ import org.apache.lucene.store.IOContext;
|
|||
import org.apache.lucene.store.IndexOutput;
|
||||
import org.apache.lucene.tests.util.LuceneTestCase;
|
||||
import org.elasticsearch.common.settings.Settings;
|
||||
import org.elasticsearch.index.codec.vectors.es818.ES818BinaryQuantizedVectorsFormat;
|
||||
import org.elasticsearch.plugins.Plugin;
|
||||
import org.elasticsearch.search.vectors.KnnSearchBuilder;
|
||||
import org.elasticsearch.search.vectors.VectorData;
|
||||
|
@ -43,7 +44,9 @@ import static org.hamcrest.Matchers.is;
|
|||
public class DirectIOIT extends ESIntegTestCase {
|
||||
|
||||
@BeforeClass
|
||||
public static void checkSupported() throws IOException {
|
||||
public static void checkSupported() {
|
||||
assumeTrue("Direct IO is not enabled", ES818BinaryQuantizedVectorsFormat.USE_DIRECT_IO);
|
||||
|
||||
Path path = createTempDir("directIOProbe");
|
||||
try (Directory dir = open(path); IndexOutput out = dir.createOutput("out", IOContext.DEFAULT)) {
|
||||
out.writeString("test");
|
||||
|
|
|
@ -87,7 +87,7 @@ import static org.elasticsearch.index.mapper.vectors.DenseVectorFieldMapper.MAX_
|
|||
*/
|
||||
public class ES818BinaryQuantizedVectorsFormat extends FlatVectorsFormat {
|
||||
|
||||
static final boolean USE_DIRECT_IO = Boolean.parseBoolean(System.getProperty("vector.rescoring.directio", "true"));
|
||||
public static final boolean USE_DIRECT_IO = Boolean.parseBoolean(System.getProperty("vector.rescoring.directio", "false"));
|
||||
|
||||
public static final String BINARIZED_VECTOR_COMPONENT = "BVEC";
|
||||
public static final String NAME = "ES818BinaryQuantizedVectorsFormat";
|
||||
|
|
|
@ -333,6 +333,8 @@ public class ES818BinaryQuantizedVectorsFormatTests extends BaseKnnVectorsFormat
|
|||
}
|
||||
|
||||
static void checkDirectIOSupported() {
|
||||
assumeTrue("Direct IO is not enabled", ES818BinaryQuantizedVectorsFormat.USE_DIRECT_IO);
|
||||
|
||||
Path path = createTempDir("directIOProbe");
|
||||
try (Directory dir = open(path); IndexOutput out = dir.createOutput("out", IOContext.DEFAULT)) {
|
||||
out.writeString("test");
|
||||
|
|
|
@ -221,6 +221,8 @@ public class ES818HnswBinaryQuantizedVectorsFormatTests extends BaseKnnVectorsFo
|
|||
}
|
||||
|
||||
static void checkDirectIOSupported() {
|
||||
assumeTrue("Direct IO is not enabled", ES818BinaryQuantizedVectorsFormat.USE_DIRECT_IO);
|
||||
|
||||
Path path = createTempDir("directIOProbe");
|
||||
try (Directory dir = open(path); IndexOutput out = dir.createOutput("out", IOContext.DEFAULT)) {
|
||||
out.writeString("test");
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue